tweepyで色々
- fulline
- 2016年6月9日
- 読了時間: 4分
twitterをTgLのサービスに使えないかと思い、イジってみることにしました。
pythonには、tweepyというtwitterAPIを使いやすくしてくれる便利なライブラリがあるのでこれを使います。
実際に使い出すまでが若干面倒で、僕はこちらの方の説明を真似て設定したので、ぜひ参考にしてみてください。
準備ができたら実際に使っていきましょう。
このメモでは、各データを取得する方法について記述します。
各データの中身については各リンク先のメモページにまとめます。
=ユーザ情報関係=
《api.me()》《api.get_user('ユーザのID'or'ユーザ名')》
・api.me():自分のプロフィールを取得
・api.get_user('ユーザのID'or'ユーザ名'):指定ユーザのプロフィールを取得
例)api.get_user()で@KobaWeatherのプロフィールを取得する場合
→profile = api.get_user('KobaWeather')
→profile = api.get_user(220303307)
取得したプロフィールデータの中身について→【tweepy】ユーザ情報の内容
《api.followers()》《api.friends()》
・api.followers():自身のフォロワーのプロフィールを取得
・api.friends():自身のフォローしているユーザのプロフィールを取得
・パラメータ count:取得するユーザ数の指定 デフォルトは20件
取得したプロフィールデータの中身について→【tweepy】ユーザ情報の内容
=ツイート情報関係=
《api.home_timeline()》
・twitterのホーム画面に表示されているのと同様のツイートを取得できる。
・デフォルトは最新20件
・パラメータ
ーcount : 取得するツイート数の指定 最大200ツイート
ーsince_id : この数値より新しいツイートを取得
ーmax_id : この数値までのツイートを取得
ーpage : 200ツイートごとに1ページとして取得するページの指定
例)”ID「213450687」までの50個を取得”する場合
tweets = api.home_timeline(max_id=213450687, count=50)
なお、これでツイート内容が表示されるわけではなく、そのツイートに関する様々な情報が入ったデータを取得している。
データの中身について→【tweepy】ツイート情報の内容
《api.mentions_timeline()》
・自身に対してのメンション内容を取得できる。多分パラメータはhome_timeline()と同じ
データの中身について→【tweepy】ツイート情報の内容
《api.search(u'検索ワード')》
・検索ワードに該当するツイートを取得できる
・twitter全体から検索をするので、フォローしている人以外のツイートも取得する
・検索ワード以外のパラメータはhome_timeline()と同じ
データの中身について→【tweepy】ツイート情報の内容
《api.user_timeline('ユーザのID'or'ユーザ名')》
・指定ユーザのつぶやきを取得できる
データの中身について→【tweepy】ツイート情報の内容
《api.get_status('ツイートID')》
・指定したツイートの情報を取得できる
データの中身について→【tweepy】ツイート情報の内容
=動作関係=
《api.update_status()》《api.update_with_media()》
・ツイートすることができる
・パラメータ
ーstatus : ツイート内容
ーin_reply_to_status_id : 返信相手のユーザID
ーfilename : 画像ファイルのパス※api.update_with_media()限定
ーその他 : 緯度経度なども設定できるみたい
・返り値はそのツイートのデータになる
データの中身について→【tweepy】ツイート情報の内容
《api.retweet("ツイートID")》
・指定したツイートIDをリツイートする
《api.send_direct_message()》
・指定したユーザにダイレクトメッセージを送る
・パラメータ
ーuser : ユーザ名(「@KobaWeather」なら「KobaWeather」)を指定
ーtext : メッセージの内容
他にもまだありますが、また利用した時に追加していきます。
TgLでは、対戦相手を募集している内容のツイートを自動リツイートしたり、近くの地域で募集しているチームをダイレクトメッセージで自動送信するプログラムを作成しましたが、50行以内で書けました。とても簡単。
1つ注意が必要なのは、エラーが発生した場合の処理についてです。
例えば、既にリツイートしているツイートをリツイートしようとすると、エラー表示には「TweepError」と出ます。
このような場合を想定してエラー処理をするときに「except TweepError:」としてもおそらく怒られると思います。
「TweepError」はtweepy内のエラーコードなので、実際には「except tweepy.error.TweepError:」としてあげればうまくいくと思います。
あと、API制限が結構厳しい(一気に800ツイート取ろうとして怒られた)のでうまく「sleep()」とか入れて調整してください。
僕の場合、現状では5分おきに最新200ツイートを取得する程度であれば問題なく動いてくれています。ただ、秒単位でタイムラインが流れていくような方はツイートの取り逃しが出てしまうかもしれませんので、そういう方はtwitterAPIの「Streaming API」の方を利用される方が良いかも。
なお、自動ツイートプログラムは「google app engine」(略してgae)を使って動かしてます。また、こちらについてもメモを残しておきます。
Comments