pythonでtwitterに書き込んだりタイムラインを見たりする

 2014-03-22
遅ればせながら。味見。
最初はperlでやろうと思ってました。でも必要なモジュールをCPANで入れようとしたらゴソゴソやったあとに「ごめんね」されたのでクソ。


仕方がないので? pythonでやってみた。最終的にはraspberrypiで走らせてみたいので、pythonのほうが仲が良いのかも。


参考文献:

PythonでミニマムなTwitterBOTをつくる【python-twitter】【pip】【Python2.6.6】 - DRYな備忘録
http://otiai10.hatenablog.com/entry/2013/07/14/125712




twitterのOauthの用意

とりあえずhttps://dev.twitter.com/に出向いて仮の名前でいいのでアプリを登録しておく。アプリ名は後から変更できる。タイムラインの読み取りだけでなく、書き込みも行うなら、AccessLevelは Read and write にしておく。
さしあたり、consumer-keyとconsumer-secret、それからaccess-token-keyとaccess-token-secretという4つの文字列が必要になる。Oauthの詳細はよく分からない。どうやら、consumer-**でアプリの身元を明らかにして、access-token-**でtwitter上での権限承認を明らかにする、みたい。なので、consumer-**はアプリ固有、access-token-**はアプリ&twitterアカウントの組み合わせに固有、らしい。アプリにpasswordなどを登録しておくとやりたい放題になっちゃうので、twitterから払い出されたこういった文字列を使って認証するのが安全。らしい。
twiapi.pngとにかく、consumerとtokenそれぞれのkeyとsecretの、計4つをまず作らないといけない。consumer-**はアプリ固有のものなので、上記でアプリを登録したらもうすでに払い出されているはず。
access-token-**はアプリで取得する仕組みを作りこむのが本筋らしいけど、とりあえず動作させたいからはやくよこせ!という場合には、アプリの API Keys というタブにある Create my access token を押すともらえます。



pythonの用意

必要なモジュールをpipとかいうのを使ってinstallする。・・と思ったらpipすら入ってなかったのでaptで入れるところから。
[pi]% sudo apt-get install pip
...ごにょごにょ...

[pi]% sudo pip install python-twitter
...ごにょごにょ...
なんかいろいろ入りました。どこかのCPANと違ってちゃんとできたみたい。



pythonを書く

pythonなんて書くの初めてなので文法からしてよくわからん。tabが意味を持つんだっけ?はぁん?
認証情報を一か所にまとめて書いておく。
---- conf.py ----
Ckey="hogehogehogehoge"
Csec="fugafugafugafugafugafugafuga"
Akey="foofoofoofoofoofoofoofoofoofoo"
Asec="varvarvarvarvarvarvarvarvar"

読み込み

とにかく、参考文献のページの記載を元にしてpython-twitter.GetUserTimelineを使ってみる。
---- get.py ----
import twitter
import conf

api=twitter.Api(
consumer_key = conf.Ckey,
consumer_secret = conf.Csec,
access_token_key = conf.Akey,
access_token_secret = conf.Asec,
)

def gettweet():
status = api.GetUserTimeline(
screen_name='ゆーざめいをいれて',
include_rts=False,
exclude_replies=True
)
for s in status:
print s.text.encode('utf8')

gettweet()
pydoc twitterを見るといくつかコマンドがあるらしいが、とりあえず自分のつぶやきの内容を取得したかったので、GetUserTimelineに、include_rts=Falseとexclude_replies=Trueを指定してみた。GetHomeTimelineとかのほうがいいのかな?わからん。

動作
[pi]% python ./get.py
...ごにょごにょ...
...ごにょごにょ...
動いた

書き込み

見るだけならcurlなりでできるだろう、書き込みこそ真骨頂!(?)
---- say.py ----
import twitter
import sys
import conf

argvs=sys.argv
if(len(argvs)!=2):
print'Usage: # python %s STRING' % argvs[0]
quit()


api=twitter.Api(
consumer_key = conf.Ckey,
consumer_secret = conf.Csec,
access_token_key = conf.Akey,
access_token_secret = conf.Asec,
)


def say(data):
api.PostUpdate(data)

say(argvs[1])
defでサブルーチンにするまでもないのだが、とりあえず動かすことが目標なので参考資料からの変更点は少なく。python-twitter.PostUpdateに文字列を与えてやれば書き込んでくれる。簡単。引数から文字列を受け取ってそれを書き込む動作にした。引数の存在チェックだけ適当にしている。

動作
[pi]% python ./say.py "パイソンでtwitterにつぶやき"

[pi]% python ./get.py
パイソンでtwitterにつぶやき
...ごにょごにょ...
...ごにょごにょ...
動いてる


twitterのOauthで認証して、タイムラインの読み込み、書き込みができた。
単機能なget.pyとsay.pyが作れたので、外部から操作してやれば簡単なtwitterボットになる。
ただし、twitter側の制限で、ratelimitというものがあって15分に15回以上のアクセスがあったら一定期間締め出されるらしい。くそったれ。。
なので調子に乗ってポンポンとコマンド撃ってるとtwitterから めっ! される。
UserStreamというtwitterのAPIを使うと読み込みならほぼ回数制限なし状態で読めるのだが、今のところやりかたがわからない。pydoc twitterをみると、python-twitter.GetUserStream()なんてものもあるのでこれ使えばいいのかも?
私はpythonを今回初めて触ったのでわからん! あとで必要になったら調べる。

とりあえず、cronで2分毎にget.pyして、特定の文字列を発見したらsay.pyで返答する、というボットみたいなボットじゃないちょっとボットな仕組みは狙い通り動いたので、これでいいや。
 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/158-5ce09141
≪ トップページへこのページの先頭へ  ≫