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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

Недовольство влечет за собой, как правило, желание подвигать за... пошевелить мозгами. Данный материал представляет собой, так сказать, отчет о результатах соответствующих изысканий, призванных вернуть себе - хотя б в некоторой степени - прежние удобства. Но автор не жадина и всегда готов поделиться тем немногим, чем располагает, с благодарными читателями... Представленный сегодня на ваш суд скрипт, пожалуй, сыроват для имиджа коммерческого интернет-сервиса (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)

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

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

Получаем перечень фолловеров
Получаем перечень фолловеров

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

Ответный фолловинг
Ответный фолловинг

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

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

Парсинг твитов
Парсинг твитов

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

Авторетвиты по ключу "checkmate"
Авторетвиты по ключу "checkmate"

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

Источник: https://habr.com/ru/post/568814/

Интересные статьи

Интересные статьи

Мне было необходимо делать 2 раза в сутки бэкап сайта на «1С-Битрикс: Управление сайтом» (файлов и базы mysql) и хранить историю изменений за 90 дней. Сайт расположен на VDS под уп...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны
Привет! 24-25 июня в Новосибирске прошла конференция Highload++ Siberia 2019. Наши ребята тоже там были докладом «Контейнерные базы Oracle (CDB/PDB) и их практическое использование для разрабо...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...