前回までのプログラミング学習コラムに続き3回目の勉強内容です。
こんにちは、ぴかしです。前回は、Twitter APIのPythonからの利用方法(python-twitter)について説明しました。
今回は、python-twitterでどのようなことができるのかについて解説し、前回から作成しているBotに機能を追加してみます!Mac OS Xでの実行を想定しています。
python-twitterのモジュール紹介
python-twitterの主なモジュールを紹介します。以下は、Mac OS Xに標準で入っているPython2.6インタラクティブシェルで実行しています。はじめに、以下の設定を行なっておいて下さい。
>>> import sys >>> reload(sys) >>> sys.setdefaultencoding(‘utf-8’)
インポート・認証は以下のようにすればOKです
>>> import twitter >>> api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET, cache=None)
CONSUMER_KEY、CONSUMER_SECRET、ACCESS_TOKEN、ACCESS_TOKEN_SECRETは、前回取得したものに置きかえて下さい。GetUserを用いて、ユーザ情報が取得できます。@pika_shiの情報を取得してみます。
>>> user = api.GetUser('pika_shi') >>> print user.name # 名前 ぴかし >>> print user.description # 自己紹介 京大の院生なう(・∀・)/MENSA会員/ @pika_shi_bot /ムキムキになりたい >>> user.statuses_count # ツイート数 10288
GetFriendsTimeLineで、TLを取得できます。以下では、TLを取得し,最新ツイートを表示しています。
>>> timeline = api.GetFriendsTimeline(‘pika_shi’) >>> print timeline[0].user.name, tweet[0].text 瀬戸内寂聴bot 「同床異夢」とは、同じ布団で寝ていても同じ夢は見られないことです。愛の情熱は三年位しか続きません。夫婦は苦楽を共にして愛情を持ち続けるのです。
ツイートの情報も、例えば以下のようなものが取得できます
>>> tweet = timeline[0] >>> print tweet.created_at # ツイートの投稿時間 Sat Aug 10 01:28:29 +0000 2013 >>> print tweet.source # ツイートされたクライアント <a href="http://twittbot.net/" rel="nofollow">twittbot.net</a>
ツイートは以下のように投稿できます。デコード必須です
api.PostUpdate(‘こんにちは!’.decode("utf-8"))
記事の検索は以下のようにします。以下では検索結果の上位1件のツイートを表示しています。
>>> search_results = api.GetSearch('こんにちは'.decode('utf-8')) >>> print search_results[0].text 天才と天才がこんにちは事件
他にもモジュールは沢山あります。また、ツイートやユーザの情報は上記のもの以外も取得できるので、詳しく知りたい方はpython-twitter ドキュメント を読んで下さい。
Botに機能を追加しよう!
前回は、「歯医者こわくないよ!がんば!」とただ投稿するだけの機能を作成しました。今回は、「歯医者こわい」と言っている人にリプライする、という機能をつけてみようと思います。
以下の流れで行います。
- 「歯医者こわい」でツイート検索
- 検索結果の上位1件を取得
- そのユーザに対して「歯医者こわくないよ!がんば!」とリプライ
#-*- coding: utf-8 -*- import twitter import sys reload(sys) sys.setdefaultencoding('utf-8') # 自身が取得したものに置きかえて下さい CONSUMER_KEY="XXXXXXXXXX" CONSUMER_SECRET=" XXXXXXXXXX " ACCESS_TOKEN=" XXXXXXXXXX " ACCESS_TOKEN_SECRET=" XXXXXXXXXX " api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET, cache=None) # 「歯医者こわい」でツイート検索し、結果の上位1件を取得 tweet = api.GetSearch('歯医者こわい'.decode('utf-8'))[0] # リプライメッセージを作成 # tweet.user.screen_nameにリプライするユーザ名が入ります postmsg = '@' + tweet.user.screen_name + ' 歯医者こわくないよ!がんば!' # リプライを投稿 # in_reply_to_status_idで、どのツイートに対するリプライなのかを指定しています api.PostUpdate(status=postmsg.decode('utf-8'), in_reply_to_status_id=tweet.id)
上記のプログラム(post_tweet.py)を実行してみて下さい。すると以下のように投稿されます。
これで基本的な機能が完成しました。次回は、いよいよこのBotをGAEに載せ、一定時間ごとに自動で投稿させようと思います。ご期待ください。