Twitterに投稿可能なURLは最長で何文字か
ツイッターといえば140文字*1しか投稿できないことで有名ですが、その例外として、ツイートに含まれるURLがあります。
通常、ツイート中のURLはhttps://t.co/iXo3yzqwxf
のように公式のURL短縮サービスで短縮され、URLが何文字だろうと、23文字としてカウントされます*2。
ん? 今「何文字だろうと」って言ったよね?
じゃあその上限はいったい何文字までなんだ、ということを検証しました。
方法
長いURLを作って投稿する。
テスト投稿を行ったのは以下の環境。
また、長いURLを生成するために、次のツールを作成した。
文字数を指定すると、全体で指定の文字数になるようなランダムなURLを生成する。生成したURLを開くと文字数が表示され、確かに指定の文字数がツイートできたことが確認できる*4。
絞り込み
まずは大まかに絞り込んでいく。
文字数 | ブラウザ | API |
---|---|---|
1000文字 | 成功 | 成功 |
4000文字 | 成功 | 成功 |
8000文字 | 失敗 | 失敗 |
さすがにいきなり8000文字は無茶だった模様。一方で4000文字はらくらくクリア。
>twurl /1.1/statuses/update.json -d "テスト 8000文字 https://fukurami.github.io/genurl/urlinfo.htm?52ebb7d1d871ff8b853f9c4fffe2047(略)03d"
失敗した時のレスポンス。bit shorterってレベルじゃない。
{"errors":[{"code":186,"message":"Tweet needs to be a bit shorter."}]}
ブラウザではURLを貼り付けた時点で、NGの場合はツイートができなくなる(通常の文字数オーバーと同じ挙動)
さらに絞り込み
とりあえず、上限は4000~8000文字の間にあることがわかった。
文字数 | ブラウザ | API |
---|---|---|
6000文字 | 失敗 | 失敗 |
5000文字 | 失敗 | 失敗 |
どんどん二分探索してゆく。
文字数 | ブラウザ | API |
---|---|---|
4500文字 | 失敗 | 失敗 |
4200文字 | 失敗 | 失敗 |
4100文字 | 失敗 | 失敗 |
4050文字 | 成功 | 成功 |
おっ……!
文字数 | ブラウザ | API |
---|---|---|
4070文字 | 成功 | 成功 |
4080文字 | 成功 | 成功 |
4090文字 | 失敗 | 成功 |
4090文字を境にしてブラウザとAPIで結果が別れてしまった。
ここまでの検証で、
- ブラウザでの上限は4080~4090文字の間
- APIでの上限は4090文字~4100文字の間
ということが分かった。
あとは、刻んでゆくだけである。
そして特定へ
まずはブラウザ
文字数 | ブラウザ |
---|---|
4085文字 | 成功 |
4087文字 | 成功 |
4088文字 | 成功 |
4089文字 | 失敗 |
来た!境界発見!
結論。ブラウザ(Twitter Web)で投稿できる、最長のURLの文字数は、4088文字である。
これが証拠のツイート。嘘だと思うならリンクをクリックしてほしい。
テスト 4088文字 https://t.co/Kh8mFWahoF
— ふくまち (@tfukumahi) 2021年11月16日
アホみたいに長かったURLが――https://t.co/Kh8mFWahoF
――これだけに!!! きっちり23文字である。
ちなみに次が決定的瞬間を捉えたgifである。4088文字のURLを貼り付けた状態ではOKなのだが、1文字書き加えた瞬間に、短縮できなくなってNGとなる。*5
そしてAPI
それでは、ブラウザよりも上限が大きいはずのAPIによる投稿では、一体何文字なのだろうか。
文字数 | API |
---|---|
4095文字 | 成功 |
4096文字 | 成功 |
4097文字 | 失敗 |
キタ━━━━━━(゚∀゚)━━━━━━ !!!!! (死語)
結論(2)。TwiterのAPIを直に叩いて投稿できる、最長のURLの文字数は、4096文字である。
こちらも証拠のツイートを貼っておく。これが理論上、最長のURLを貼り付けたツイートである。
テスト 4096(2) https://t.co/CafarJ6Vnz
— ふくまち (@tfukumahi) 2021年11月16日
ちなみにその際のレスポンス。実はentities.urls[0].expanded_url
に元のURLが格納されているので、リクエストも長ければレスポンスもクソ長い。
結論
検証の結果、Twitterに投稿可能な最長のURLは、
であることがわかった。
なぜブラウザとAPIで違うのか、4096文字なのかについては、色々と検証したものの残念ながらわからなかった。
一応URLには規格上、字数制限は存在しないのでサービス側で何らかの事情があるんじゃないですかね(投げやり)*6。
なおよく知られているところでは、Internet Expolorer(とかいう化石)は2083文字までのURLしか扱えない。Twitterも満足につかえないブラウザ。
おまけ
日本語URLではどうなのかというと、基本的にはURLと認識されればOKのようだ。
以下の画像が検証結果で、https://テスト.com/...
のような日本語ドメインは4088文字まで通ったものの、パス部分に日本語を入れた場合はURLと認識してくれずNG。
なお、日本語ドメインの場合は本文と異なり、日本語でも1文字で1文字カウントとなる*7。
……といっても、日本語ドメインだけで4096文字のURLを投稿できるわけではないのが難点。
そのままhttps://あああああ(4074文字)あああああ.com
だと当然だめで、まずは数十文字ごとに.
を挟んでサブドメインっぽくみせかけないと、URLかどうかのチェックを通らない。
Web画面ではおよそ60文字ごとに.
をはさむことでとりあえずURLとして認識されるものの、ツイートボタンを押すと……。
エラー。当然の結果。
いろいろと試行錯誤した結果、結局ツイートできた最長のものは次のツイート。英数字込で156文字なので、換算すると通常のツイート文字数制限と同じ。この制限はAPIを使っても突破できない。
https://あああああ.あああああああ.ああああああ.あああああ.ああ あああああ.ああああああ.ああああああああ.あああああ.あああ.あああああ.ああああ.ああああああああ.ああああああ.あああああ あああ.あああああ.あああああああ.ああああああ.あああああ.ああああああああ.ああああいいいいいあ.jp
— ふくまち (@tfukumahi) 2021年11月16日
Twitterのサービス側で、怪しいURLを弾くような処理が行われている模様。適宜英数字をまぜたら通るのかどうかなど*8、検証の余地はあるけれども疲れたのでもう終わり
関連記事↓ fukurami.hatenablog.com
*1:日本語の場合
*2:https://developer.twitter.com/en/docs/counting-characters
*3:両方で試したが結果は一致したので、以下「ブラウザ」とのみ表記する
*4:さらに、念には念を入れて生成時と開いた時にURLのハッシュ値(SHA-256)を表示している。URLが途中で切れていたりURLの文字列が変わっていればハッシュが合わないので判別できる。なお、以下の検証においてツイート可能だった分については、生成時と開いた時のハッシュはすべて一致した。
*5:ちなみに、4089文字のURLだけを貼った時の残り文字数欄は「-1904文字」。削らなければいけないのは1904文字ではなく1文字だし、1904文字削ったところで2185文字もあるのでカウントが謎。
*6:ちなみにt.co以外の短縮サービスではどうなのかというと、bit.lyは2048文字が上限だった。短縮できた最長のものは→https://bit.ly/3qLwRwz
*7:ここのカウントではpunycode変換等は考慮されていないようだ。
*8:例えば実在しないドメインを弾いているのでは?と思って末尾を「...あああああ.google.com」にしたところ、あえなくNG。