Twitter巡回を超・高速化してみた：忙しい皆様へ

#最初に：開発に至るまで
**※このセクションに技術的な情報はありません。お急ぎの方は次のセクションからお読みください。**

　平日にはTwitterを触らない。時間の無駄だから。
　僕はTwitterをかなり愛用している。Twitterは現代日本の「リアルタイム」を教えてくれる情報源の一つとして注目している。
　とはいえ無計画な使い方は避けたい。Twitterは一度油断すればそのコンテンツ力をもって生活をあっという間に飲みこんで行く。
　そこで僕はTwitterのまとめ読みを検討し始めた。気づけばスマホを見ているなんていう悪癖を覚えてしまうよりも、Twitterは週末にまとめてチェックすることにして平日は目の前の物事に集中したり本を読んでいたほうが時間の効率も仕事の質も良いに決まってる。そして何よりも自分自身がスマホをやめられないことにうんざりしていた。
　そうして一念発起した僕はTwitterを見る代わりに本を読むようになり、晴れて僕はTwitterとうまく付き合えるようになった……はずだった。（次セクションに続く）

#開発の動機
Twitterにはありとあらゆる情報が共有されます。お使いの方も多いでしょう。僕は週末にまとめて読むようにしています。
しかしタイムラインをそのまま7日分も遡るのは、実際には無理があります。下にスクロールするには、僕のかつてのフォロー人数(30名強)でも4,5日が限界。それ以降はブラウザが読み込んでくれません。
とにかく、公式のUIはまとめてウォッチしたい人のためには作られていないのです。

でも時間がとにかく足りない僕という時間的貧者には、スキマ時間を更新されているのかもわからないタイムラインの確認に捧げるのは耐え難い苦痛です。そういうわけで、幾ばくかの試行錯誤を経て、最終的に以下のまとめ読みのためのPythonスクリプトを書くに至りました。

#Python Script
python3.7
必要なライブラリは`bs4` 
直接にはHTMLファイルを入力にHTMLファイルを出力するスクリプトとして機能します。

```Python
from bs4 import BeautifulSoup as bs
import codecs

with codecs.open("input.html",encoding="utf-8",mode="r",errors="ignore") as f:
    raw_html=""
    for _f in f.readlines():
        raw_html+=_f

follower_list_raw = bs(raw_html)
links=follower_list_raw.find_all("a", attrs={"aria-hidden":"true", "tabindex":"-1" })

links = [str(links[2*n]["href"]) for n in range(int(len(links)/2))]

html = ""
a_part = '<a class="twitter-timeline" data-width="400" data-height="600" href="'
b_part = '?ref_src=twsrc%5Etfw">This timeline may be private...</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>'
for link in links:
    html += a_part + str(link) + b_part
with open("output.html","w",encoding="utf-8") as f :
    f.write(html)
```

#使い方


>
アカウント毎の小さなタイムラインが、ひと目にズラリと並びます。
https://photos.app.goo.gl/7UvUwn7pARHYtib27



