バグ #1285
完了ツイート引用URLを含むツイートをStream受信したときに引用URLおよび引用ツイートが表示されない
説明
どちらかというと従来の「環境対応」ですが、
題名の通りで、ツイート引用URLを含むツイートをStream受信したときに
引用URLおよび引用ツイートが表示されなくなっています。
具体的には、 stream response で full_text にツイート引用URLが含まれなくなったようです。
https://social.mikutter.hachune.net/@tsutsuii/100452831249626952
https://social.mikutter.hachune.net/@tsutsuii/100452981401628790
https://gist.github.com/tsutsui/c8e5b7d6e259e91a3743e04856aadce9
rest の response だと full_text にツイート引用URLは含まれます。
https://social.mikutter.hachune.net/@tsutsuii/100453025697122706
https://gist.github.com/tsutsui/48f4534c23079e9870981395177f2f8f
さらに、ツイートURL引用 + 画像添付 の場合は full_text にツイート引用URLが含まれます。
https://social.mikutter.hachune.net/@tsutsuii/100453227224311163
https://gist.github.com/tsutsui/a2abed9f8a5e14b0402ea4b0f2031684
画像2枚目以降のURL同様に entity を見て追加および quited_tweet の処理を追加してやる必要がある?
https://m6n.onsen.tech/@tmyt/100453065054284061
@tsutsuii quoted_status_perma_link にdisplay_urlとexpanded_urlあたりの相当が含まれてるのでそれを各自末尾に足してねって感じですかね…
なお、この現象に最初に気づいたのは 7/22 未明です。
https://social.mikutter.hachune.net/@tsutsuii/100413637323751904
ファイル
再現手順
- 引用ツイートURLを含むツイートを投稿する
- そのツイートを userstream で受信する
→引用ツイートURLが本文に表示されず、 quoted_tweet の引用ツイート表示もされない- REST で受信した場合はどちらも表示される
toshi_a 初音 さんが6年以上前に更新
- ステータス を 分類待ち から 実装待ち に変更
UserStream限定の問題ですね。
今の所、あと半月でUserStreamは廃止されると発表されているので、残りの期間を快適に過ごすためにも最優先で対応したいところです。
Izumi Tsutsui さんが6年以上前に更新
- ファイル moveccr-1042416991200411648-web.png moveccr-1042416991200411648-web.png を追加
- ファイル moveccr-1042416991200411648.png moveccr-1042416991200411648.png を追加
userstream 廃止から久しいですが、 filterstream でも同様の現象になるようです
(≒今の mikutter でもまだ対策が必要?)
Izumi Tsutsui さんがほぼ6年前に更新
- ファイル tsutsuii-1103295647304708096.png tsutsuii-1103295647304708096.png を追加
- ファイル tsutsuii-1103295647304708096-web.png tsutsuii-1103295647304708096-web.png を追加
いまさらですが json はこんな感じです
(by https://github.com/toshia/debug_tools )
{:created_at=>"Wed Mar 06 14:05:55 +0000 2019",
:id=>1103295647304708096,
:id_str=>"1103295647304708096",
:full_text=>"う。",
:truncated=>false,
:display_text_range=>[0, 2],
:entities=>{:hashtags=>[], :symbols=>[], :user_mentions=>[], :urls=>[]},
:source=>"mikutter alternative",
:in_reply_to_status_id=>nil,
:in_reply_to_status_id_str=>nil,
:in_reply_to_user_id=>nil,
:in_reply_to_user_id_str=>nil,
:in_reply_to_screen_name=>nil,
:user=>TwitterUser(@tsutsuii),
:geo=>nil,
:coordinates=>nil,
:place=>nil,
:contributors=>nil,
:is_quote_status=>true,
:quoted_status_id=>1103291265918087171,
:quoted_status_id_str=>"1103291265918087171",
:quoted_status_permalink=>
{:url=>"https://t.co/zZb2oZ1QUs",
:expanded=>"https://twitter.com/PkgsrcChanges/status/1103291265918087171",
:display=>"twitter.com/PkgsrcChanges/…"},
:quoted_status=>
{:created_at=>"Wed Mar 06 13:48:30 +0000 2019",
:id=>1103291265918087171,
:id_str=>"1103291265918087171",
:full_text=>
"www/webkit-gtk [pkgsrc-2018Q4]: Makefile PLIST distinfo
" +
"www/webkit-gtk/patches [pkgsrc-2018Q4]:
" +
"...
" +
"
" +
"bsiegert: www/webkit-gtk: security fix (remote code execution)
" +
"
" +
"https://t.co/SrGebOSkiz
" +
"https://t.co/ng2rjkze4f
" +
"https://t.co/kabngZo54V
" +
"https://t.co/crOy3b2EBK",
:truncated=>false,
:display_text_range=>[0, 260],
:entities=>
{:hashtags=>[],
:symbols=>[],
:user_mentions=>[],
:urls=>
[{:url=>"https://t.co/SrGebOSkiz",
:expanded_url=>
"http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/webkit-gtk/Makefile.diff?r1=1.155&r2=1.155.2.1",
:display_url=>"cvsweb.netbsd.org/bsdweb.cgi/pkg…",
:indices=>[165, 188]},
{:url=>"https://t.co/ng2rjkze4f",
:expanded_url=>
"http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/webkit-gtk/PLIST.diff?r1=1.45&r2=1.45.2.1",
:display_url=>"cvsweb.netbsd.org/bsdweb.cgi/pkg…",
:indices=>[189, 212]},
{:url=>"https://t.co/kabngZo54V",
:expanded_url=>
"http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/webkit-gtk/distinfo.diff?r1=1.114&r2=1.114.2.1",
:display_url=>"cvsweb.netbsd.org/bsdweb.cgi/pkg…",
:indices=>[213, 236]},
{:url=>"https://t.co/crOy3b2EBK",
:expanded_url=>
"http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/www/webkit-gtk/patches/patch-Source_JavaScriptCore_dfg_DFGDoesGC.cpp?rev=1.1",
:display_url=>"cvsweb.netbsd.org/bsdweb.cgi/pkg…",
:indices=>[237, 260]}]},
:source=>
"<a href="http://www.netmeister.org/apps/tweet/" rel="nofollow">very-simple-tweet</a>",
:in_reply_to_status_id=>nil,
:in_reply_to_status_id_str=>nil,
:in_reply_to_user_id=>nil,
:in_reply_to_user_id_str=>nil,
:in_reply_to_screen_name=>nil,
:user=>
{:id=>2437851661,
:id_str=>"2437851661",
:name=>"Pkgsrc Changes",
:screen_name=>"PkgsrcChanges",
:location=>"The Internet",
:description=>
"Pkgsrc commit messages as tweets. See @netbsdsrc for NetBSD commit messages.
" +
"Run by @jschauma.",
:url=>"http://t.co/Ve3OJR7Mjy",
:entities=>
{:url=>
{:urls=>
[{:url=>"http://t.co/Ve3OJR7Mjy",
:expanded_url=>"http://mail-index.netbsd.org/pkgsrc-changes/",
:display_url=>"mail-index.netbsd.org/pkgsrc-changes/",
:indices=>[0, 22]}]},
:description=>{:urls=>[]}},
:protected=>false,
:followers_count=>136,
:friends_count=>1,
:listed_count=>13,
:created_at=>"Fri Apr 11 03:01:16 +0000 2014",
:favourites_count=>0,
:utc_offset=>nil,
:time_zone=>nil,
:geo_enabled=>false,
:verified=>false,
:statuses_count=>81623,
:lang=>"en",
:contributors_enabled=>false,
:is_translator=>false,
:is_translation_enabled=>false,
:profile_background_color=>"FFFFFF",
:profile_background_image_url=>
"http://abs.twimg.com/images/themes/theme1/bg.png",
:profile_background_image_url_https=>
"https://abs.twimg.com/images/themes/theme1/bg.png",
:profile_background_tile=>false,
:profile_image_url=>
"http://pbs.twimg.com/profile_images/454454797442113536/ijZroPXp_normal.png",
:profile_image_url_https=>
"https://pbs.twimg.com/profile_images/454454797442113536/ijZroPXp_normal.png",
:profile_banner_url=>
"https://pbs.twimg.com/profile_banners/2437851661/1397185556",
:profile_link_color=>"B84E0D",
:profile_sidebar_border_color=>"FFFFFF",
:profile_sidebar_fill_color=>"DDEEF6",
:profile_text_color=>"333333",
:profile_use_background_image=>false,
:has_extended_profile=>false,
:default_profile=>false,
:default_profile_image=>false,
:following=>false,
:follow_request_sent=>false,
:notifications=>false,
:translator_type=>"none"},
:geo=>nil,
:coordinates=>nil,
:place=>nil,
:contributors=>nil,
:is_quote_status=>false,
:retweet_count=>0,
:favorite_count=>0,
:favorited=>false,
:retweeted=>false,
:possibly_sensitive=>false,
:lang=>"ro"},
:retweet_count=>0,
:favorite_count=>0,
:favorited=>false,
:retweeted=>false,
:lang=>"ja",
:message=>"う。",
:created=>2019-03-06 23:05:55 +0900,
:exact=>false,
:receiver=>nil,
:replyto=>nil,
:retweet=>nil,
:modified=>2019-03-06 23:05:55 +0900}
:is_quote_status=>true
を見るべきかどうかはともかく:quoted_status_permalink=>
:display
を見るようにすればいいんですかね。
Izumi Tsutsui さんがほぼ6年前に更新
- ファイル 0001-Filterstream-RT-quoted_status_permalink.patch 0001-Filterstream-RT-quoted_status_permalink.patch を追加
とりあえず以下の方針で全然わからないまま雰囲気でコピペしたところ、
最低限の要件としての
「filterstreamで受信したツイートの引用RTのURL表示」
はされるようになりました。
- quoted_status_permalink から url を取り出す
- filterstream の場合は :full_text がないようなので、full_text が無い場合は quoted_status_permalink から取り出した url を本文の score に追加する
- 仮に full_text があった場合でも quoted_status_permalink から取り出した url が full_text に含まれない場合も本文の score に追加する
(これのテストができていない)
Izumi Tsutsui さんがほぼ6年前に更新
- 仮に full_text があった場合でも quoted_status_permalink から取り出した url が full_text に含まれない場合も本文の score に追加する
(これのテストができていない)
引用RTのURLを含めると 140文字を超えるツイートの filterstream 受信の場合、
full_text が付与されるがその中に引用RTのURLは含まれない、という応答のようです。
この場合でも意図(?)通り引用URLツイートは表示されました。
Izumi Tsutsui さんがほぼ6年前に更新
filterstream 受信と full_text まとめ¶
- ツイート本文が US-ASCII かつ 140文字以下で filterstream 受信した場合
https://gist.github.com/tsutsui/6b1ee37fa20f68ab82a809f0bf682667- text あり full_text なし text は引用RTのURLを 含まない
- entities の urls に引用RTのURLを 含まない (urls は空)
- ツイート本文が US-ASCII かつ 140文字以下で rest 受信した場合
https://gist.github.com/tsutsui/8e44daaba31d7a77944ab36ba5783383- text なし full_text あり full_text は引用RTのURLを 含む
- entities の urls に引用RTのURLを 含む
- ツイート本文が ja_JP.UTF-8 かつ 140文字以下で filterstream 受信した場合
https://gist.github.com/tsutsui/940aa2a7b87dbd475816208bd1c888f8- text なし full_text あり full_text は引用RTのURLを 含まない
- entities の urls に引用RTのURLを 含まない (urls は空)
- ツイート本文が ja_JP.UTF-8 かつ 140文字以下で rest 受信した場合
https://gist.github.com/tsutsui/0125472550eb75ec38cc7664247b4335- text なし full_text あり full_text は引用RTのURLを 含む
- entities の urls に引用RTのURLを 含む
- ツイート本文が ja_JP.UTF-8 かつ 140文字超で filterstream 受信した場合
https://gist.github.com/tsutsui/9be1479f83cbb83b6c3ba5ec3a80e4c2- text なし full_text あり full_text は引用RTのURLを 含まない
- entities の urls に引用RTのURLを 含まない (urls は空)
- ツイート本文が ja_JP.UTF-8 かつ 140文字超で rest 受信した場合
https://gist.github.com/tsutsui/c8a1e80e06c3e8e493daa10d4fb4c6e9- text なし full_text あり full_text は引用RTのURLを 含む
- entities の urls に引用RTのURLを 含む
なお、いずれの場合も message の要素が存在し、それには引用URLを含まない本文が含まれている。
Izumi Tsutsui さんがほぼ6年前に更新
- ファイル 0001-Filterstream-RT-quoted_status_permalink-2.patch 0001-Filterstream-RT-quoted_status_permalink-2.patch を追加
履歴#6に基づいてパッチのコメントのみ修正した版
0001-Filterstream-RT-quoted_status_permalink-2.patch
Izumi Tsutsui さんがほぼ6年前に更新
反例¶
ツイート本文が ja_JP.UTF-8 かつ 140文字以下で rest 受信した場合 にもかかわらず
text あり full_text なし text は引用RTのURLを 含む
entities の urls に引用RTのURLを 含む
という事案が観測されたので、今のパッチではダメで修正が必要になりました……
https://twitter.com/n_soda/status/1105112522196049921
https://gist.github.com/tsutsui/04921a03c6821b0b4042da8ad7fcb453
Izumi Tsutsui さんがほぼ6年前に更新
- ファイル 0001-Filterstream-RT-quoted_status_permalink-3.patch 0001-Filterstream-RT-quoted_status_permalink-3.patch を追加
雑に!(textがある && textに引用RT URLが含まれる) && !(full_textがある && full_textに引用RT URLが含まれる)
という判定で書き直してみた(対処療法)
0001-Filterstream-RT-quoted_status_permalink-3.patch
toshi_a 初音 さんが5年以上前に更新
- ステータス を パッチ適用待ち から レビュー待ち に変更
- 担当者 を toshi_a 初音 から Izumi Tsutsui に変更
- プラグイン名 を twitter にセット
- ブランチ を topic/1285-fix-twitter-streaming-api-quoted-tweet にセット
mergeしてみました。しかし凍結アカウントではStreaming APIに繋げない…
Izumi Tsutsui さんが5年以上前に更新
- ファイル key-1104613387940507649.txt key-1104613387940507649.txt を追加
- ファイル key-1120379459150868480.txt key-1120379459150868480.txt を追加
- ファイル key-1120374613161021442.txt key-1120374613161021442.txt を追加
- ファイル key-1120366803123761153.txt key-1120366803123761153.txt を追加
- ファイル key-1120371707783417857.txt key-1120371707783417857.txt を追加
- ファイル tsutsuii-1120371707783417857.png tsutsuii-1120371707783417857.png を追加
- ファイル tsutsuii-1120366803123761153.png tsutsuii-1120366803123761153.png を追加
- ファイル tsutsuii-1120374613161021442.png tsutsuii-1120374613161021442.png を追加
- ファイル tsutsuii-1120379459150868480.png tsutsuii-1120379459150868480.png を追加
- ファイル tsutsuii-1104613387940507649.png tsutsuii-1104613387940507649.png を追加
- ステータス を レビュー待ち から マージ待ち に変更
未だに Twitter側の応答の法則が不明ですが、
topic/1285-fix-twitter-streaming-api-quoted-tweet で
以下のパターンで意図通り表示されていると思います。
textあり、 full_text なし、 text に引用ツイートURLが含まれる
key-1120371707783417857.txt
textあり、 full_text なし、 text に引用ツイートURLが含まれない
key-1120366803123761153.txt
textあり、 full_text あり、 text と full_text のいずれにも引用ツイートURLが含まれる
key-1120374613161021442.txt
textなし、 full_text あり、 full_text に引用ツイートURLが含まれない
key-1120379459150868480.txt
textなし、 full_text あり、 full_text に引用ツイートURLが含まれる (これは REST 取得)
key-1104613387940507649.txt