Говорю практически без сарказма, т. к. сам прочно нахожусь в числе недовольных... анфолловинг и массфолловинг нажатием всего одной кнопки, парсинг твитов и отложенный постинг, как в Твиттере жить без всего этого? - согласитесь, ну нереально же.
Недовольство влечет за собой, как правило, желание подвигать за... пошевелить мозгами. Данный материал представляет собой, так сказать, отчет о результатах соответствующих изысканий, призванных вернуть себе - хотя б в некоторой степени - прежние удобства. Но автор не жадина и всегда готов поделиться тем немногим, чем располагает, с благодарными читателями... Представленный сегодня на ваш суд скрипт, пожалуй, сыроват для имиджа коммерческого интернет-сервиса (API Twitter всячески противится такого рода использованию своих ресурсов, что и было, как представляется автору, началом конца Твидиума и ему подобных проектов), но в качестве однопользовательского "домашнего" приложения - изрядно облегчает работу с несколькими твиттер-аккаунтами.
Итак, поехали. Для начала зададимся вопросом, что именно нам понадобится, дабы автоматизировать процесс анфолловинга невзаимных аккаунтов? Иными словами - как в Твиттере "на автомате" отписаться от тех, кого читаете вы, но кто не читает вас? - все, на самом деле, весьма несложно. И беспрестанные изменения веб-интерфейса Твиттера (твиттеряне этого почти не замечают) нам с вами ровно побоку, коль скоро 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)
Полностью рабочий скрипт доступен по ссылке, требуется лишь вписать токены доступа и никнейм твиттер-аккаунта. Автор готов поручиться, что ни один ваш читатель не будет таким образом анфолловлен, не беспокойтесь. Пробуйте.
И сразу возникает вопрос: если изменить вектор вычитания - получим, стало быть, список аккаунтов уже для фолловинга? - т.е. перечень тех, кто подписан на вас, но на которых не подписались пока еще вы. Как с этим?
Ответ - да, верно. Список акков мы таким образом получим, но далее пойдет не столь гладко, как с анфолловингом. Вкупе с массфолловингом в игру моментально вступают ограничения API Twitter.
Взгляните на скриншот. Сперва прога получает перечень фолловеров, затем - френдов; далее идет сравнение двух массивов и начинается фолловинг. Каждый раз после подписки на несколько аккаунтов - от Твиттера приходит отлуп, и приложению приходится засыпать (rescue) на некоторое время, после чего работа возобновляется. Увы, в отличие от анфолловинга, API Twitter делает все для того, чтобы затруднить нам с вами автоматический фолловинг, хотя бы и ответный, приходится с этим мириться. В качестве альтернативы я написал некий комбинированный сервис: приложение (да, это уже не скрипт) в качестве итога работы выводит на страничку заданное число ссылок на ваших фолловеров, в каждую из которых нужно ткнуться мышкой и вручную зафолловить. Как вариант.
Несколько слов о приложении, которое всегда доступно в гитхабе. Это rails-app (Ruby on Rails 6), веб-интерфейс которого выполнен на основе Bootstrap 4, информационные сообщения - Flash Messages; на данный момент умеет ответный фолловинг описанными выше двумя способами (автоматический и наполовину ручной), анфолловинг без никаких ограничений, парсинг твитов из любого указанного вами твиттер-аккаунта и постинг твитов с рандомными промежутками времени, также любое количество ретвитов по ключевым словам или тэгам; также способен вытаскивать перечень читателей твиттер-аккаунта (меня однажды попросили об этой фиче).
Приложение способно работать с любым количеством твиттер-аккаунтов, в том числе и одновременно: все задачи объявляются на основе Active Job, позволяя параллельное выполнение. Разумеется, реализована возможность работы посредством https-прокси (внимание, без проксей одновременная работа с несколькими аккаунтами крайне нежелательна и способна привести к временному либо даже перманентному их закрытию; но работа с одним аккаунтом вполне безопасна). Не составляет труда доустановить сверху sidekiq, при желании (вкупе с Redis обеспечит более стабильную работу).
Ну, вот как-то так. Леонид Кофман скептически пожмет плечами, вероятно, но... но вот как умеем. Хотя Твидиум был круче, конечно.
Комментарии в блоге