Hatena::ブログ(Diary)

お首が長いのよ このページをアンテナに追加 RSSフィード

2013-06-06

python-twitterを使ってTwitterBot開発


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

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

ダウンロード

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/

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

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

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

sudo pthon setup.py install

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

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

こちらにアクセス
twitter developpers 
https://dev.twitter.com/

f:id:killinsun:20130607023401p:image
ログインしたら画面右上のアイコンをクリックし、My Applicationsを選択

ここでこれから作成するTwitterアプリケーション(=bot)の登録をする。

  • Name

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

  • Description

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

  • WebSite

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

今回は空白で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つの鍵が揃った。
これらは外部に漏らさないようにすること。

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

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

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

  • 2行目

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

  • 4行目から7行目

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

  • 9行目

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

api = twitter.Api(consumerKey,consumerSecret,accessToken,accessSecret)

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

  • 11行目
 11 tlAry = api.GetUserTimeline('kill_in_sun',count=100)
  • GetUserTimeline()

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

  • 15行目
 15     if s.text[0] != '@':

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

  • 16行目
 16         tweetlist.append(s.text)

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

  • 18行目

>|python|
18 api.PostUpdates(status=tweetlist[random.randint(0,99)])
||<

  • PostUpdates()

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

今後やるべきことメモ

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

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元
Connection: close