Sign in

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

Сериализация объекта Twitter::User для очереди ActiveJob

Продолжение творческих изысканий в контексте использования Twitter API для работы с twitter-аккаунтами.

 

 

Сериализация объекта Twitter::User для очереди Active Job
Сериализация объекта Twitter::User для очереди Active Job

 

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

 

Увидеть на гитхабе.

 

Помимо рефакторинга кода (который на момент публикации этого материала еще не вполне окончен), Twitter Toolkit on Rails теперь использует фреймворк Active Job для формирования и постановки в очередь асинхронных задач. Бэкенд очередей не определен; при желании и необходимости крайне несложно подключаются sidekiq и sidekiq-cron, например. Но основной целью автора была многопоточность выполняемых задач, также упрощение работы с long running processes; даже возможность остановки сервера попросту по Ctrl + C вместо

 

kill -INT $(cat tmp/pids/server.pid)

 

делает работу с титтер-инструментарием более комфортной, и даже для программиста.

 

Ретвиты по заданным ключам или тэгам. Инструментарий для работы с Twitter API.
Ретвиты по заданным ключам или тэгам. Инструментарий для работы с Twitter API.

 

Напомню, написанный на ruby Twitter Toolkit on Rails умеет на данный момент ответный фолловинг и анфоловинг в полностью автоматических режимах, парсер твитов и автопостинг, ретвиты по заданным ключам или тэгам; также способен формировать список для ответного фолловинга вручную и перечень фолловеров (в HTML и csv) произвольного твиттер-аккаунта.

 

Для тех, кто захочет потестить.

Вам понадобятся ключи доступа к Twitter API, вот уже несколько лет запросы их проходят ручную модерацию (спецом за TOS Твиттера не слежу, но, судя по характеру работы API - там вряд ли что-то поменялось). Совет: если токены доступа у вас "при наличии отсутствия" и вы намерены их запросить - так или иначе пригодятся, весчь в хозяйстве нужная и полезная - ни в коем случае не указывайте причиной их запроса эту (или аналогичные) прогу. Исходя из опыта - последует немедленный и категорический отказ, который окажется еще более категоричен, если у вас российский ip. Увы, спасибо здесь следует сказать кремлеботам и иже с ними, обижаться не на кого, кроме как на самих себя; думаю, все помнят эту тупую историю про русских в Твиттере. Заслужили. For example, французский мой коллега, помнится, как-то однажды понтанулся мне, зараза, что он, дескать, получил ключи Twitter без труда и плясок с бубнами... завидую ему белой и черной, всех оттенков, завистью, и дело тут, блять, вовсе не в ключах.

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

 

Фолловинг через Twitter API искусственно затруднен сегодня для пользователей программистами Твиттера; как видно из скриншота, перманентно приходится делать паузы, реализованные посредством rescue. Как-то так:

 

class FollowJob < ApplicationJob
  queue_as :default

  def perform(*args)
    client = twi_client(args[0])
    list = follow(args[0])
    begin
      list.take(100).each do |user|
        client.follow(user.id)
        list.delete(user)
        puts "follow: #{user.screen_name} #{Time.now}"
        sleep rand(30..60)
      end
    rescue Twitter::Error::TooManyRequests,
           Twitter::Error::Forbidden,
           OpenSSL::SSL::SSLError,
           Twitter::Error::ServiceUnavailable,
           HTTP::Error
      []
      puts "rescue Twitter::Error #{Time.now}"
      sleep 905
      retry
    end
  end
end

 

Ответный фолловинг, rescue и Active Job. Инструментарий для работы с Twitter API.
Ответный фолловинг, rescue и Active Job. Инструментарий для работы с Twitter API.

 

Ну, что же делать, Твиттеру виднее. Кстати, передавая массив аккаунтов для фолловинга (или анфолловинга) - не забываем сериализовать аргумент (или, вернее, его часть) при вызове метода подкласса ApplicationJob, т. к. Twitter::User он однозначно не поймет:

 

ActiveJob::SerializationError (Unsupported argument type: Twitter::User)

 

Впрочем, все несложно. Взгляните, вот и вся в данном случае сериализация (а десериализация не потребуется, см. предыдущий фрагмент кода):

 cool

follow = (followers - friends).as_json(only: %i[id screen_name])
FollowJob.perform_later(tweet, follow)

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

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

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

  • Гена Какой сложный и отвратительный те.... всем привет, зовут меня Гена-мудило, по профессии я срущий на чужих сайтах копеечный бот, по-совместительству…

    Суббота, 03 апреля 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму
  • Aleksej Доброго дня! Повторюсь, контент статьи представляет собой лишь концепт, хотя показанный код и был в свое время оттестирован и является…

    Пятница, 26 марта 2021

    Опубликовано в: Виджет amoCRM: экспорт данных в Google Docs
  • ОлегАверс Здравствуйте. Скажите, можно ли с Вашей помощью настроить и АВТОМАТИЧЕСКИ (например, ежедневно) выгружать из АМО и Битрикс24 в Эксель следующие…

    Среда, 24 марта 2021

    Опубликовано в: Виджет amoCRM: экспорт данных в Google Docs
  • Aleksej Интересно отметить: за всю свою жизнь в российском IT у меня не было ни одного проекта - а в пору,…

    Вторник, 19 января 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму
  • Рамат Они до сих пор такую шляпу предлагают с оформлением в известную американскую компанию через ИП или самозанятого, на прошлой неделе…

    Пятница, 15 января 2021

    Опубликовано в: Про IT Selection, gray salary и Барака Обаму