TwitterAPIのstatuses/show/:idにはどんな情報が入っているのか【前編】

#概要
TwitterAPIのGETメソッドであり、ツイートの各種情報を取得してくれる`statuses/show/:id`にはどんな情報が格納されているのかを（できる限り）調べました。半分自分用メモ。

あと「statuses/show ●●●」と検索をかけてここにたどり着いてしまった人向け。

#仕様

- [GET statuses/show/:id](https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-show-id)
- [GET statuses/show/:id - ツイートを個別に取得する - Syncer](https://syncer.jp/Web/API/Twitter/REST_API/GET/statuses/show/id/)

#使用例

TwitterAPIを使える環境で。Rubyでのプログラム例です。

```ruby:show.rb

require 'twitter'
@client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "aaa"
  config.consumer_secret     = "bbb"
  config.access_token        = "ccc"
  config.access_token_secret = "ddd"
end

consumer = OAuth::Consumer.new(
    @client.consumer_key,
    @client.consumer_secret,
  )
  endpoint = OAuth::AccessToken.new(consumer, @client.access_token, @client.access_token_secret)
  responce = endpoint.get("https://api.twitter.com/1.1/statuses/show/#{tweet_id.to_s}.json")
  result = JSON.pretty_generate(JSON.parse(responce.body))
```

#本題

JSONの構造は仕様の2番目のリンクを見るべし。ただ、内部の要素も少し変わりつつあるので、正確な構造を知りたいなら実行してみるのがいいかも。また、Twitterに新機能が追加されるたびにshowの中身も変わってくるので、今回の情報が必ずしも最新の情報であるとは限らない点にも留意してください。

書いてる途中で「とてつもなく長くなるな」と思ったので、記事を二つに分けました。今回はツイートに関する情報についての説明を行います。

ツイート発信元のアカウントに関する情報の説明はこちら→執筆中

ここから本題です↓↓↓

- `"create_at"` …ツイートが送信された日時。
- `"id"` …ツイートのID。
- `"id_str"` …ツイートのIDを文字列化したもの。
- `"text"` …ツイート本文。文章が長いと省略された形になる。エンドポイントの指定の時に後ろに`tweet_mode=extended`をつけるとここが`"full_text"`に変わり、本文が長くても省略されないものが格納される。
- `"truncated"` …`"text"`で本文が省略されているかどうか。`"full_text"`ではfalseになる。
- `"display_text_range"` …簡単に言うと文字数。改行も1文字とみなされるが、URLは文字数に含まれない。2つ数字が格納されているが、最初の数字が何を表すかは不明。
- `"entities"` …ツイート内にある諸々の機能と詳細。それぞれ、存在しない場合は空欄。
    - `"hashtag"` …ハッシュタグ。
        - `"text"` …ハッシュタグの文章。
        - `"indices"` …不明。
    - `"symbols"` …不明。位置情報かな…？
    - `"user_mentions"` …ツイート内に@から始まるTwitterユーザーのIDがある場合に値が入る。
        - `"screen_name"` …ツイート内にあるTwitterユーザー名。@から始まるID。
        - `"name"` …ユーザーの名前。
        - `"id"` …メンション先のユーザーのID。
        - `"id_str"` …ユーザーIDを文字列化したもの。
        - `"indices"` …不明。
    - `"urls"` …URL。
        - `"url"` …Twitter側で自動短縮されたURL。
        - `"expanded_url"` …短縮されていない素のURL。
        - `"display_url"` …URLが、Twitterの公式アプリやTweetdeckではどう表示されているか。
        - `"indices"` …不明。indexの複数形なんだろうけど…。
    - `"media"` …ツイートにメディアを添付した際に出現。
        - `"id"`, `"id_str"` …メディアが添付されたツイートのIDとその文字列化。
        - `"indices"` …不明。
        - `"media_url"` …メディアをURL化したもの。
        - `"media_url_https"` …メディアのURLをhttps化したもの。
        - `"url"` …https化したURLを自動的に短縮したもの。
        - `"display_url"` …メディアをURLとして表示するとき、Twitter公式アプリやTweetdeckではどう表示されるか。
        - `"expanded_url"` …短縮されない素のURL。`"media_url"`ではpbs.twimg.com/media…というURLだがこちらはtwitter.com…と表記が違う。
        - `"type"` …メディアの種類。写真なら`"photo"`になる。
        - `"sizes"` …メディアのサイズに関する情報。
            - `"thumb"` …圧縮（？）した時ののサイズ情報。
                - `"resize"` …元画像を切り抜いてこのサイズにしたなら"crop"、画像の表示時に縦か横に合わせるようにサイズを調節したなら"fit"が格納される。（要検証）
            - `"large"`,`"medium"`,`"small"` …大・中・小での画像サイズ。
        - `"features"` …メディア内に存在する特徴ある物体に関する情報。例えば、画像の中に顔と認識できるものがあれば`"faces"`という情報が追加され、画像中で顔がどの位置にあるか、顔の大きさ（不確定・要検証）が格納される。（要検証："faces"以外に存在するか？）
- `"extended_entities"` …`"entities"`から空欄である部分を除いたものと同じ情報が格納されている。
- `"source"` …ツイートがどのようなアプリケーションが発信されたか。例えばTweetdeckでツイートしたなら`"<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>"`みたいになる。
- `"in_reply_to_status_id"` …取得したツイートがあるツイートに対してのリプライであるならば、そのリプライ元のツイートID。そうでない場合はnull。
- `"in_reply_to_status_id_str"` …リプライ元のツイートIDの文字列化。
- `"in_reply_to_user_id"` …リプライ元のツイートを呟いたアカウントのユーザーID。
- `"in_reply_to_user_id_str"` …リプライ元のツイートを呟いたアカウントのユーザーIDの文字列化。

#注意
ここで言う「ツイッターのユーザーID」とは、プロフィールから参照できる@から始まるものではなく、数値で表された一意的なものであることに注意してください。一般的な@から始まるユーザーIDは、show/:idの中では`"screen_name"`と呼ばれています。（show以外のメソッドもこの区別の仕方を用いているはずです。）

#最後に
まだまだ不明な値や未確定なものがたくさんありますので、気軽に情報提供をお待ちしています！「その値は〜〜が正しいと思う」「正確には〜〜だよ」など、些細なことでも構いません。たくさんのパラメータがあるshowメソッドを使う上で少しでもこの記事が役に立てばいいなと思います。

それでは！