« ローカルチケット管理ツール | メイン | 自前広告エディタ »

2014年07月15日

1時間コーディング:: Amazon 購入履歴ダウンローダ

    

何度かバージョンアップしているので、ダウンロードページ分離しました。

Amazon 購入履歴ダウンローダのページ

ダウンロードや使い方などは、リンク先を見てください。

にしても、1時間コーディング 2回目にして全然1時間で終わらず。
6時間くらいかかってしまった。
完成したものは、1時間程度の出来なので、最初の実装方法の選択ミス。

最初は IE でログインして HttpWebRequest を使って履歴をダウンロードしようと思っていたんだけど、どうもクッキーは IE と別なようでログイン状態にならなかった。
今まで他で WinInet だと IE でログインすれば、そのままログイン状態になっていたので、同じようにできると思っていたが出来ず失敗。
ログイン処理を自分で書くと1時間で終わらないこと確定。
ブラウザと同じようにすればログインできるんだけど、これが色々と難しい。
仕方なくログイン処理を実装しようとしたがうまくいかず。
もう一歩何だが何かが足りず。

時間かりそうだからあきらめて次に WinInet を使う方法を試すことに。
wininet.dll のメソッドを呼んでダウンロードするもログインできてない。
少し試したがダメっぽい。
この方法もあきらめて、wininet.dll で IE のクッキーを取得して、HttpWebRequest へそのクッキーを渡してログイン状態を維持する方法を試したが、これもうまくいかず。
だいたいはクッキーのセッション情報を渡せばそのままログイン状態になるんだけど、Amazon はそうはならず。
もうちょっと頑張れば何が原因かつかめそうな気もしたけど、時間かかるからさっさとあきらめて別の方法へ。

結局ブラウザを埋め込んで、そこでログインしてもらって HTML データを取得する方法にした。
自動で次々に読み込む方法にしようかとも思ったが、セミオート方式にした。
そして終わってみると6時間くらいかかっているのである。

今回のことでよくわかるのは、実装方法の選択によって実装時間が大きく変わること。
今まで WinInet + perl or C++ などで IE でログインして、その後ツールでデータ取得と言う方法をよく使っていたので、同じようにしたらすぐにできると思っていたのが間違いだった。
今後は今回の方法と今までの方法のどちらかうまく行く方を選択して使えるので、時間短縮できそう。
ログインできなかった理由を完全に解明すればもっと役立つかもしれないが、Amazon が何か凝ったことをやっているんだろう。
通信のヘッダーやパケットを観察すればできそうだが……
ブラウザの http 通信のログとか見て色々とやっているところは見た。
本気で作る気になったら頑張る。



投稿者 Takenori : 2014年07月15日 14:11




comments powered by Disqus
Total : Today : Yesterday : なかのひと