wiki:Dev/Twitter/Perl

Version 5 (modified by mitty, 9 years ago) (diff)

--

  • cpan:Net::Twitter
    • Mooseを使うためか、依存パッケージがかなり多い (Ubuntu lucidでaptitude install libnet-twitter-perl => 49 newly installed)
  • cpan:Net::Twitter::Lite
    • 依存パッケージは少ない(5 newly installed)が、エラーハンドリングを自前でやってくれないのでevalしないといけない(公式にそう書いてある…)
    • デフォルトではNet::OAuth(libnet-oauth-perl)を入れてくれないので、気をつけないと認証できなくて悩むことになる

glossary

  • id
    • 文脈に依存するが、メソッドに引数として与える際はuser_id or screen_name or status_id
    • 返値のHASHのキーとして含まれる場合は、user_id or status_idのことが多い模様
    • 返値の例
      my $res = $bot->followers({cursor => -1});
      > $ret->{users}[0]{id} => user_id
      > $ret->{users}[0]{status}{id} => status_id
      
  • user_id
    • ユーザを指定するID(num)
  • screen_name
    • twitter.com/hogehoge の hogehoge の部分
  • status_id
    • つぶやき(tweet)を一意に指定するID(num) twitter.com/hogehoge/status/12345 の12345の部分
  • since_id
    • 指定するID「より大きな」IDのみを対象とする
  • page
    • 20件ずつ取得する際の(過去に向かっての)ページ番号
    • 開始は1

commonly used method

  • Net::Twitter::Lite 0.10003
  • Required Parameters => bold
  • followers : id, user_id, screen_name, cursor => HashRef|ArrayRef[User]
    • IDで指定されるユーザ「を」フォローしているユーザのリスト
    • 引数idを省略した場合、自分をフォローしているユーザのリストが返る
  • followers_ids : id, user_id, screen_name, cursor => HashRef|ArrayRef[Int]
    • idのリストだけ欲しい場合
    • 返値がfollowerのuser_idの単純な配列リファレンスなので使いやすい
  • friends : id, user_id, screen_name, cursor => Hashref|ArrayRef[User]
    • IDで指定されるユーザ「が」フォローしているユーザのリスト
    • followingというメソッド名でも可
  • friends_ids : id, user_id, screen_name, cursor => Hashref|ArrayRef[Int]
  • retweet : id => Status
    • IDで指定されるつぶやきをRT
    • 新しく生成されたstatusのIDをshow_statusしたものが返る
    • 既にRT済だったりする場合は「403: Forbidden」
    • rtweets とメソッド名が紛らわしい…
  • retweeted_by : id, count, page => ArrayRef[User]
    • IDで指定されるつぶやきをRTしたユーザのリストを得る
  • retweeted_by_ids : id, count, page => ArrayRef[User]
    • retweeted_byのuser_idのみバージョン
  • retweeted_by_me : since_id, max_id, count, page => ArrayRef[Status]
    • 自分がRTしたつぶやきのリスト twitter.com/retweets
    • メニューの「Retweets」=>「Retweets by you(あなたのリツイート)」と同じ
  • retweeted_of_me : since_id, max_id, count, page => ArrayRef[Status]
    • retweets_of_meでもOK
    • RTされた自分のつぶやき twitter.com/retweeted_of_mine
    • メニューの「Retweets」=>「Your tweets, retweeted(リツイートされたあなたのツイート)」と同じ
  • retweeted_to_me : since_id, max_id, count, page => ArrayRef[Status]
    • メニューの「Retweets」=>「Retweets by others(みんなのリツイート)」と同じ
  • retweets : id, count => Arrayref[Status]
    • IDで指定されるつぶやきのRTリスト
  • show_status : id => Status
    • IDで指定されるつぶやきを得る
    • 必ずしもログインしている必要は無い
  • mentions : since_id, max_id, count, page => ArrayRef[Status]
    • @hogehoge となっているつぶやきを得る
    • repliesというメソッド名でも可
    • since_id => 0 だと「Error in 'since_id' parameter: invalid id.」
    • RTは含まれない
    • example => Dumper
  • update : status, lat, long, place_id, display_coordinates, in_reply_to_status_id => Status
    • 新しくstatusを生成
  • search : q, callback, lang, rpp, page, since_id, geocode, show_user => HashRef
    • 検索機能を実行する
    • 引数はHASHだが、'string'をそのまま与えると { q => 'string'} として解釈する模様
    • example => Dumper
    • Twitterの検索機能は信頼性が低いかつフィルタされている単語があるのでそもそもあまり使い物にならない
  • user_timeline : id, user_id, screen_name, since_id, max_id, count, page, skip_user => ArrayRef[Status]
    • (指定した)ユーザのつぶやきリストを得る
    • 指定しない場合、自分のつぶやき
    • RTは含まれない
  • rate_limit_status : none => RateLimitStatus
    • APIの、単位時間あたりの最大回数回数と現時点での残り回数を得る
    • example => Dumper

tips

  • timelineなど、返値がArrayの場合、新しいつぶやきが若いindexでアクセスされる。つまり古いつぶやきから逐次処理する場合はreverseで配列を逆順にして処理すると良い
  • Twitterドキュメント/ソーシャルグラフ関連のAPI - TMD45WIKI!!!!
    • cursor=-1 または cursor=カーソル位置 (必須[になる予定。現在は、オプション])
    • 指定した(データベースの)カーソル位置以降のユーザID一覧を5000件分(1ページ分)取得する。-1 を指定した場合、先頭からの5000件分を取得する。応答本体に next_cursor がある場合は、「次のページ」(のカーソル位置)、previous_cursor がある場合は、「前のページ」(のカーソル位置)がそれぞれ存在することを示す。本APIの次回実行時に、この next_cursor や previous_cursor の示すカーソル位置を使用することで、ユーザID一覧の「次のページ」や「前のページ」相当分(5000件分)を取得することができる。(サーバが負荷集中状態の場合等、必ずしも5000件取得できる保証はない)
    • cursor 引数を省略した場合、全ユーザ(friends)のID一覧を返す(タイムアウトが発生するか、不完全な一覧が返る可能性が高い)[将来、上記のcursor 引数省略時の挙動は廃止し、cursor 引数の指定を必須とする予定]
  • retweetを、元々のstatus_idではなく、RT自体のIDを使ってretweet($id)すると、入れ子RTになるのではなく元々のstatus_idのtweetに対するRTになる。
    • 元々のtweetから見ると2回RTされている

samples