route127の日記: 13日の気味の悪い拡張子 1
アーケードゲームのステータスを確認する為に公式のAngularJSを使ったWebページを見ていた。
ブラウザ上でボタンぽちぽちせずに一気にデータ取得したかったのでFFの開発者コンソール開いて見てたらJSONとかいう気味の悪い拡張子のテキストデータやり取りしているので、それを横取りしてやろうと色々試したことのメモ。
実際手作業でコンソール上からレスポンスデータをテキスト保存すればうまく行くのだがこれを自動化する為の手を考えていた。
JSONを吐き出すエンドポイントURLは分かっているのだが、普通にアクセスしてもステータス400になってデータを返してくれない。
どうもXHRでアクセスしないといけないようなのだがPerl+FFでどうしたものかと考えていたらstackoverflowに似たようなことを質問している人が居たものの回答は悲観的だった。
stackoverflow質問者が使っているWWW::Mechanize::Chromeは自分も一度インストール試みたが失敗したのであった。
どうもwin環境で使ってる人はいなさそうだし。
そんなわけでPerl+古いFF+Mozreplで試していた。
アイデアとしてはブラウザが実行しているXHRをこちらで模擬すればいいのだからjqueryのajaxメソッドを利用して、またeval_in_pageを利用すればPerlスクリプト中にブラウザの挙動をJSで埋め込める。
ちなみにWWW::Mechanize::Chromeにも同系統のメソッドがあるので同じことが出来るのではないか。
$mech->eval_in_page(<<'JS');
$.ajax({
type: "GET",
scriptCharset: 'utf-8',
dataType: 'json',
url: "/hoge/fuga/info.json",
success: function(res){
res = $.parseJSON(res);
console.debug(res[0]);
},
error: function(){console.log('Failed');}
});
JS
思いついたときは興奮したが、よく考えたら既にありそうなアイデアだと思い改めて検索してみるとWWW::Mechanize::Firefoxの利用例としてのgoogle翻訳のコマンドライン化のソースの中に似たフレーズがあった。
なんとなくやってることはわかるけれど細かいところが理解できてなくてブラウザを介して返ってきたJSONデータを再びPerlで扱うところがいまいち理解できていない。
一旦jqueryからDOMを利用してHTMLに埋め込んでPerlで取り出すとか?
そんな状態で1ヶ月位塩漬けにしていた。
ヘッダじゃなかったかな (スコア:0)
わざわざjqueryでどうたらとかやる必要はありません。
もちろんjqueryのほうが慣れてるとかならそれはそれでいいんですけど。