16 ноября 2010 г.

Пишем бота для twitter на python

Нашел все-таки время разобраться с OAuth авторизацией. Этот позволяет социальным сервисам интегрироваться между собой обеспечивая безопасный метод обмена информацией. Для интересующихся еще ссылка.

Приступим к написанию бота. Первое, что необходимо сделать - зарегистрировать приложение на сервисе twitter. В результате получаем Consumer key и Consumer secret.



Теперь разберем сам скрипт. Он написан на основе библиотеки oauth-python-twitter2, задача: фолловить и анфолловить случайных пользователей. Скрипт можно скачать здесь.

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from oauth import oauth
  4. from oauthtwitter import OAuthApi
  5. import sys
  6. import os
  7. twitter = None
  8. consumerKey = ''
  9. consumerSecret = ''
  10. def auth():
  11.   authToken = None
  12.   authSecret = None
  13.   if os.path.exists('/tmp/twitter.tmp'):
  14.     f = open('/tmp/twitter.tmp', 'r')
  15.     authToken = f.readline().strip()
  16.     authSecret = f.readline().strip()
  17.     print "oauth_token: " + authToken
  18.     print "oauth_token_secret: " + authSecret
  19.     f.close()
  20.   needAuth = True
  21.   if authToken!=None and authSecret!=None:
  22.     twitter = OAuthApi(consumerKey, consumerSecret, authToken, authSecret)
  23.     if twitter.autorized():
  24.       needAuth = False
  25.   if needAuth:
  26.     twitter = OAuthApi(consumerKey, consumerSecret)
  27.     temp_credentials = twitter.getRequestToken()
  28.     print temp_credentials
  29.     print twitter.getAuthorizationURL(temp_credentials)
  30.     oauth_verifier = raw_input('What is the PIN? ')
  31.     access_token = twitter.getAccessToken(temp_credentials, oauth_verifier)
  32.     print access_token
  33.     print("oauth_token: " + access_token['oauth_token'])
  34.     print("oauth_token_secret: " + access_token['oauth_token_secret'])
  35.     f = open('/tmp/twitter.tmp', 'w')
  36.     f.write('%s\n%s'%(access_token['oauth_token'], access_token['oauth_token_secret']))
  37.     f.close()
  38.     twitter = OAuthApi(consumerKey, consumerSecret, access_token['oauth_token'], access_token['oauth_token_secret'])
  39.   return twitter
  40. def unfollow():
  41.   friends = twitter.GetFriendsIDs()
  42.   for i in range(min(len(friends),30)):
  43.     twitter.UnfollowUser(friends[i])
  44. def follow(query):
  45.   users = twitter.searchByQuery(query)
  46.   count = min(30, len(users))
  47.   for user in users:
  48.     print user['id']
  49.     twitter.FollowUser(user['id'])
  50. if __name__=='__main__':
  51.   if len(sys.argv)<2:
  52.     print "Usage: %s <mode>"%sys.argv[0]
  53.     print "Mode:"
  54.     print "  follow   - find and follow by twitter users"
  55.     print "  unfollow - unfollow twitter users"
  56.     print ""
  57.     sys.exit(0)
  58.   if sys.argv[1]=='unfollow':
  59.     twitter = auth()
  60.     unfollow()
  61.   elif sys.argv[1]=='follow':
  62.     twitter = auth()
  63.     follow('twitter')


самое интересное в скрипте, метод auth. В файле /tmp/twitter.tmp я храню токен авторизации пользователя. Если этот токен не существует или не принимается пользователем, то вывожу на экран урл авторизации и жду пока пользователь авторизуеться в твиттере и введет PIN в приложение. По этому пину и получаем токен авторизации который и сохраняем в файл /tmp/twitter.tmp до следующего запуска скрипта.

Методы follow вызывает метод search твиттера и фолловит найденых пользователей. Метод unfollow берет список фолловеров и отписываеться от некоторых из них.

1 комментарий: