Avenger Bot: Twitter-бот, чтобы отомстить за злоупотребления с клиентами

Создание многопоточного бота, который отвечает на выбранные твиты

TL; DR: полный Java-код многопоточного бота Twitter, который распространяет информацию о злоупотреблениях со стороны клиентов и о том, как (не) получить бан в Twitter.

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

Мотивация

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

Я очень разозлился, Jazztel (оператор связи) вообще не был заинтересован в выяснении правды, они обвиняли мою маму в неоплате счетов и угрожали ей обратиться в суд, это телефонный разговор (на испанском языке) доказывает это.

Меня вдохновил этот пост, который я прочитал несколько месяцев назад.

Но мой бот-мститель более сложен, он использует API потоковой передачи Twitter для прослушивания твитов, адресованных Jazztel, а затем отвечает им гневной жалобой. (Я понимаю, что это, вероятно, не будет иметь никакого значения, но, по крайней мере, это был способ выпустить мой гнев во время изучения чего-то, поскольку это было технически сложно, и я также нашел это интересным).

Реализация

Итак, первое, что мне нужно, это учетная запись Twitter, под которой будет работать мой бот, а затем также «приложение Twitter», чтобы получить четыре ключа безопасности, необходимые для аутентификации и авторизации через Twitter API.

К счастью, у меня было все это, когда я работал над своим предыдущим любимым проектом, потому что несколько месяцев назад Twitter вынуждает новых пользователей своего API регистрировать учетную запись разработчика и ждать регистрации в ( надеюсь) будет одобрен.

Затем я начал работать над своим ботом, и через несколько вечеров он был готов, и весь исходный код (Java 8) доступен на GitHub.

Это основные функции:

- Четыре ключа безопасности:
Consumer Key (API Key)
Consumer Secret (API Secret)

Access Token
Секретный токен доступа
зашифрованы в файле конфигурации JSON и расшифровываются во время выполнения с использованием пароля, хранящегося в переменной среды.

- Он использует очень простую инъекцию зависимостей через Spring Framework, я предпочел конфигурацию XML аннотациям, потому что, как сказал Сэм Аткинсон в своем известном посте более четырех с половиной лет назад: Я не делаю ' Мне нравится магия.
Мне тоже не нравится код в XML, поэтому я сказал очень простая инъекция зависимостей , я твердо верю, что Spring (или любой другой фреймворк DI в этом отношении) следует использовать просто для соединения bean-компонентов, не более того, нет преобразование интеллектуального / настраиваемого типа, без SpEL и т. д.

- Он реализует шаблон производитель / потребитель с использованием очереди блокировки.

- Приложение должным образом завершает работу (изящно отключается от потока твитов) в Linux после получения сигнала WINCH путем реализации интерфейса SignalHandler (полная мотивация и объяснение этого механизма отключения заслуживает отдельного поста который я могу написать в ближайшее время).

- Бот использует библиотеку Twitter4j, поэтому мне не нужно напрямую иметь дело с REST / HTTP.

- Модульных тестов нет, но включены по крайней мере некоторые классы «tester», которые помогли мне проверить код в процессе его написания.

Исполнение

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

В первый раз, когда я его запустил, все вроде бы работало нормально, каждый раз, когда публиковался новый твит, содержащий ключевые слова, определенные в config.json, бот отвечал после ожидания полуслучайного количество времени.

Но примерно через час я получил следующую неприятную ошибку:

Это означало, что моему приложению запретили публиковать твиты, хотя оно все еще могло их читать. Я мог видеть это также в веб-интерфейсе Twitter.

Но почему? Я был осторожен, чтобы не достичь ограничений Twitter API, мой бот всегда ждал более 2 с половиной минут между двумя последовательными отправками твитов, что намного больше, чем 36 секунд, которые, кажется, предел.

После некоторого исследования я нашел ответ в правилах рассылки спама в Twitter:

Мой бот случайным образом выбирает содержимое твитов из пула из двадцати текстов, поэтому после того, как было опубликовано несколько твитов, содержащих один и тот же текст, мое приложение было заблокировано.

Будущая работа

Все разработчики программного обеспечения ненавидят свободные требования, но они являются повседневной практикой, и для решения этой проблемы были созданы целые методологии, такие как Scrum.

В этом случае мне приходит на ум несколько вопросов без ответа:
Что именно делает два твита «по существу похожими»?
Если два твита содержат одни и те же слова, но в разном порядке, Твиттер считает их дубликатами ?
Что делать, если совпадают только 80% слов?
А если только 60%?
Можно ли повторять один и тот же твит только раз в день?
А может, раз в неделю?

Документация Твиттера намеренно не отвечает на эти вопросы, а информация, доступная из других источников, довольно неоднозначна.
Так что мой единственный вариант - экспериментировать и тестировать.

Значит ли это, что все хлопоты были напрасны? Точно нет!
У меня была идея, задача, и я ее решил.
Что-то меня беспокоило, и я что-то с этим сделал (и мне это тоже понравилось). Таким образом, даже несмотря на то, что результат не идеален (пока) из-за некоторых непредвиденных ограничений, весь опыт того стоил.
Мне нужно поэкспериментировать с чем-то новым для меня, и у меня также есть возможность поделиться всей серией со всеми, кто может быть в ней заинтересован.

В настоящее время я жду принятия моего запроса разработчика Twitter, чтобы я мог создать новое приложение. Как только я снова смогу публиковать твиты с помощью API, я могу даже провести небольшое исследование и добавить немного ИИ, чтобы создавать достаточно отчетливые твиты, которые можно публиковать без того, чтобы Твиттер меня забанил ...

Так что, если я найду обходной путь, я также могу запустить свой Avenger Bot против другой компании, которая не уважает своих клиентов / пассажиров: SmartWings.
Следите за обновлениями!

Первоначально опубликовано на www.devaction.net.

Получайте лучшие предложения по программному обеспечению прямо в свой почтовый ящик