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