Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
294 lines (223 sloc) 19.4 KB

シェルスクリプト製Twitter怪人「恐怖!小鳥男」

お前は何者だ?

POSIX原理主義に基づき、シェルスクリプトで組まれたTwitterクライアント怪人だ。

  • 投稿系
    • 投稿(画像・動画、位置情報も添付可能)
    • リツイート
    • それらの取消
    • お気に入り登録、取消
  • ツイート閲覧系
    • タイムライン表示
    • 検索
    • ストリーミング検索
  • ユーザー系
    • フォロー
    • フォロー解除
    • フォロー先表示
    • フォロワー表示
    • 詳細表示
  • ダイレクトメッセージ系
    • 送信(最大10000字、画像・動画、位置情報も添付可能)
    • 削除
    • 一覧表示
    • 詳細表示
  • その他
    • トレンドキーワード表示

と、一通り、いやそれ以上のことができる。

POSIX原理主義集団「秘密結社シェルショッカー」は、これをもってTwitterにはびこる人間どもを洗脳し、世界征服を果たすのだ。ワッハッハ!

動かすのに必要なものその1(ホスト)

  • WebアクセスできるUNIXホスト(これがなくては話にならん)
  • 一部の符号化演算コマンドとして次のうちのどちらか
  • HTTPアクセスコマンドとして次のうちのどちらか

レンタルサーバーなら、大抵のところが要件を満たしているはずだ。

※なに、「それのどこがPOSIX原理主義なのか」だと?

HTTPアクセスコマンドのみならず、2014年にHeartbleedという**巨大なセキュリティーホールをもたらしたOpenSSLにまで手を出して、もはやそれのどこがPOSIX原理主義なのか、**と言いたいわけだなお前たちは。えぇい、黙れ黙れ!

確かにしょっちゅう脆弱性の見つかるソフトウェアに依存しているようではメンテナンス地獄から解放されず、POSIX原理主義の素晴らしさは発揮できん。だが、cURLコマンドやsendmailコマンドに手を出す時に言ったはずだ。

「同等の機能を備えた代替品がすぐに見つかる」、「すぐに乗り換えられる」という状態を担保すべく、利用するにしても基本的な部分だけにとどめるのだ。

と。幸いにしてOpenSSLは、Heartbleed事件の反省から、LibreSSLという同等機能の別実装が登場し、しかも"openssl"という名前まで一緒のコマンドまで用意されているのだ。つまり、片方の実装に何か問題が起こったらもう片方の実装に簡単に乗り換えられることを担保しておる。

それにだ!今回の侵略で利用するTwitter API 1.1やOAuth1.0aがそもそも10年、20年の長きに渡って使えるとも思えん。 だから、Twitterに関してはこれくらいの担保があれば十分なのだよ!

動かすのに必要なものその2(Twitterアカウント)

さてホストの用意の次は、アカウント登録だ。Twitterに投稿もするのだからTwitterアカウントが必要なのは言うまでも無かろう。持っていないのならユーザー登録をするのだ。

そして、そのアカウントに紐づいたアクセスキー(4種類)

  • Consumer Key (API Key)
  • Consumer Secret (API Secret)
  • Access Token
  • Access Token Secret

を手に入れ、小鳥男に設定してやらねばならん。そうしなければ小鳥男はお前のアカウントとしてツイートをすることができんからだ。

これらアクセスキーを手に入れる方法は2通りある。次のどちらかを選んで実行し、発行されたアクセスキーをメモしておけ。

方法1. getstarted.shコマンドを使う(簡単)

こっちは簡単だ。後で説明する getstarted.sh コマンドを実行し、指示に従うだけだ。ただ、途中でWebブラウザーを使ってこの怪人がお前のアカウントを操作することを承認する作業が必要になるがな。

コマンドが正常終了すれば4種のアクセスキーが発行され、小鳥男の設定ファイルへの書き足しまで済まされる(できない場合は書き方が表示される)。至れり尽くせりだろう。

こっちの方法で済ませたいのなら小鳥男のプログラムをダウンロードするまで何もせんでよい。さっさと次へ進むがよい。

方法2. Twitterアプリケーション登録をする(b*.shコマンドも使いたい場合)

1つ目の方法だと、すべてのツイートメッセージは"Kotoriotoko (production model)"というアプリがしたという扱いなる。また、アクセス頻度制限を緩和するb*.shコマンドも使えない(実質役に立たない)。それがいやなら自分でTwitterアプリケーション登録をして自力でアクセスキーを発行することだな。

