http://www.spoofi.ru/2011/10/30/twitter-rss-bot-python/
Twitter RSS Бот На Python
Как это обычно бывает, дело было вечером, делать было нечего и я решил немножко изучить язык программирования Python, которым хотел заняться уже давно. Так как я часто пишу в твиттер, то именно на него упал мой взор и я решил написать бота для twitter, который бы умел читать RSS ленты и постить твиты с новыми записями.
Что получилось из моей задумки смотрим под катом.
И так, для начала я поставил для себя следующие задачи:
- Бот должен уметь читать RSS ленты и уметь их парсить.
- Бот должен быть написан только на питоне.
- Бот должен автоматически фолловить всех, кто фолловит его и отписываться от тех, кто его перестал читать.
Немного посмотрев примеры на других блогах, я попробовал написать отдельно «читалку» RSS, саму авторизацию и постинг сообщений, фолловинг/анфолловинг твиттерян.
Для всего бота понадобились следующие библиотеки:
- feedparser — для обработки RSS лент
- tweepy — для работы с APIлками твиттера
- oauth — зависимость tweepy — работа с oauth авторизацией
- cPickle, time — стандартные библиотеки для работы с файлами и временем
- googl — для сокращения ссылок через сервис goo.gl
Как устанавливать библиотеки я говорить не буду, есть очень много способов, описанных в интернете. Я использовал easy_install (гугл вам о нём расскажет (: ).
Когда набор для создания бота готов, можно приступить к работе.
Для начала нужно создать приложение и твиттер аккаунт для бота. Делается всё просто — просто заходим на страницу регистрации предложения (я использовал свою учетную запись твиттера для создания приложения, но можно создать аккаунт бота и делать все действия от его имени — так будет даже удобнее) и заполняем все данные. Там же нам нужно будет получить Consumer key и Consumer Secret, а такжеустановить права на Чтение и Запись во вкладке Settings:
В случае если Вы будете использовать для бота ту же учетную запись, от которой и создали приложение — нажимаем на кнопку «Create my access token» и сохраняем полученные Access token и Access token secret.
Если приложение создано от другого пользователя, который ботом не будет, то нужно проделать следующие операции:
1. Залогинится под аккаунтом бота
2. Написать следующий скрипт, заполнив переменные CONSUMER_KEY и CONSUMER_SECRET:
import tweepy, webbrowser
CONSUMER_KEY = 'paste your Consumer Key here'
CONSUMER_SECRET = 'paste your Consumer Secret here'
auth = tweepy.OAuthHandler (CONSUMER_KEY, CONSUMER_SECRET)
auth_url = auth.get_authorization_url ()
webbrowser.open (auth_url)
verifier = raw_input('PIN: ').strip ()
auth.get_access_token (verifier)
print «ACCESS_KEY = '%s'» % auth.access_token.key
print «ACCESS_SECRET = '%s'» % auth.access_token.secret
3. Запустить написанный скрипт. Откроется браузер и Вам будет выдан ПИН код.
4. Ввести ПИН код в терминале
5. Сохранить Access token и Access token secret, выданные скриптом.
Всё отлично, теперь у нас есть все нужные ключи, питон, требующиеся библиотеки. Пишем код самого бота (в самом коде вставлены комментарии, с помощью которых можно все с легкостью разобрать):
import oauth, tweepy, feedparser, cPickle, time, googldef Sleep(sec): # функция для приостановки скрипта на заданное время
print "Ждём %d секунд" % sec
time.sleep (sec)
return True
def Short(longurl): # сокращает ссылки
url = short.shorten (longurl)
return url["id"]def Tweet(twit): # обновляет статус в твиттере
if len(twit)<=140 and len(twit)>0:
res = api.update_status (twit) #обновляем статус
return True
else:
return Falsedef bot(feedurl):
feed = feedparser.parse (feedurl) # парсим фид
file = open("db.txt", "r") # подключаем бд, получаем отправленные ссылки
posted = cPickle.load (file)
file.close ()
ok = 1
newposted = posted
for item in feed.entries:
for i in posted: # перебираем отправленные и новые ссылки
if i == item.link:
ok = 0
break
ok = 1
if ok:
text = item.title + " " + Short (item.link)
print "Твитим: ", text
Tweet (text) # если такая ссылка не отправлялась - отправляем
Sleep (300)
newposted.append (item.link)
file = open("db.txt","w") # сохраняем в файл отправленные ссылки
cPickle.dump (newposted, file)
file.close ()
return Truedef refollow(): # подписывается на всех, кто читает бота
followers = api.followers ()
following = api.friends ()
fnames = []
for user in following:
fnames.append (user.screen_name)
for follower in followers:
if (not follower.screen_name in fnames):
print "Подписываюсь на @",follower.screen_name
follower.follow ()
return Truedef reunfollow(): # отподписывается от всех, кто не читает бота, но есть в нашем френд листе
followers = api.followers ()
following = api.friends ()
fnames = []
for user in followers:
fnames.append (user.screen_name)
for follower in following:
if (not follower.screen_name in fnames):
print "Отписываюсь от @",follower.screen_name
follower.unfollow ()
return Truedef init():
global api
global short
consumer_key = "" # ваш consumer key
consumer_secret = "" # ваш consumer secret
access_key="" # access key
access_secret="" # и access secret
auth = tweepy.OAuthHandler (consumer_key, consumer_secret)
auth.set_access_token (access_key, access_secret)
api=tweepy.API (auth)
short = googl.Googl ("") # ключ для API goo.glinit () # старт
while 1: #вечный цикл
bot ("http://feeds2.feedburner.com/spoofi") # запускаем обработку фида
Sleep (20*60) # спим 20*60 (1800) секунд
refollow () # фолловим новых читателей
Sleep (20*60) # опять спим
bot ("http://prodigger.ru/rss/index/") # можно добавить еще один фид
Sleep (20*60)
reunfollow () # удаляем не читающих нас
Sleep (20*60)
И да, для получения ключа APIлок goo.gl: проходим в консоль API, жмем «Add project», почти в самом низу выбираем «URL Shortener API». В подпункте «API access» будет ваш ключ для APIлок:
Собственно на этом всё, вставляем в код все ключи, сохраняем в файл, например bot.py и, предварительно дав права на запуск, запускаем его.
Наблюдаем за ботом в твиттере (:
Наблюдаем за ботом в твиттере (:
Возможно я что-то сделал не так коротко как можно было, может быть есть и другие косяки — честно говорю, что сел за питон первый раз и за несколько часов родил этот код, сильно помидорами не швыряйтесь (: Буду рад Вашим советам, относительно кода.
Ну, а если Вы решили транслировать RSS ленту в твиттер, то у Вас явно есть сайт, на котором можно заработать. Биржи купли-продажи ссылок могут помочь с этим!
No comments:
Post a Comment