Twitterリツイートに関するJSONについてまとめる


目的

 Twitterの1つ1つのツイートはJSONで構成されており、TwitterAPIへのアクセス時には、応答として返ってきたJSONをパースして内容を読みます。
 開発者がJSONの各フィールド(変数)の意味を理解しておかなければ、「そのツイートがリツイートされたものなのか、普通のツイートなのか?」などを判定する際に、誤った状態として認識してしまうことに繋がります。

 本記事の目的は、リツイートに関するフィールドについてまとめ、自分への備忘録を残すことおよび情報共有を行うこととします。

結論

 目的で述べた「そのツイートがリツイートであるか?」を判定するためには、"retweeted_status"のフィールドの有無を調べれば良いです。

if (tweet.retweeted_status) {
  console.log(tweet.text + "はリツイートです")
  console.log(tweet.retweeted_status.text + "が原文です")
} else {
  console.log(tweet.text + "はリツイートではありません")
}

 リツイートに関連するフィールドと説明をまとめたものを下表に示します。

No. フィールド 説明
1. retweeted そのツイートがリツイートされたかどうかを示す。
リツイートであるかどうかではないことに注意。
2. retweet_count そのツイートが何回リツイートされたかを示す。
3. retweeted_status そのツイートがリツイートである場合のみ存在するフィールド。
よって「そのツイートがリツイートであるかどうか」はこのフィールドの有無を判定すれば良い。
中身はリツイート元のオリジナルのツイート。
4. quoted_status そのツイートが引用リツイートである場合のみ存在するフィールド。
中身は引用元のオリジナルのツイート。
5. quoted_status_id
quoted_status_id_str
そのツイートが引用リツイートである場合のみ存在するフィールド。
引用元のオリジナルのツイートのIDを表す。(4と同じ)

所見

  • 「そのツイートがリツイートかどうかを調べる」にあたって、以前使っていたTwitter4Jでは、Statusインターフェースに"isRetweet()"メソッドがあり、をbooleanで返してくれるようになっていた。
  • 今回Node.jsでTwitter APIを利用することとなり、使用モジュール(Twit.js)には上に該当するメソッドが無かった。どのフィールドだったっけ? となった経緯がある。こうしてまとめられて良かった。

参考

1. Twitter Developer Documentation: "Tweets"
2. Twitter Developer Documentation: "POST statuses/retweet/:id"
3. Twitter開発者ドキュメント 日本語訳: "オブジェクト内のEntities"