BMS, Movie, Illustrations, Programming

[Linux] bashからTwitter webにログインした、という日記

方針

ここ ( http://qiita.com/uedatakeshi/items/4660dfda727315b21f12 ) にある通りにログインをすれば出来そうです。

POSTするパラメータを調べるには、Chromeの開発者ツールを使いました。画面上の方の、 Preserve Log にチェックを入れておくと、ページが遷移してもログが残るため便利です。


というわけで

Chromeの画面に表示されている通りのパラメータをPostしてあげればOKです。2017/08/16 現在のパラメータは次のとおりでした。

session[username_or_email] ユーザーネームまたはメールアドレス
session[password] パスワード
authenticity_token hiddenフォームに埋め込まれているトークン
ui_metrics 不明。無くても良いっぽい。
scribe_log 不明。空文字列。
redirect_after_login 恐らくログイン後のリダイレクト先。空文字列。
remember_me ログインを記憶するかどうか

ですので、最初に https://twitter.com/login にアクセスして認証トークンを取得し、そのトークンを用いて https://twitter.com/sessions にこれらをPOSTするとログインできます。

まずは login.html を取得。クッキーも保存します。

wget --keep-session-cookies --save-cookies=cookies1.txt -E https://twitter.com/login -O login.html

認証トークンは login.html に埋め込まれているので、 grep を用いて抽出しました。

token=`cat login.html | grep -oP '(?<=name="authenticity_token" value=").+?(?=")'`

この認証トークンと、ID、パスワードを用いてログインします。

wget --keep-session-cookies --load-cookies=cookies1.txt --save-cookies=cookies2.txt -E --post-data="session[username_or_email]=【URLエンコードされたユーザーIDまたはメールアドレス】&session[password]=【URLエンコードされたパスワード】&authenticity_token=$token&ui_metrics=&scribe_log=&redirect_after_login=&remember_me=1" https://twitter.com/sessions -O sessions.html

ログインが出来たら、得られた cookies2.txt を用いて、好きなページを取得することができます。

wget --keep-session-cookies --load-cookies=cookies2.txt -E https://twitter.com/i/notifications -O notifications.html