読者です 読者をやめる 読者になる 読者になる

Screaming Loud

研究・プログラミングなど気づいたことをメモをしています

twitterとPython (tweepy)

python プログラミング

pythonからtwitterに投稿するためのモジュールは2つある.
python-twitterとtweepyだ.
python-twitterが主流だが,使い始めた当時python-twitterのOAuth認証のドキュメントがなくてtweepyを利用していた.
そこでtweepyの紹介をする.

TLから取得

まずは簡単なAPIを叩いて見る.

import tweepy
tl = tweepy.api.public_timeline()
print tl[0].text()

tlにはオブジェクトになっているのでtextで呼び出さなければならない.

userStatus

import tweepy
id = "hoge" # ここはユーザネームかID
usr = tweepy.api.get_user(id)
print usr.description #これはプロフィールを取得できる.

他にもユーザメッソドはいろいろある.
調べ方は

import tweepy
id = "hoge" # ここはユーザネームかID
usr = tweepy.api.get_user(id)
print dir(usr)

こうやると全てのメソッドが出てくる.非常に便利な関数.
dir()はtweepyに限らずpythonの組み込み関数なので積極的に使っていくと良いと思います.

tweepy利用例

新しくフォローしてくれた人とリムーブした人をチェックする機能です.
また自動でフォロー,リムーブも行なっています.

# coding:utf-8
import tweepy
import sys
import codecs
import time
import json
import os

########################################
CONSUMER_KEY = '******'
CONSUMER_SECRET = '*******'
ACCESS_KEY = "*******"
ACCESS_SECRET = "*******"
########################################

reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
FOLLOW = 'follow/follow.json'

user = "hogeohoge"
#########################################
#                follow                 #
#########################################
"""フォロー,フォロワーを取得"""

def write_friend_ship(filename,friends,followers):
    """json形式で書き込みます"""
    friend_ship = {"friends":tuple(friends),"followers":tuple(followers)}
    f = open(filename,"w")
    json.dump(friend_ship,f)
    f.close()

def get_friend_ship(filename):
    """json形式で書き込んだファイルからfriendshipを
    取得します"""
    if os.path.exists(filename):
        f = open(filename)
        friend_ship = json.load(f)
        f.close()
        friends = friend_ship["friends"]
        followers = friend_ship["followers"]
        return set(friends),set(followers)
    else:
        return None

def get_differ(new,old):
    """new にあってold にないものを返す関数"""
    if not isinstance(new,set):
        new = set(new)
    if not isinstance(old,set):
        old = set(old)
    return new.difference(old)

def thanks_follow(new,api):
    """新たにフォローしてくれた人をフォロー"""
    for user in new:
        api.create_friendship(user)
        api.update_status('@'+t+u' フォローありがとう!')

def remove(gone,api):
    """リムーブする"""
    for user in gone:
        api.destroy_friendship(user)


if __name__ == "__main__":
    friends = tweepy.api.friends_ids(user)
    followers = tweepy.api.followers_ids(user)
    now_friends = set(friends[0])
    now_followers = set(followers[0])
    old_friends,old_followers = get_friend_ship(FOLLOW)

    # removeされたフォロワー
    gone_followers = get_differ(old_followers,now_followers)
    # 新たにフォローしてくれた人
    new_followers = get_differ(now_followers,old_followers)

    auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
    auth.set_access_token(ACCESS_KEY,ACCESS_SECRET)
    api = tweepy.API(auth)
    thanks_follow(new_followers,api)
    remove(gone_followers,api)
    write_friend_ship(FOLLOW,now_followers,now_followers)

ファイル形式ではなくjson形式で保存しているのは
辞書型でそのまま保存できるからです.
他にもpickleなどありますが,jsonのほうが早いのでこちらを利用しています.

英語ですが,ドキュメントもあるのであわせてこちらも!
API Reference — tweepy v1.4 documentation

追記:jsonよりも更に早いmsgpackというライブラリもあるのでそちらをおすすめします!
使い方はjsonと全く同じです.
MessagePack: It's like JSON. but fast and small.