Мы создадим простого управляемого бота, который будет получать команды из ленты твиттера и выполнять их на клиентской машине. Для работы с Twitter API, установите пакет python-twitter
.
pip install python-twitter
В качестве рабочего окружения я буду использовать python2.7 под virtualenv, и один из дистрибутивов GNU/Linux. Программа-клиент будет работать в бесконечном цикле, периодически получая команды из твиттера.
Сохраните следующий код в файле twibot.py.
#!/usr/bin/env python
#!-*- coding: utf-8 -*-
import os
import time
import string
import twitter
# Задержка между запросами в секундах
REQUEST_DELAY = 2
# Аккаунт Twitter для управления
TWITTER_USERNAME = 'John1698736'
# Формат даты, отдаваемой API твиттера
DATE_FORMAT = '%a %b %d %H:%M:%S +0000 %Y'
# Имя файла для записи истории "выполненных" твитов
LOG_FILE = 'history.txt'
api = twitter.Api()
while True:
statuses = api.GetUserTimeline(TWITTER_USERNAME)
try:
command = statuses[0]
except IndexError:
command = None
if isinstance(command, twitter.Status):
with open(LOG_FILE, 'a+') as f:
history = string.split(f.read(), "\n")
if not str(command.id) in history:
os.system(command.text)
f.write(str(command.id) + "\n")
f.closed
time.sleep(REQUEST_DELAY)
Имя вашего Twitter-аккаунта необходимо задать в переменной TWITTER_USERNAME
.
Запустим и проверим работу нашего скрипта.
./twibot.py
Теперь опубликуем тестовый твит.
Снова откроем окно с запущенным ботом, и подождем пару секунд.
Скрипт «исполняет» самый последний твит в ленте пользователя. Перед выполнением команды, в файле history.txt
проверяется наличие идентификатора текущего сообщения. Если идентификатор был найден, значит твит уже «выполнялся» ранее.
Иначе, происходит «выполнение» текущего твита, после чего в history.txt
записывается номер текущего сообщения.
Комментарии к статье: 8
Возможность комментировать эту статью отключена автором. Возможно, во всем виновата её провокационная тематика или большое обилие флейма от предыдущих комментаторов.
Если у вас есть вопросы по содержанию статьи, рекомендуем вам обратиться за помощью на наш форум.