お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2013-06-05

python-twitterを使ってTwitterBot開発

 環境の構築さえできてしまえば問題無いんだけど、OAuthだったり、 tweetpyだったり、python-twitterだったり、その他いろいろだったり ライブラリが多すぎてどれを参考にしていいかわからなくなった人向けに。

今回はpython-twitter ver0.8.5を使います。 (執筆時点では1.0が出てるけどこちらのほうが解説充実しているため)

ダウンロード

python-twitter

https://code.google.com/p/python-twitter/

右のDownloadメニューからver 0.8.5をダウンロード。 python-twitterは、他に3種類の依存関係のあるモジュールをインストールしなければならない。 それぞれダウンロードして解凍しておく。

simplejson

http://cheeseshop.python.org/pypi/simplejson

httplib2

http://code.google.com/p/httplib2/

python-oauth2

http://github.com/simplegeo/python-oauth2

各モジュールのインストール

  ダウンロードするものを間違えない限り、大体は、解凍したフォルダ内にある setup.py を実行することでインストールできる。 管理者権限が必要なので注意。

bash
1sudo pthon setup.py install
2

引数をinstallではなく、buildにすることで、構築と配置を別々の作業に切り分けることもできるらしい。

OAuth認証のための【鍵】を取得する

こちらにアクセス

twitter developpers https://dev.twitter.com/

f:id:killinsun:20130607023401p:image

ログインしたら画面右上のアイコンをクリックし、My Applicationsを選択 ここでこれから作成するTwitterアプリケーション(=bot)の登録をする。

Name

アプリケーションの名前。あなたの名前ではありません。

Description

Twitterで外部サービスを使う時に、「このアプリを認証する」という画面を見かけたことがあるかと思います。 そこに出てくる説明文です。

WebSite

もしホームページやブログをお持ちなら

Callback URL

今回は空白でOK

f:id:killinsun:20130607023404p:image

上手く作成できればこの画面に飛ぶ。

ここがTwitter側で自身のアプリケーションを管理するページである。 ご覧の通り、鍵もここに記載されている。

このままだと、アプリケーションはRead-onlyとなっており、 こちらから行えるのはTLやユーザー情報の取得だけで、ツイートの投稿やフォローなどはできない。

上部にあるsettingsタブにあるメニューを見れば、どこを編集すればいいかわかるはず。

f:id:killinsun:20130607023405p:image

Detailsタブに戻り、ページ下部にある Create my access token をクリック これで、

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Acccess Secret

OAuth認証に必要な4つの鍵が揃った。 これらは外部に漏らさないようにすること。

指定ユーザーのツイートを取得し、ランダムにつぶやく

  必要なモジュールをインストールし、 鍵も取得できたところで、いきなりソースコード貼っつけて解説する。

python
1 import twitter,t_key,random
2
3 consumerKey   =t_key.dict['cons_key']
4 consumerSecret  =t_key.dict['cons_sec']
5 accessToken     =t_key.dict['acc_token']
6 accessSecret  =t_key.dict['acc_sec']
7
8 api = twitter.Api(consumerKey,consumerSecret,accessToken,accessSecret)
9
10 tlAry = api.GetUserTimeline('kill_in_sun',count=100)
11 tweetlist=[]
12
13 for s in tlAry:
14     if s.text[0] != '@':
15         tweetlist.append(s.text)
16
17 api.PostUpdates(status=tweetlist[random.randint(0,99)])
18

2行目

python-twitterでは、twitterモジュールとしてインポートしている。

4行目から7行目

先ほど取得した認証鍵を予め別ファイルに格納しておき、 インポートしてから格納している。

9行目

注意して貰いたいのは、古い技術ブログに twitter.Api(username=xxx,password=xxx)といった形の認証方法を記述しているものがあるが、 この認証方式は随分前に廃止になっており、使うことは出来ない。 現在のOAuth認証では、

python
1tlAry = api.GetUserTimeline('kill_in_sun',count=100)
2

このようにして、4つの鍵をパラメータとして渡す必要がある。

11行目

python
1tlAry = api.GetUserTimeline('kill_in_sun',count=100)
2

GetUserTimeline()

このメソッドで指定したユーザーのタイムラインが取得できる。 取得したデータはオブジェクト型として戻り値が返される。

15行目

python
1tweetlist.append(s.text)
2

text パラメータが、実際の「つぶやいた内容」である。 先頭に[@]が付いているものは公開リプライになってしまうため、取得しないように弾いている。

16行目

python
1tweetlist.append(s.text)
2

今回は、リストを用意し、countで指定した分だけ格納するようにしている。

18行目

python
1api.PostUpdates(status=tweetlist[random.randint(0,99)])
2

PostUpdates()

status=[文字列] ツイートするメソッド。 ご覧のとおり、randomを使い、100件取得したツイートの中から適当に選び、ツイートしている。

今後やるべきことメモ

  • リプライがあった場合に対応
  • 一度ツイートしたものは以後、ツイートしないようにする
  • 自動フォロー返し

よかったらシェアしてください!