http://habrahabr.ru/post/127237/
Простой Twitter-бот на Python
В данной статье я бы хотел поделиться опытом написания небольшого твиттер-бота на Python.
Вступление
На написание бота меня натолкнул известный многим «пичалька-бот» в Twitter, который автоматически шлет реплаи всем, кто упомянит слово «пичалька» в своем твите. Поскольку в тот момент я занимался активным изучением Python, было решено писать на нем.
Подготовка
В качестве библиотеки для работы с API твиттера я взял tweepy. Это достаточно простая и удобная библиотека; к тому же в ее репозитории в Google Code есть несколько примеров кода и хорошаядокументация. Еще она есть в репозиториях Ubuntu и Debian, поэтому ее можно легко установить командой sudo apt-get install python-tweepy
.
Разработка
1. Для работы бота необходимо зарегистрировать новое приложение в Twitter. Перейдите по ссылке и заполняем все поля.
После этого вы получите 2 ключа для OAuth авторизации.
Также необходимо изменить права приложения. Вкладка «Settings», Access -> Read and Write
2. Теперь необходимо получить еще 2 ключа, индивидуальные для каждого пользователя. Для этого можно нажать кнопку «Create access token» на странице приложения, либо воспользоваться небольшим примером кода из документации tweepy.
Вариант с примером кода:
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
Сохраните его в файл, вставьте ключи, полученные при регистрации приложения, и запустите. Перейдите по предложенному адресу, и Twitter даст вам пин-код, который нужно будет ввести в консоль. При успешной авторизации вы получите те самые два пользовательских ключа.
3. Теперь можно перейти к коду самого бота:
#coding: utf-8
import oauth, tweepy, sys, locale, threading
from time import localtime, strftime, sleep
replyed=['']
search_reply_words={'печалька':' каждый раз, когда вы говорите "печалька", умирают хомячки.','пичалька':' каждый раз, когда вы говорите "пичалька", умирают хомячки.'}
update_time=60 #время обновления
def Tweet(twit,id_reply):
if len(twit)<=140 and len(twit)>0:
api.update_status(twit,id_reply) #обновляем статус (постим твит)
return True
else:
return False
def init(): #инициализируемся
global api
#consumer_key = ""
#consumer_secret = ""
#access_key=""
#access_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api=tweepy.API(auth)
class TwiBot(threading.Thread):
def __init__ (self, keyword,answer):
self.keyword = keyword
self.answer=answer
threading.Thread.__init__(self)
def run (self):
global replyed,api
request=api.search(self.keyword) #ищем твиты с указанным словом
for i in request:
if i.from_user!='thevar1able' and i.id not in replyed: # если твит не наш и мы на него еще не отвечали...
try:
Tweet('@'+i.from_user+self.answer,i.id) #...отвечаем
print strftime('[%d/%m %H:%M:%S]',localtime())+' Reply to @'+i.from_user+'('+str(i.from_user_id)+')'
except:
print strftime('DUP [%d/%m %H:%M:%S]',localtime())+' Reply to @'+i.from_user+'('+str(i.from_user_id)+')'
replyed.append(i.id)
return True
init() # инициализируемся
while not False: # вечно
for word in search_reply_words:
TwiBot(word, search_reply_words[word]).start() #запускаем поток с нужным словом для поиска
print strftime('[%d/%m %H:%M:%S]',localtime())+' Updating for word "'+str(word)+'"...'
sleep(1)
sleep(update_time)
Для корректной работы нужно вставить полученные ключи в переменные в коде: ключи со страницы приложения — consumer_key и consumer_secret, пользовательские ключи — access_key и access_secret. Также нужно поправить ключевые слова для поиска твитов и ответы на них в переменной search_reply_words.
Вот и все на сегодня.
Спасибо за внимание! Надеюсь, было интересно и полезно.
26.07.2012
07.07.2012
30.06.2012
Простой Twitter-бот на Python
В данной статье я бы хотел поделиться опытом написания небольшого твиттер-бота на Python.
После этого вы получите 2 ключа для OAuth авторизации.
Также необходимо изменить права приложения. Вкладка «Settings», Access -> Read and Write
2. Теперь необходимо получить еще 2 ключа, индивидуальные для каждого пользователя. Для этого можно нажать кнопку «Create access token» на странице приложения, либо воспользоваться небольшим примером кода из документации tweepy.
Вариант с примером кода:
Сохраните его в файл, вставьте ключи, полученные при регистрации приложения, и запустите. Перейдите по предложенному адресу, и Twitter даст вам пин-код, который нужно будет ввести в консоль. При успешной авторизации вы получите те самые два пользовательских ключа.
3. Теперь можно перейти к коду самого бота:
Для корректной работы нужно вставить полученные ключи в переменные в коде: ключи со страницы приложения — consumer_key и consumer_secret, пользовательские ключи — access_key и access_secret. Также нужно поправить ключевые слова для поиска твитов и ответы на них в переменной search_reply_words.
Вот и все на сегодня.
Спасибо за внимание! Надеюсь, было интересно и полезно.
Вступление
На написание бота меня натолкнул известный многим «пичалька-бот» в Twitter, который автоматически шлет реплаи всем, кто упомянит слово «пичалька» в своем твите. Поскольку в тот момент я занимался активным изучением Python, было решено писать на нем.Подготовка
В качестве библиотеки для работы с API твиттера я взял tweepy. Это достаточно простая и удобная библиотека; к тому же в ее репозитории в Google Code есть несколько примеров кода и хорошаядокументация. Еще она есть в репозиториях Ubuntu и Debian, поэтому ее можно легко установить командойsudo apt-get install python-tweepy
.Разработка
1. Для работы бота необходимо зарегистрировать новое приложение в Twitter. Перейдите по ссылке и заполняем все поля.После этого вы получите 2 ключа для OAuth авторизации.
Также необходимо изменить права приложения. Вкладка «Settings», Access -> Read and Write
2. Теперь необходимо получить еще 2 ключа, индивидуальные для каждого пользователя. Для этого можно нажать кнопку «Create access token» на странице приложения, либо воспользоваться небольшим примером кода из документации tweepy.
Вариант с примером кода:
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
Сохраните его в файл, вставьте ключи, полученные при регистрации приложения, и запустите. Перейдите по предложенному адресу, и Twitter даст вам пин-код, который нужно будет ввести в консоль. При успешной авторизации вы получите те самые два пользовательских ключа.
3. Теперь можно перейти к коду самого бота:
#coding: utf-8
import oauth, tweepy, sys, locale, threading
from time import localtime, strftime, sleep
replyed=['']
search_reply_words={'печалька':' каждый раз, когда вы говорите "печалька", умирают хомячки.','пичалька':' каждый раз, когда вы говорите "пичалька", умирают хомячки.'}
update_time=60 #время обновления
def Tweet(twit,id_reply):
if len(twit)<=140 and len(twit)>0:
api.update_status(twit,id_reply) #обновляем статус (постим твит)
return True
else:
return False
def init(): #инициализируемся
global api
#consumer_key = ""
#consumer_secret = ""
#access_key=""
#access_secret=""
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api=tweepy.API(auth)
class TwiBot(threading.Thread):
def __init__ (self, keyword,answer):
self.keyword = keyword
self.answer=answer
threading.Thread.__init__(self)
def run (self):
global replyed,api
request=api.search(self.keyword) #ищем твиты с указанным словом
for i in request:
if i.from_user!='thevar1able' and i.id not in replyed: # если твит не наш и мы на него еще не отвечали...
try:
Tweet('@'+i.from_user+self.answer,i.id) #...отвечаем
print strftime('[%d/%m %H:%M:%S]',localtime())+' Reply to @'+i.from_user+'('+str(i.from_user_id)+')'
except:
print strftime('DUP [%d/%m %H:%M:%S]',localtime())+' Reply to @'+i.from_user+'('+str(i.from_user_id)+')'
replyed.append(i.id)
return True
init() # инициализируемся
while not False: # вечно
for word in search_reply_words:
TwiBot(word, search_reply_words[word]).start() #запускаем поток с нужным словом для поиска
print strftime('[%d/%m %H:%M:%S]',localtime())+' Updating for word "'+str(word)+'"...'
sleep(1)
sleep(update_time)
Для корректной работы нужно вставить полученные ключи в переменные в коде: ключи со страницы приложения — consumer_key и consumer_secret, пользовательские ключи — access_key и access_secret. Также нужно поправить ключевые слова для поиска твитов и ответы на них в переменной search_reply_words.
Вот и все на сегодня.
Спасибо за внимание! Надеюсь, было интересно и полезно.
26.07.2012
07.07.2012
30.06.2012
комментарии (30)