近デジ PDFで全部ダウンロード やや自動編

 さて、同じコトを考えてる人や実際にやってる人もいるので、何を今更車輪の再発明なのだが、前回テストした内容を一連で実行する簡単なテストプログラムを実装してみる。

 まず何で作るかであるが、Windows環境であまり面倒無く動いて欲しいのと、余り詳しくないC#の勉強方々、C# (.NET 3.5) を選択してみた。

 ざっくり仕様は以下の通り。バカみたいにプリミティブ。
  1. コマンドラインで実行する。
  2. コマンドライン引数としてPIDと書き込み先のディレクトリ(、必要に応じてプロクシのURL)を指定する。
  3. PIDによって近デジのビューワ画面にアクセスし、最終コマ数を取得する。
  4. 1から最終コマまで10コマずつ、ダウンロードのGETリクエストを発行し、戻ってきたのが"application/pdf"だったら、引数で指定したディレクトリに固定のファイル名(PIDと開始・終了コマ)で出力する。ただし、同じ名前のファイルが既にあったら、二重ダウンロードしないためダウンロードをスキップする
  5. ファイルに出力したら、30秒間スリープする

 元々の力不足に加え何も考えずにダァーっと書き下してしまったので、ヒドいコード(ホントにヒドい。つーか勉強の為と思ってC#を使ったが、あんまり勉強になってない)だが、とりあえず意図通り動くことは確認できた。

 以下は、実行時の画面のキャプチャである。
c0071416_17402865.jpg

 結果、ディレクトリにはこのようにPDFが取得できた。
c0071416_1740406.jpg

 で、作ってみた感想なのだが。
  1. 予想通りとはいえ30秒のスリープは、やはり待つ身にはしんどい。
     そこそこのPC+回線状況で49コマ取得するのに2分17秒かかっているが、都合4回スリープしてるので、その内2分、処理時間の87%はただ寝てるだけで何もしていない(笑)
     前回も書いたとおり、もう少し何とかできる余地がないわけではないが、そーゆーことは考えないことにした(爆)。

  2. Cookiesはサーバから渡されるが、何に使うものか判らないので、今のところダミーで受け取るだけにしている。
     動作的には問題ないように思えるが、ホントは解析が必要なのだろうな。

  3. エラー処理に代表されるステータス管理の部分が真面目に作ったら面倒そう。
     サーバがヘッダにセットしてくる"Reason"などのヘッダの値を使うのかもしれないが、今のところ良くわからないので、処理した結果返ってくるtext/htmlを解釈する必要があるのだろうが、このテストプログラムではいっさいネグッて、単にエラーとして読み捨てている。

  4.  気が向いたらPDFの結合まで自前でやってみたくなるかもしれないので、文書名や著者名などもいちおう取得してみたが、今は使っていない(画面に表示するだけ)。
     PDFの結合処理などはiTextみたいな便利なライブラリがあるので、そんなに大変ではないのはわかってるのだが、今は気が向いてないので放置。
     で、この辺の文書情報も仕方なくHTMLを読んで取得しているが、APIとしてサポートするべきだと思う。

 まとめると、やはり根本的には近デジがいわゆるWeb API的な設計ではないことはやはり問題だと思う。

 そのうちに海外の同種のサービスと比べられて、みんな侘しいキモチになりそうなので、次回リファインの際にはこのあたりガンバッてもらいたいものだ。

 つーかその前に10コマ/30秒制限の撤廃を希望。

 …ということで、ものすご~くニッチな用途だしテスト用(俺個人用)だし、酷いバグが残っていることが確実(ぉい)なので、公開は控えておくが、欲しい人いるかなぁ?

 とりあえず、コメント付いたら考えることにする(^^;)
[PR]
by signal-9 | 2012-07-11 17:44 | TIPSとかKludgeとか | Comments(0)
<< 近デジ PDF一括ダウンローダ... 近デジ PDFで全部ダウンロー... >>