PythonでTwitterのAPIをたたいてみよう-ツイート偏

はじめに

前回のエントリーでpython-twitterの環境を整備した。
今回は、この環境を使用して実際にツイートするところまで行いたいと思う。
またunicodeに関して、引っかかったので説明を少し長めに説明をする。


OAuthの利用登録

以前は、IDとパスワードでツイートできたようだが、今はoauthという仕組みをつかって認証しないといけないようだ。
まずは以下のページにアクセスしてtwitterでOAuthの利用登録申請を行う。
http://twitter.com/oauth_clients



ツイートしてみる

以下のコード内でhogehogeに、先ほどOAuthの利用登録で発行されたあなたののIDを入れてほしい。

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
import twitter

CONSUMER_KEY="hogehoge"
CONSUMER_SECRET="hogehoge"
ACCESS_TOKEN="hogehoge"
ACCESS_TOKEN_SECRET="hogehoge"

api = twitter.Api(consumer_key=CONSUMER_KEY,
                      consumer_secret=CONSUMER_SECRET,
                      access_token_key=ACCESS_TOKEN,
                      access_token_secret=ACCESS_TOKEN_SECRET)

print "What are you doing?: ",
postmsg = sys.stdin.readline()
status = api.PostUpdate(postmsg.decode("shift-jis"))


さっそくMS-DOSの標準入力からツイートしてみみる。


で!実行結果がこちら↓

ちゃんとツイートできている。



unicodeの取り扱いについて注意

ここで注意が必要なメソッドがある。
status = api.PostUpdate(postmsg.decode("shift-jis"))
Pythonを使っている日本人プログラマは大概ひっかかると思うが、ユニコードの取り扱いに関して注意が必要だ。Pythonで文字を扱うときはstr型とunicode型の2つの型を使用する。このunicode型はPython内でのみ有効な型で、外部とI/Oするときは適切な文字コードでデコードする必要がある。.decodeはその変換作業を行っている。

ここで選択する文字コードはそれぞれの環境に依存する。なぜならば標準入力を利用して、ツイートする文字を入力しているからだ。私はMS-DOSを使用しているので”shift-jis”を指定している。もしもMS-DOS文字コードを変更している場合、それにあわせて文字コードを変更する必要がある。ちなみにLinuxの場合、たいてい”utf-8”が使われている。

unicodeに関しては前回のエントリーで、もう少し詳しく説明している。

ためしにあなたの環境とはマッチしないエンコーディングを指定して、実行してほしい。日本人プログラマを悩ませるUnicodeError:が出てくるはずだ。



C:\Users\seya\Desktop\Python-twitter>python twitter_test_2.py
What are you doing?: ほげ

Traceback (most recent call last):
File "twitter_test_2.py", line 20, in
status = api.PostUpdate(postmsg.decode("utf-8"))
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x82 in position 0: invalid s
tart byte

C:\Users\seya\Desktop\Python-twitter>

ほら出た。このエラーはPythonのunicod型の変数(中身はshift-jis)を、utf-8文字コードでデコードしようとしたら「0x83はutf-8文字コードに無い値で変換できません」と言われている。


まとめ

なれている人が作業すれば、あっという間にここまでこれると思う。自分の場合はMS-DOSPythonを使うのは初めてだったし、unicodeで苦労した。ただ、こうしてblogのエントリーを書きながら全体を見渡してみると、非常に簡単にAPIを叩くことが出来ている。私は本来ハードウエア寄りのエンジニアだが、Webの世界にも入っていきたいと思った。