May 30, 2011

Python Twitter API python-twitter の使い方 (Part3): Post & Reply

それでは実際にTweetを投稿してみましょう。
ここからはWrite権限を持つ任意のユーザーでOAuthしたインスタンスが必要です。


使用するメソッドはPostUpdate()です。











twitter.Api.PostUpdate = PostUpdate(self, status, in_reply_to_status_id=None) unbound twitter.Api method
Twitter Status(Tweet、あるいは"つぶやき"と呼ばれているテキスト)を、認証ユーザからPostします。

引数
status: PostするText
in_reply_to_status_id: Reply対象のStatus(tweet)のID。これに指定されたIDのStatusに対してReplyを行う

返り値
Postされたtwitter.Statusインスタンスオブジェクト


サンプルコード
import twitter
 
api = twitter.Api(
  consumer_key = '********',
  consumer_secret = '********',
  access_token_key = '********',
  access_token_secret = '********')

s = u"ほげほげ"

api.PostUpdate(status=s)

さあ、あなたのアカウントのTimelineを確認してみましょう。何かつぶやいたはずです。





次にReplyをしてみましょう。
まずは、あなたのアカウントに対して、別アカウントからMentionを付けてTweetしておきましょう。それに対してAPIを使ってReplyするということをやってみます。


サンプルコード
import twitter
 
api = twitter.Api(
  consumer_key = '********',
  consumer_secret = '********',
  access_token_key = '********',
  access_token_secret = '********')

replies = api.GetReplies()
reply_name = replies[0].user.screen_name
reply_text = "@" + reply_name + " " + u"りぷらい!"
reply_to = replies[0].id
api.PostUpdate(
  status=reply_text,
  in_reply_to_status_id=reply_to)

以下、解説です。

replies = api.GetReplies()

GetReplies()メソッドで、自身へのMentionがかかっているStatusインスタンスをListで取得します。repliesにList型でいくつかのStatusインスタンスが入ります。


reply_name = replies[0].user.screen_name

とりあえず、一番最新のStatusに対してReplyしようとします。
replies[0]には最新のStatusオブジェクトが入っていますので、それをつぶやいたアカウント名を取得します。


reply_text = "@" + reply_name + " " + u"りぷらい!"

Replyするテキストを作ります。"@" + アカウント名でMentionを表現し、空白で区切って適当にテキストを入れます。


reply_to = replies[0].id

ReplyのターゲットであるStatusのidを取得します。


api.PostUpdate(status=reply_text, in_reply_to_status_id=reply_to)

ここで実際にPostします。Mentionを含んだテキストとReply先のidを要素としてセットしています。





さて、公式Retweetについては・・・。確認している範囲でpython-twitter-0.8.2には実装されていないように思われます。以下のスレッドでPatchが出ているので、これを適用すると、PostRetweet()が実装できるのかと。
Issue 130: Implement the retweet API





つぶやくことが出来れば、cronをセットして定期的につぶやく事が出来るようになります。
検索が出来れば、ヒットしたStatusにReplyすることが出来ます。
まだ簡単なことしか出来ないと思いますが、まずは動かしてみることをしてみましょう。何にしてもまずはそれからです。