Twitter の gem でリツイートを「リツイート元のツイートID」で取得しない場合は情報が正しく得られないときがある

難解な標題

難解な標題とともに、内容も難解です。箇条書きで説明します。

  • ツイートはそれぞれがユニークな「ツイートID」を持つ
  • リツイートであってもそのリツイート自体が「ツイートID」を持つ
    • ただしその「ツイートID」にアクセスするとリツイート元(オリジナルツイート)へリダイレクトされる
  • Twitter の gem *1では上記の2つの「ツイートID」で取得したツイートに差異がある
    • リツイート元(オリジナルツイート)の「ツイートID」で情報を取得すれば正しい情報が得られる
    • リツイート自体の「ツイートID」で情報を取得すると正しく情報を得られないときがある
      • 正しく情報を得られない場合というのは、本文が日本語で140文字付近になっている場合
        • 添付URLや添付画像の情報が本文中ではなくsuffixに送られてしまっているとき

具体例

以下のようなオリジナルツイートがあります。ツイートIDは934008345999982592です。

上記のツイートをRTしたツイートが以下のツイートです。ツイートIDは934043544418885633です。

後者のアドレスは前者のアドレスにリダイレクトされるため、見た目は同じです。しかし、Twitter の gem(というか API)で取得する場合は前者と後者で得られる情報が違います。

以下、メソッドごとに前者の結果と後者の結果を示します。

tweet.media?

前者
true
後者
false

tweet.attrs[:full_text]

前者
【秋葉原ラジオ会館店】
ゲームセンターCXオリジナルメダルゲーム「戦え!課長ファイター」好評稼働中!
週末に是非プレイしに来て下さい!
あみあみ秋葉原ラジオ会館店は、JR秋葉原駅電気街口を出た所にある「秋葉原ラジオ会館」の4Fです!営業時間は10時~20時まで☆
ご来店お待ちしています♪
#gccx https://t.co/Y3boAcSury
後者
RT @amiamiakihabara: 【秋葉原ラジオ会館店】
ゲームセンターCXオリジナルメダルゲーム「戦え!課長ファイター」好評稼働中!
週末に是非プレイしに来て下さい!
あみあみ秋葉原ラジオ会館店は、JR秋葉原駅電気街口を出た所にある「秋葉原ラジオ会館」の4Fです!営業…

結論

ツイートの情報を取得する際にはオリジナルのツイートIDを用いること。もちろんこれはAPI制限に引っかかる可能性が高いのだが、現状そうするしか方法がない。

関連記事

下記の記事中の「取得できない場合」というのは、この記事の内容ではないかと推測しています。

*1:だけじゃなく一般的にかもしれませんが

Powered by はてなブログ