まったりいんふぉまてぃくすめもらんだむ

主にプログラミング関係のメモに使うかもしれないしそうでないかもしれない

Pythonによるe-amusementログイン処理

実は僕はBEMANIユーザーでして、その中でも特にDrummaniaを愛好しています。しかしその最新作であるGITADORA Drummania、これがとんでもない駄作でユーザ離れによる開発終了もありえるんじゃないかと悲嘆にくれるここ最近。

まぁそれに関しては本題ではないのでおいとくとして、駄作である所以のひとつが隠し曲のソーシャル解禁。PCサイトスマートフォンのアプリ(!?)から解禁したい曲のライブ(チーム)に参加し、ライブメンバーみんなで筐体でプレーしたりギタドラとは全く関係ない上にクソつまらんミニゲームスマホでちまちまやったりしてポイントを貯め、達成率が100%になるとライブが成功、解禁が進むというしちめんどくさい仕様である。

ところでこのライブにはidが振られていて、URLをいじると人数制限に達していなければ好きなライブに加わることができる。つまり、達成率が既に100%に近いライブを見つけ出しておこぼれを頂戴していけば楽に解禁が可能になるというわけだ。ということで、Pythonを使ってライブ情報をPCサイトから取ってきてこの目的を達成しようと試みたので以下そのメモ。

PCサイトでは当然KONAMI IDでのログインが必要なんだけど、そこの処理にけっこう手こずった。「Python ログイン」あたりでいろいろググると、はてなとかニコニコとかe-amusement(KONAMIのアケゲのポータル)とかいろんなところにログインする記事が見つかって、どれもクッキーを管理するcookielibを使ってログインURLにusernameとpassword投げればいけるよーみたいなノリだったんだけど、試してみてもログイン前のページしか取得できずどうもうまくいかない。で、フォームからのログインってサイトごとに細かい手順とか違うんだろうなーとか思いつつ「python フォーム ログイン」でぐぐったりしてると、こんな記事を見つけてこれが解決の糸口になりました。

認証付き&要クッキーのサイトにログインする - Jinmenの日記

フォームのhiddenなinput要素をちゃんと見る必要がある、と。で、firebug使ってHTMLソースと照らし合わせたりブラウザでログイン手順を踏んだときのアクセスの流れとかPOSTのパラメータの中身とかを観察し試行錯誤した結果、以下のようにして無事ログイン先にたどり着くことができました。

以下のソースは当然GITADORAサイトの場合なので、他のサイトでログインうまくいかねえなぁというときは実際にアクセスしてるURLとかPOSTのパラメータとかちゃんと見るといいかも。

"""
ログインURL.最近KONAMIはkiwiというところにe-amusementの認証まわりを任せるようになったらしい.単純にここにusernameとpasswordを投げるだけではダメだった
"""
url_base = "https://ssl.eagate.kiwi.jp/auth/login.php"

"""
謎のURL.GITADORAサイトからkiwiへの認証を行うときのURLのクエリ文字列やPOSTのパラメータにはこれが含まれてた.gitadoraという文字列が含まれてるのでこれを使えばGITADORA用の認証が行えるという感じ?
"""
rturl = "/app/regist.php?app_id=9004&accept=1&select_thumbnail=0&rturl=%2Fapp%2Fregist.php%3Fapp_id%3D37%26accept%3D1%26select_thumbnail%3D0%26rturl%3D%252Fopensocial%252F37%252F%253Furl%253Dhttp%25253A%25252F%25252Fgitadora.573.jp%25252Fapg%25252Fservlet%25252Fgitadora%25252Fentry%25252Flogin_check"

# POSTのパラメータ.firebugで見た
post_params = {"username": "hogehoge",
               "password": "fugafuga",
               "otp_password": "",
               "method": "konami_id",
               "level": "1",
               "rturl": rturl}

# URLのクエリ
url_params = {"dmk": "1",
              "rturl": rturl}

url_login = url_base + "?" + urlencode(url_params)

# openerの設定.LWPCookieJarというのを使ってる記事もあった
cj = cookielib.MozillaCookieJar("cookies.txt")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

res = opener.open(url_login, urlencode(post_params))

print res.read()

ログインできればあとは簡単で、BeautifulSoupで必要な部分だけ取り出して表示してやれば最終的に

こんな感じ。

ログインまわりの処理について学ぶいい機会になりました。ありがとうGITADORA(クソゲーだけど)