ただ2015年あたりから審査が厳しくなりおった。実在証明のためにSMSを受信できる携帯電話が必要だから気を付けることだ。我々のような秘密結社を阻止しようということかもしれんが……、小癪な真似をしおって。そんなもの我々には無力だ!

ハウ・トゥ・インストール

では、怪人を起動するまでの方法(インストール)を教えてやろう。

0) cURL,Wgetや*SSLがなければインストール

先程言ったように、この小鳥男(プログラム)を動かすには、cURLまたはWget、そしてOpenSSLまたはLibreSSLが必要だ。もし、無いならインストールし、コマンドにパスを通しておくのだ。パッケージだろうとソースからmakeだろうと構わんし、設定もデフォルトのままで構わん。

1) GitHubからgit clone

そうしたらまずは、このリポジトリーをgit cloneせよ。「まずは」というかそれでインストールはおしまいだ!あとは設定のみ。

$ cd <適当なインストールディレクトリー>
$ git clone https://github.com/ShellShoccar-jpn/kotoriotoko.git

もしgitコマンドが使えない場合は、このリポジトリーのzipファイルをダウンロード、展開し、その中の"BIN"と"TOOL"と"UTL"ディレクトリー内の各ファイルに実行パーミッションを与えるのだ。

$ cd <適当なインストールディレクトリー>
$ wget https://github.com/ShellShoccar-jpn/kotoriotoko/archive/master.zip
$ unzip master.zip
$ chmod +x kotoriotoko/BIN/* kotoriotoko/TOOL/* kotoriotoko/UTL/* kotoriotoko/APPS/*.sh

2) 設定ファイルにアカウント情報を書き込む

残りは設定作業だけだ。インストール前のTwitterアカウント発行で、「方法1」「方法2」のどちらを選択したかですべきことは変わる。

「方法1」を選択したのなら次のようにしてBINディレクトリーの中のgetstared.shを実行して、指示に従え。"Enjoy now!"とメッセージが出るまで進めば完了だ。

$ cd <小鳥男のインストールディレクトリー>/BIN
$ ./getstarted.sh

「方法2」を選択していたり、getstarted.shで"Enjoy now!"ではなく"Almost Finish preparing"と表示されたのなら次の作業をしろ。

まず"CONFIG"ディレクトリーの中にある"COMMON.SHLIB.SAMPLE"というファイルを同じ場所に"COMMON.SHLIB"という名前でコピーし、

$ cd <小鳥男のインストールディレクトリー>/CONFIG
$ cp COMMON.SHLIB.SAMPLE COMMON.SHLIB
$ vi COMMON.SHLIB

この中身に、自分のアカウント名(ログインID)+用意(またはgetstarted.shで表示された)したTwitterの4つのアクセスキー(計5つ)を書き込むのだ。

            :
            :
######################################################################
# My account info
######################################################################

readonly MY_scname='hogehoge'
readonly MY_apikey='1234567890123456789012345'
readonly MY_apisec='12345678901234567890123456789012345678901234567890'
readonly MY_atoken='1234567890-123456789012345678901234567890123456789'
readonly MY_atksec='123456789012345678901234567890123456789012345'
            :
            :

5つのコードは、それぞれだいたいこれくらいの長さになっているはずだ。あまりにも違うようならもう一度確認しておくがいい。

追加の設定(b*.shコマンドを使いたい場合)

例えばテレビ番組で「特定のハッシュタグを使ってツイートしてください」などといい、物凄い密度でツイートが集まることがある。そういったツイートを全部かき集めて分析し、侵略計画を策略するのに役立てたい者もお前たちの中にはいるかもしれん。しかし、例えば検索コマンドなどは通常の認証方法では最大で5秒あたり1回の頻度(厳密には15分に180回まで)というアクセス制限がある。しかも、1回あたり最大で100ツイートしか取れん。これでは、ツイートをかき集めるには心もとないな。

そこで、このアクセス頻度制限が緩和される b*.sh というコマンド群を用意した。例えば btwsrch.sh なら、今まで最大で5秒あたり1回の頻度(厳密には15分に180回まで)でしか検索できなかったものが、2秒あたり1回の頻度で検索できるのだ。だが、これらを使うにはもう一つ追加の設定作業が必要だ。

1) 「方法2」でアクセスキーを作り直す

小鳥男の設定ファイルCONFIG/COMMON.SHLIBにはそこで発行されたConsumer Key (API Key)、Consumer Secret (API Secret)を設定しておかねば使い物にならん。なぜかだと?btwsrch.shを含むb*.shコマンド皆、お前たちのユーザーアカウントではなくアプリケーションに対して設定されたアクセス制限を受ける。小鳥男デフォルトのアプリケーションは他に誰が使っているかわからんからな。そいつらと共にアクセス頻度の制限を奪い合って、結局使い物にならんからだ。

だからアクセスキーの用意のところで「方法1」を選択していたのなら、「方法2」でアクセスキーの発行・設定をやり直してこい。

2) ベアラートークンを取得し、設定する

btwsrch.shを含むb*.shコマンドを使うには、小鳥男の設定ファイルCONFIG/COMMON.SHLIBにTwitterアプリケーションのベアラートークン文字列を設定せねばならん。

それを取得したければgetbtwid.shコマンドを実行するのだ。次のように打ち込めば目的のベアラートークン文字列が発行される。

$ cd <小鳥男のインストールディレクトリー>/BIN
$ ./getbtwid.sh
readonly MY_bearer='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012'

Write the variable into COMMON.SHLIB.
And you can use btw* commands.
$ 

これを、COMMON.SHLIB ファイルに追加せよ。 readonly MY_bearer= という文字列ごと COMMON.SHLIB に貼り付けるのだ。

つかいかた

まずは、インストールされたTwitterクライアント怪人のディレクトリー構成を見よ!これを見れば、もうだいたいの使い方はわかるだろう。BINディレクトリーの中にあるのが、怪人を動かしてTwitter民を侵略するためのプログラムだ。

ファイル・ディレクトリー構成

.
|-- README.md ................ このファイル
|
|-- BIN/ ..................... Twitterコマンド群(普段使うのはこの中)
|   |
|   |-- getstarted.sh ........ アクセスキーを取得する(インストール時に実行する)
|   |
|   |-- tweet.sh ............. 与えられた文字列でツイートする
|   |-- retweet.sh ........... 指定されたツイートをリツイート
|   |-- deltweet.sh .......... 指定されたツイート・リツイートを削除
|   |-- twmediup.sh .......... 指定されたメディアファイル(画像等)をアップロード
|   |                          (tweet.shで画像付ツイートをする時のサブコマンドでもある)
|   |-- twvideoup.sh ......... 指定された動画メディアファイル(MP4)をアップロード
|   |                          (twmediup.shでMP4動画を指定された時のサブコマンドでもある)
|   |
|   |-- twview.sh ............ 指定されたツイートの詳細を表示する
|   |-- twtl.sh .............. 指定されたユーザーのタイムラインを表示する
|   |-- twsrch.sh ............ 指定された文字列で検索する
|   |-- retwers.sh ........... 指定されたツイートをリツイートしたユーザー一覧を表示する
|   |
|   |-- twfav.sh ............. 指定されたツイートをお気に入り登録する
|   |-- twunfav.sh ........... 指定されたツイートのお気に入りを解除する
|   |-- favtws.sh ............ 指定されたユーザーのお気に入りツイートを表示する
|   |
|   |-- twfollow.sh .......... 指定されたユーザーをフォローする
|   |-- twunfollow.sh ........ 指定されたユーザーのフォローをやめる
|   |-- twfer.sh ............. 指定されたユーザーのフォロワーを表示する
|   |-- twfing.sh ............ 指定されたユーザーのフォローユーザーを表示する
|   |-- twusers.sh ........... 指定されたユーザーの情報を表示する
|   |
|   |-- getbtwid.sh .......... 高頻度APIアクセスコマンド(btw*.sh)用のIDを取得する
|   |-- btwsrch.sh ........... 指定された文字列で検索する(ベアラートークンモード*1)
|   |-- btwtl.sh ............. 指定ユーザーのタイムラインを表示(ベアラートークンモード*2)
|   |-- bretwer.sh ........... 指定ツイートのretweet者一覧を表示(ベアラートークンモード*3)
|   |                          *1 通常5秒あたり1回までの制限頻度が2秒あたり1回まで短縮可能
|   |                          *2 通常5秒あたり1回までの制限頻度が3秒あたり1回まで短縮可能
|   |                          *3 通常1分あたり1回までの制限頻度が15秒あたり1回まで短縮可能
|   |
|   |-- stwsrch.sh ........... 指定された文字列で検索する(ストリームモード*4)
|   |                          *4 アクセス制限無しの究極の検索コマンド(ただし英数字のみ)
|   |
|   |-- twplsrch.sh .......... 指定された文字列でTwitter上の位置情報を検索する
|   |-- twtrends.sh .......... 指定された場所のトレンドキーワードを表示する
|   |
|   |-- dmtweet.sh ........... 指定された相手に与えられた文字列でダイレクトメッセージ送信
|   |-- deldmtw.sh ........... 指定されたダイレクトメッセージを削除する
|   |-- dmtwview.sh .......... 指定されたダイレクトメッセージを表示する
|   `-- dmtwlist.sh .......... 送受信済のダイレクトメッセージを一覧表示する
|
|
|-- CONFIG/ .................. 設定ファイル置き場
|   |
|   |-- COMMON.SHLIB ......... 共通設定ファイル
|   |                          ・Twitter APIのキーやアクセストークン等を書き込む
|   |                          ・下の ".SAMPLE" ファイルをコピーして作る
|   `-- COMMON.SHLIB.SAMPLE .. 共通設定ファイルのテンプレート
|
|
|-- TOOL/ .................... シェルスクリプト開発用コマンドセット "Open usp Tukubai" の一部
|   |                          ・だたしここに置いてあるのは、POSIX環境に移植したクローン
|   |
|   |-- calclock ............. 日常日時―UNIX時間変換コマンド
|   |                          ・Twitter APIからUTC日時で返す日時をJST日時等へ変換するのに利用
|   |                          ・Twitter APIが要求する、現在日時のUNIX時間表現の生成に利用
|   `-- self ................. 列抽出コマンド
|                              ・self 1 3 5 は、awk '{print $1,$3,$5}'と同じ
|                              ・可読性のために利用
|
|-- UTL/ ..................... その他、自作シェルスクリプト製コマンド置き場
|   |
|   |-- urlencode ............ URLエンコーダー
|   |                          ・Twitter APIが要求するURLエンコード済文字列の生成に利用
|   |-- parsrj.sh ............ JSONをシェルスクリプト向けに正規化するコマンド"PARSeR-Json"
|   |                          ・Twitter APIが返すJSONの解読に利用
|   |-- unescj.sh ............ エスケープ表現されたJSON中のユニコード文字を元に戻すコマンド
|   |                          ・日本語ツイートがこれで読めるようになる
|   |                          ・Twitter APIが返すJSONの解読に利用
|   `-- mime-make ............ MIMEマルチパート作成作成コマンド
|                              ・画像ファイルをTwitterサーバーにアップロードする時に利用
|
`-- APPS/ .................... 小鳥男のコマンド(BINの中)を応用した各種サンプルシェルスクリプト
    |
    `-- gathertw.sh .......... 指定キーワードを含むツイートを収集するコマンド
                                ・REST API反復呼出しによるツイートの連続自動収集を行う
                                ・リアルタイム検索も可能(疑似的に)
                                ・しかもStreaming APIでは不可能な日本語キーワード指定可
                                ・しかもStreaming APIでありがちな輻輳時データ間引きもなし
                                ・[詳しい使い方はここ](APPS/gathertw.md)

詳細な使い方は省略するが、各Twitterコマンドの書式が知りたくば"--help"オプションを付けて実行してみるがいい。それでだいたいわかるはずだ。

なぁに大丈夫だ、間違っても大したことないからいろいろ試してみるがいい。大変なことになるとしたら、周到な準備無しに殺人予告や爆破予告をツイートするくらいなものだ。まぁ我々組織としてはそういう使い方は大いに歓迎だがな、フハハハ……。

さぁお前たちもこの怪人を操作してTwitter民たちを炎上させ、世界征服を目指すのだ、ゆけぃ!

ライセンス

何、ライセンスだと?愚問だな。似るなり焼くなり売るなり改造するなり、好きにするがいい。我々のような秘密結社だろうが何だろうが誰でもだ。 この意味がわからぬか?完全なるPUBLIC DOMAIN (CC0)という意味だ。

ただ、一つだけ憶えておくことだ。使い出した瞬間、それはお前たちは我らに洗脳されたということだ。ワッハッハ!