URLを使ったTwitterのツイート文字数制限を超過した長文投稿方法

*注意: 内容は正確とは限りません. あくまでメモです.*
*同内容のgistは[こちら](https://gist.github.com/eggplants/454e12f37843f815eb5408f2c35cb447).*

## 何？

Twitterの1ツイート280byte制限を超えた情報を持つツイートを, 文字のみで最大約40KBほど表現できる方法についてのメモです. URLはその文字数より少ない文字数カウントが行われることを利用しています. またURLが省略されない長さであれば, みかけ, 通常より長文のツイートが可能です.

また必ずそのURLが短縮されている必要はありませんが, シェル芸botなどでは短縮URLの方が有利に働くので短縮URLを利用しています. 編集時スッキリするのでオススメです.

## 応用(嬉しいこと)

[シェル芸bot](https://twitter.com/minyoruminyon)は投稿文字数に制限があるので短い内容で多くの内容がもてるURLのPunyencodeでの表現の方が向いていることがある(?)

例:

<blockquote class="twitter-tweet">
<p lang="und" dir="ltr"><a href="https://t.co/PHGTDPv8OT">https://t.co/PHGTDPv8OT</a><a href="https://t.co/6eBZ32B2OB">https://t.co/6eBZ32B2OB</a><a href="https://t.co/CJQYIB0GFM">https://t.co/CJQYIB0GFM</a><a href="https://t.co/FVYieFbioB">https://t.co/FVYieFbioB</a><a href="https://t.co/aYicaF2FAD">https://t.co/aYicaF2FAD</a><a href="https://t.co/rrioxQ4UEK">https://t.co/rrioxQ4UEK</a><a href="https://t.co/KYMX3M8ksh">https://t.co/KYMX3M8ksh</a><a href="https://t.co/iKK7LYafMb">https://t.co/iKK7LYafMb</a><a href="https://t.co/GFCA2t0cCg">https://t.co/GFCA2t0cCg</a> <a href="https://t.co/AFEHNwuZUQ">https://t.co/AFEHNwuZUQ</a></p>&mdash; シェル芸bot (@minyoruminyon) <a href="https://twitter.com/minyoruminyon/status/1357005348817629188?ref_src=twsrc%5Etfw">February 3, 2021</a>
</blockquote>

これを非URLの平文で投稿しようとしても, 文字数制限により下の数行が切れてしまう.

## 40880+30byte

<blockquote class="twitter-tweet"><p lang="und" dir="ltr">..........,,,,,,,,,,..........,,,,,,,,,,<a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a> <a href="https://t.co/dRxeeRd1L7">https://t.co/dRxeeRd1L7</a></p>&mdash; 明日: ☀/☀/☀/☀/☀/☀/☀/☀ (@egpl0) <a href="https://twitter.com/egpl0/status/1355262357518176260?ref_src=twsrc%5Etfw">January 29, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- Twitterは1ツイート文字数制限280byte(2021年1月現在)
- TwitterのURLはその長さ(最大4088byte)によらず一律23byte
- TwitterのURL短縮`t.co`は`https://t.co/<id>?amp=1`にツイート内URLを置換
- `t.co/<id>`に削った状態でツイートしても表示は変わらない
  - `google.com`の短縮`https://t.co/mCzIVozFEk?amp=1`を`t.co/mCzIVozFEk`にしてツイートしても表示は`google.com`
-  1ツイート最大10URLまで記述可能(ただしURLごとに`[\s\n]`区切り必要)
- これにより`30byte+23b*10URL+10区切り(=280byte)`の記述が可能
  - `30byte+1URL最大4088byte*10URL(=40880+30byte)`の情報量が表現可能

## 文字数制限以上の見かけ長文ツイート

<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/KuAsdSaq39">https://t.co/KuAsdSaq39</a> <a href="https://t.co/l4x30mEQ9n">https://t.co/l4x30mEQ9n</a></p>&mdash; シェル芸bot (@minyoruminyon) <a href="https://twitter.com/minyoruminyon/status/1355258043395530756?ref_src=twsrc%5Etfw">January 29, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

- URLはドメイン部分のホスト名(任意)が64byteまで省略表示(...)回避可能
  - ただし`http://<任意host名>.<存在するtld>`でないとURLがハイパーリンクにならない(`t.co`短縮後ならその限りではない)
  - `http://ああああああああああああああああああああああああああああああああ.みんな/12345678901234`(`https://t.co/o2cORBxhFP`)のように、ディレクトリ部には14byteまで省略表示回避可能
- URLだけで`64byte*10URL(=640byte)`記述可能
- 通常のツイート280byteの約2.285倍の文を表示された状態で投稿可能


## 投稿可能な最長1URLの例

- 以下の短縮URL: `t.co/dRxeeRd1L7`

`http://b.sh/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123`