Twitterへ投稿したとき勝手にリンクに変換させないようにするためにはゼロ幅スペースを入れるとごまかせる

要約

  • Twitter側で勝手にリンクに変換されそうな内容は、ゼロ幅スペース(\u2003)を入れて回避できる
  • 見た目は変化がないが、実際にはゼロ幅スペースが入ってしまっているので、コピペで使ってもらう場合は推奨しない(わかりにくいバグに繋がるかもしれない)

参考:

github.com

背景

tweet時に勝手にリンクを貼ってしまう時がある。メンション、URL、ドメインハッシュタグなど。プログラミングのネタをタイトルに含めるとしばしばその条件に反応してしまい意図しないリンクが貼られてしまう。

そこでtwitter側で勝手にリンクを貼らないようにできないか探ったが、なさそうだった。しかし、上記の参考先に上げた内容をみたところ、置き換える条件に一致しない文字列にしてしまえばリンクに変換しなくなるらしい。その方向で回避してみることにした。

確認

はてなBlogのタイトルの twitter.com. の前にゼロ幅スペース(\u2003)がない場合、ある場合の記事を投稿し、ツイート連携の結果を比較する。

ツイッター連携は以下。

確認結果

項目 なし あり
はてなBlogのタイトル なし あり
はてなBlogのRSS上のタイトル なし あり
はてなBlogのTwitter連携
IFTTTのRSSTwitter連携

IFTTTは登録してからの最新しかとってくれないようだったので記事を投稿しなおしたりしたため、タイトルが微妙に違う。

はてなBlog側でゼロ幅スペースを勝手に消すことはなさそうだった。

ただ、どちらもゼロ幅スペースがあると自動的にリンクされなくなるので、こういった目的にはよいかもしれない。

参考: メンションなどの他のものはどうやって回避しているか?

参考にした実装を眺めると以下のようにやっていた。

https://github.com/rhysd/break-tweet-autolink/blob/master/index.ts#L54

  • メンション(@~), ListSlug(@~/~)、ハッシュタグ(#~)、キャッシュタグ($~)の場合は、先頭の記号の後ろに仕込む
  • URL(scheme有/無)は.の前に仕込む

また、twitter-textというtwitterの投稿内容をパースするライブラリがあり、その実装をみるとリンクに置き換わる箇所をどう判定しているか分かるかもしれない(list-slugとか初めて知った)

https://github.com/twitter/twitter-text