上記スクリプトを好きな場所に保存し、次に同じフォルダ（/ ディレクトリ）に、[ご自身がフォローしているTwitterアカウントのリスト](https://twitter.com/following)を保存してください。



**保存の手順（ショートカットキーはWindows PC, Chromeでの操作）**

1. まずは[Twitterのフォロー一覧](https://twitter.com/following)にアクセスしてください。
2. すべてのアカウントがロードされるまで、下にスクロールし続けます。
3. Ctrl + Sを押してウェブページの保存ウィンドウを開きます。
4. 保存場所をPythonファイルと同じフォルダに設定し、 `input.html` という名前で保存してください。
5. このとき、「ファイルの種類」を**ウェブページ、完全**にしてください。ウェブページ、HTML のみの設定だと正しく動作しません。



そしてスクリプトを実行すれば、同じフォルダに `output.html` が生成されます。
あとはそれをお使いのブラウザで開くだけです。


#特徴
上記Python Scriptの生成する `output.html` の主なメリットは、以下を同時に達成することです。

- **軽快な動作**
 - 40程度のアカウントならば、動作のもたつきはほとんど気にならないはずです。
- **フォローの同期が楽**
 - input.htmlの更新とスクリプトの再実行で済みます。
 - 新しくフォローしない間はoutput.htmlを使い回せます。
- **閲覧しやすい**
 - 利用方法はブラウザでファイルを開くだけです。
 - 一覧性も高く、タブを切り替えたりリンクに飛んだりする手間も最低限に抑えられています。もちろん一週間程度遡るのに不便はまったくありません。
- **いいねとRTがその場でできる**
 - ただし、RTはコメントをつけられないという制約はあります。^^;
- **画像プレビュー機能**
 - ただし、複数枚の画像が一つのツイートに含まれる場合は、Twitterのリンクに飛んでから見ないとつらいです。

主な欠点は以下の通りです。

- **スマホでは閲覧できない**
 - ただ週末に一度しか閲覧しないので、別にスマホで閲覧できなくても気になりません。笑
- **同期に若干の手間が残る**
 - これも1と同様の理由で気になりません。
- **そもそもPython実行環境がないと利用できない**
 - これはちょっと気になります。ぜひともみなさまのTwitterライフに貢献したい（Twitterの使い方を見直す機会にもなればなおよい）ものですが、非プログラマの方々にはちょっとハードルが高いですよね。
 - 今後はLINE Bot化を模索するなどして対応してみたいです。アイデアがあればご教示くださいませ。
- **他人の「いいね」が流れてこない**
    - 欠点なのか利点なのかの判断はおまかせします。

Twitterのまとめ読みに関して、他にも以下の手法を検討しました。

- **IFTTT**を介して、投稿を逐次Slackに蓄積しておく
 - 設定の更新に手間がかかります。その上、いいねやRTもその場ではできない、画像のプレビュー機能もないというUI上での大きな欠陥を抱えていました。
 - スマホで見れるのはこの手法の利点ですね。
- 上記と同様の手法で取得したリンクについて、それらを別タブ（または別ウィンドウ）で開く**JavaScript を生成するPython Script**を書く
 - そもそもブラウザのタブやウィンドウを量産する(フォロー中のアカウント数だけ生成する)ため計算リソースを大食いし、軽快な動作は望むべくもありません。その欠点があまりに深刻だっため、すぐに諦めました。
 - スマホでの実行は試していませんが、結局同じだと思います。


#このスクリプトは一体何をしているの？
HTMLファイル(input.html)をパース（構造分析）してURLを抽出し、それをひとつひとつHTMLの埋め込みスクリプトに当てはめ、連結して、HTML(output.html)として書き出しています。

Twitterのフォロー一覧ページのHTML構文は一定でパースは簡単だろうなと最初から思っていて、そこでTwitterの publish.twitter.com から埋め込みHTMLコードも極めて単純な構造をしていることに気づいたので、こうなりました。

典型的なスクレイピングですね。ただし、ネットにアクセスする部分は手動で行っているので、「ウェブ」スクレイピングではありません。手間がかかるのは欠点でもありますが、同時に各所の規約に違反しないという利点でもあります。ただし、万が一抵触していたとしてもちろん責任は取れませんのでご理解ください。当然犯罪を助長する意図もございませんので、あしからず。

技術的な話は以上です。
それでは皆様、よきTwitterライフを。やりすぎにはくれぐれもご注意ください。

# 最後に：時間的貧者はTwitterをボトル買いせよ
　そもそもの「Twitterは週末だけにしよう」という発想は、
>アフリカでは、ボトル入りのシャンプーよりも、割高な使い切りシャンプーのほうがよく売れる。なぜなら、みんなその日の暮らしに必死で、単価の高いボトル入りシャンプーを買うことができないから。そうして彼らはより多くの出費を強いられ、ますます貧困からの脱出が難しくなっていく。

という話をTwitterで見たところから始まり、

>あれっ、このまとめ買いの原理は現代日本人のTwitterの使い方にも当てはまるんじゃね？

という気づきから発展してきた。もちろんこのコードもその文脈にある。
　つまり、週末にまとめて時間を支払い、一気にTwitterを見る（購入する）ことをせず、（まとめて見たほうが効率がいいのは明らかなのに）日常生活のなかで少しずつ時間を支払ってちょっとずつTwitterを見て（購入して）いる。アフリカでの「お金 - シャンプー」の関係が日本での「時間 - Twitter」の関係とよく類似している。SNSのためだけに週末の貴重な数時間を割けるかどうかという余裕と決断力の重要性に気づけないでいると、時間的貧者に転落してしまう。そのことがますますSNSの使い方を制限し、ますます時間的貧困が深刻になる。逆に日々のSNSの時間をまとめる事ができれば他人よりも時間をうまく使えるようになり、そのことがさらなる余裕を生むのではないか。人の3倍働きたい僕がこの思想を具体化しようとした結果生まれたのがこのScriptというわけだ。
　まぁ結局Twitterのやりすぎで時間を浪費するのは良くないよねってことでしかないんだけど。笑
　僕はプライベートもビジネスも関係なしに時間コストを圧縮し人の3倍働きつつ現代日本のデジタル・ネイティブ世代をも謳歌しその先の世界に思いを巡らしながら人類と日本に貢献していきたいのだ。
　忙しい皆様には、ぜひTwitterをボトル買いしてみてほしい。