Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

Лайфхак для твиттерян, или по следам Твидиума

После закрытия Леонидом Кофманом своего знаменитого проекта Твидиум длинный ряд пользователей Твиттера в полной мере ощутил, сколь неудобна и недружелюбна к юзерам эта социальная сеть...

Говорю практически без сарказма, т. к. сам прочно нахожусь в числе недовольных... анфолловинг и массфолловинг нажатием всего одной кнопки, парсинг твитов и отложенный постинг, как в Твиттере жить без всего этого? - согласитесь, ну нереально же.

Недовольство влечет за собой, как правило, желание подвигать за... пошевелить мозгами. Данный материал представляет собой, так сказать, отчет о результатах соответствующих изысканий, призванных вернуть себе - хотя б в некоторой степени - прежние удобства. Но автор не жадина и всегда готов поделиться тем немногим, чем располагает, с благодарными читателями... Представленный сегодня на ваш суд скрипт, пожалуй, сыроват для имиджа коммерческого интернет-сервиса (API Twitter всячески противится такого рода использованию своих ресурсов, что и было, как представляется автору, началом конца Твидиума и ему подобных проектов), но в качестве однопользовательского "домашнего" приложения - изрядно облегчает работу с несколькими твиттер-аккаунтами.

 

Twitter Toolkit onRails. Лайфхак для твиттерян, или по следам Твидиума
Twitter Toolkit onRails. Лайфхак для твиттерян, или по следам Твидиума

 

Итак, поехали. Для начала зададимся вопросом, что именно нам понадобится, дабы автоматизировать процесс анфолловинга невзаимных аккаунтов? Иными словами - как в Твиттере "на автомате" отписаться от тех, кого читаете вы, но кто не читает вас? - все, на самом деле, весьма несложно. И беспрестанные изменения веб-интерфейса Твиттера (твиттеряне этого почти не замечают) нам с вами ровно побоку, коль скоро API Twitter не чинит (в данном случае) никаких препятствий.

Примечание. Вам потребуются установленные на вашем ПК Ruby и gem 'twitter' (зависимости будут инсталлированы автоматически).

Понадобятся ключи доступа, запрос которых теперь проходят в Твиттере ручную модерацию. Которые, после получения, инициализируем следующим образом:

 

  def client
    config = {
      consumer_key: '******************',
      consumer_secret: '*******************',
      access_token: '***************************',
      access_token_secret: '************************'
    }
    Twitter::REST::Client.new config
  end

 

И - элегантно получаем список читателей (фолловеров) аккаунта, вызывая метод get_followers с параметрами client, user_id (user_id - ваш никнейм в Твиттере):

 

  def get_followers(*args)
    follower_ids = []
    next_cursor = -1
    while next_cursor != 0
      cursor = args[0].follower_ids(args[1], cursor: next_cursor)
      follower_ids.concat cursor.attrs[:ids]
      next_cursor = cursor.send(:next_cursor)
    end
    followers = []
    follower_ids.each_slice(100) do |ids|
      followers.concat args[0].users(ids)
    end
  end

 

Совершенно аналогично достаем массив френдов, после чего вычитаем первый массив из второго, получая список аккаунтов, предназначенных для анфолловинга. В скобках: в этот перечень войдут также и аккаунты, действие которых приостановлено Твиттером.

 

 

Вот, собственно, и вся премудрость... а дальше еще проще:

 

unfollow(client, list)

 

Полностью рабочий скрипт доступен по ссылке, требуется лишь вписать токены доступа и никнейм твиттер-аккаунта. Автор готов поручиться, что ни один ваш читатель не будет таким образом анфолловлен, не беспокойтесь. Пробуйте.

 

Twitter Toolkit onRails. Парсинг твитов
Twitter Toolkit onRails. Парсинг твитов

 

И сразу возникает вопрос: если изменить вектор вычитания - получим, стало быть, список аккаунтов уже для фолловинга? - т.е. перечень тех, кто подписан на вас, но на которых не подписались пока еще вы. Как с этим?

Ответ - да, верно. Список акков мы таким образом получим, но далее пойдет не столь гладко, как с анфолловингом. Вкупе с массфолловингом в игру моментально вступают ограничения API Twitter.

 

Twitter Toolkit onRails. Массфолловинг (ответный фолловинг)
Twitter Toolkit onRails. Массфолловинг (ответный фолловинг)

 

Взгляните на скриншот. Сперва прога получает перечень фолловеров, затем - френдов; далее идет сравнение двух массивов и начинается фолловинг. Каждый раз после подписки на несколько аккаунтов - от Твиттера приходит отлуп, и приложению приходится засыпать (rescue) на некоторое время, после чего работа возобновляется. Увы, в отличие от анфолловинга, API Twitter делает все для того, чтобы затруднить нам с вами автоматический фолловинг, хотя бы и ответный, приходится с этим мириться. В качестве альтернативы я написал некий комбинированный сервис: приложение (да, это уже не скрипт) в качестве итога работы выводит на страничку заданное число ссылок на ваших фолловеров, в каждую из которых нужно ткнуться мышкой и вручную зафолловить. Как вариант.

 

Twitter Toolkit onRails. Авторетвиты
Twitter Toolkit onRails. Авторетвиты

 

Несколько слов о приложении, которое всегда доступно в гитхабе. Это rails-app (Ruby on Rails 6), веб-интерфейс которого выполнен на основе Bootstrap 4, информационные сообщения - Flash Messages; на данный момент умеет ответный фолловинг описанными выше двумя способами (автоматический и наполовину ручной), анфолловинг без никаких ограничений, парсинг твитов из любого указанного вами твиттер-аккаунта и постинг твитов с рандомными промежутками времени, также любое количество ретвитов по ключевым словам или тэгам; также способен вытаскивать перечень читателей твиттер-аккаунта (меня однажды попросили об этой фиче).

Приложение способно работать с любым количеством твиттер-аккаунтов, в том числе и одновременно: все задачи объявляются на основе Active Job, позволяя параллельное выполнение. Разумеется, реализована возможность работы посредством https-прокси (внимание, без проксей одновременная работа с несколькими аккаунтами крайне нежелательна и способна привести к временному либо даже перманентному их закрытию; но работа с одним аккаунтом вполне безопасна). Не составляет труда доустановить сверху sidekiq, при желании (вкупе с Redis обеспечит более стабильную работу).

Ну, вот как-то так. Леонид Кофман скептически пожмет плечами, вероятно, но... но вот как умеем. Хотя Твидиум был круче, конечно.

Оставить комментарий

Добавьте ваш комментарий

Комментарии в блоге