2022/01/03追記
2022年01月03日現在、この記事の内容は杞憂(=無視して良い)のようです- ↑は勘違いで、やはり常に指定していたほうがいいです
2020/03/15追記
- 本文中の「
tweet_mode: "extended"
を与えた場合は、text
メソッドとfull_text
メソッドだと空っぽの値が返ってくる」というのが現状に即していないため、修正しました - 参考Issuesは こちら
正しいツイート情報が得られない
Twitter の仕様変更により、gem で正しいツイート情報が得られないことがあります。
そのようなツイートでは、tweet.text
で得られる内容の末尾が…
と省略されていたり、画像が添付されているのにtweet.media?
でfalse
が返ってきたりします*1。その場合の対処方法です。
結論
第二引数にtweet_mode: "extended"
を指定してツイートオブジェクトを取得し、text
メソッドまたはfull_text
メソッドで本文を取得する。
第二引数にtweet_mode: "extended"
を指定してツイートオブジェクトを取得し、attrs[:full_text]
メソッド(引数)で本文を取得する*2。
実例
正しい情報が返ってくる例
tweet_obj = @client.status(878909511007821824, { tweet_mode: "extended" }) puts tweet_obj.full_text
これで以下のように全文が返ってきます。tweet_obj.media?
やtweet_obj.hashtags?
に対してもtrue
が返ってきます。
それでは今年もありがとうございました。幻水ファンの養分の一部になれましたら幸いです。 幻水総選挙2017に関わってくださった全ての方々に感謝を込めて。 \われらに しょうりを!/ クロージングイラストご協力: @doradora4120 様 #幻水総選挙2017 https://t.co/jidpVFD8BD
正しくない情報が返ってくる例
もしtweet_mode: "extended"
を指定せずにtweet_obj.text
メソッドで返り値を求めると、次のように末尾が切れたテキストが返ってきます。画像も添付されているのにもかかわらず、media?
メソッドでfalse
が返ってきます。
それでは今年もありがとうございました。幻水ファンの養分の一部になれましたら幸いです。 幻水総選挙2017に関わってくださった全ての方々に感謝を込めて。 \われらに しょうりを!/ クロージングイラストご協力:… https://t.co/g7QOblkRYo
なおこの際、得られたテキストの末尾に付与されているt.co
のリンク先は画像へのリンクではなく、/i/web/
を含んだ URI へのリンク(ツイートへのリンク)であることも注意点です。全文取得した場合と比べて URL が異なることからそれがわかると思います。
実運用上はどうするか
tweet_mode: "extended"
を付けることによるデメリットは無いでしょうから、常に付与して良いと思います*3。
補足
※2020/03/15現在、以下の状況が起きるかどうかわかりませんので、いったん打消し線を入れさせていただきます
上記の方法を用いてもツイートの全文が取得できない時があります。その場合は、Twitter の公式で見ても末尾が…
となっていたりしてもう手に負えません。
このような場合は、まず「尻切れツイートであることを判別」した上で、「全文を構成すると思われるテキストとリンクを抽出して結合する、というめちゃくちゃ面倒くさい作業が必要だと思われます*4。
あまり完璧を求めすぎるとストレスマッハです。