【検索ジャンパーの方のための追記】
「結局どうなったのか」だけお求めの方は、こちらの記事をご参照ください。 「近デジ」こと「国立国会図書館 近代デジタルライブラリー」は本好きにとってはお宝の山と言えるわけだが。 こういうものはどんどん称揚・翼賛すべきなんであろうが、近年リニューアルされたシステムでも相変わらず、「一冊全部ダウンロード」しにくいのは非常に不満なのである。 元々データ化することが価値であるし、システムもかなりガンバッてリファインしてくれたのは認めるし、「今の時代だったらオンライン閲覧できればいいじゃん」というのはごもっともなのだが、やっぱり一冊纏まったPDFでローカルに持っておきたいというのが人情というモノだろう…って俺だけかもしれないが。 「近デジ」ではPDFでダウンロードする手段は標準でサポートされているが、性能上の理由で
こういう、単純にスケールアウトで解決できるであろう問題は、そんなにバカみたいにカネはかからないはずだと思うのだが、そこはそれ、天下の国会図書館なので、俺のごとき愚民が思いもよらぬような大人の事情がきっとあるのであろう。 ブーブー文句を言ってても仕方がないので、無いのなら作ってしまえホトトギス、とりあえず一冊全部まとめてダウンロードするにはどうしたらよいか、ちょっと調べ始めたわけである。 例として、 「太古日本のピラミッド 酒井勝軍 著 (国教宣明団, 1934)」 をまとめてダウンロードすることを考えてみる。 「なんでよりにもよってそんなヘンな本が例なの?」とかそーゆーことは気にしないように。 (1) PIDを確認する。 ダウンロードしたい文書のPID(つまり文書番号)を調べる。 この番号は、「検索結果」の文書名のリンクを見ればわかる。 http://kindai.ndl.go.jp/info:ndljp/pid/1137942 この一番最後の「1137942」が「太古日本のピラミッド」のPIDである。 (2) 最終コマを確認する。 上のリンクをクリックして、ビューワーが表示されると、その文書の最終コマ数がコマ数指定のドロップダウンの横に表示される。 この値はソースのhtmlでいうと フォーム "form-item-information" の lastContentNo の値なので、自動化する場合はこれを取得すれば良さそうだ。 俺の記憶では、以前は確かオーバしていてもコマ数の終わりまではダウンロードしてくれていた。これはシステム的には改悪と評価せざるを得ない。 この文書の場合、最終コマは49なので、例えば最終ペ-ジまで取得したくて、41-50 と指定するとエラーが発生する。この場合、41-49としなければいけない。 【2012/07/13訂正】 「お知らせ」によれば、 「「印刷する」ボタンによるPDF出力の際、終了コマを省略した場合は上限まで出力するようにしました。とのことだった。記述に気がつかなかった俺の完全な誤認だったので、この直前の段は撤回する。 エラーになると、application/pdfではなく text/htmlを返してくるので、エラー処理を自動にする場合にはresultのcontentsTypeがapplication/pdfであるかチェックするといった方法が必要だろう。 (3) 「印刷」(PDF出力)で行われていることを調べてみる。 ビューワーの「印刷」を使い、1から10コマをPDFでダウンロードする操作で、どのようなリクエストが近デジサーバに行われているのかを見てみると; http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf? pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=1-10 という GETリクエスト であることがわかる(戻りはApplication/pdfのストリーム)。 つまり、 http://kindai.ndl.go.jp/view/pdf/digidepo_【PID】.pdf? pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=【開始コマ】-【終了コマ】 これで、PDFが戻ってくるわけだ。どうやら積極的にクッキーを使っている節もない、単純なGETリクエストである。。 一回のアクセスで最大10コマまで取得できるので、先頭の1コマ目から、49コマを最後まで取得するには; pdfOutputRanges=1-10 pdfOutputRanges=11-20 pdfOutputRanges=21-30 pdfOutputRanges=31-40 pdfOutputRanges=41-49 という5回のGETリクエストを繰り返せばよいようだ。 ただし、一回ごとのリクエストの間は30秒以上空けろ、という条件がある。 「今の時代に30秒間隔ですか!」という悪態はとりあえず飲み込んでおこう。 どのみちこの間隔はサーバ側でチェックされており、短い間隔で3回ほどリクエストすると、エラーになってダウンロードできなくなる。 まあ、この制限を誤魔化す手はいくらも考えられるが、岡崎図書館事件を忘れてはいけない。 いきなり威力業務妨害容疑で引っ張られて拘留取り調べなんてことにはなりたくないので、一回ごとのリクエストには必ず30秒スリープするようにしよう。 コマ数が多い文書だとかなり時間がかかることになるが、そこは我慢である。 (4) テスト。 ここまで判ったことで、実際に問題なくダウンロードできるか試してみよう。 いきなりスクリプトだのプログラムだのを作るのは面倒なので、適当なありもので試してみることにする。 必要なのは、指定したURLにGETを発行して戻りをファイルに保存する何かと取得した複数のPDFをひとつに結合する何か、である。 どちらもフリーウェアで適当なものが入手できるはずだ。 ここでは手前味噌だが、一例として拙作のhttpget.exeを使ってみる。 httpget "http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf?pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=1-10" DUMMY01.PDF sleep 30 httpget "http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf?pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=11-20" DUMMY02.PDF sleep 30 httpget "http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf?pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=21-30" DUMMY03.PDF sleep 30 httpget "http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf?pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=31-40" DUMMY04.PDF sleep 30 httpget "http://kindai.ndl.go.jp/view/pdf/digidepo_1137942.pdf?pdfOutputRangeType=R&pdfPageSize=&pdfOutputRanges=41-49" DUMMY05.PDF というバッチファイルを作る(実際はループで回すべきだが、ここでは説明の為ベタ書き)。 これを動かして、カレントディレクトリにDUMMY01からDUMMY05.PDFの5個が出来れば成功である。 後は必要に応じてPDFを結合すればいい。PDF結合ツールは本家 Acrobat X 始め色々あるのでお好きなモノを。 とまあ、以上のように近デジダウンロードは比較的単純であることが判った。 もちろん、フツーの人はいちいちバッチファイルを作るようなことはしないで、WSHでもPowerShell、ExcelのVBAでも、要は http get が出来るモノで汎用的なツールを作成するのがよいだろう。 ということで次回は簡単なコマンドラインプログラムを作ってみる予定。予定は未定。
by signal-9
| 2012-07-10 17:36
| TIPSとかKludgeとか
|
カテゴリ
全体 一般の話題 奇妙な論理 奇談・異聞 秋葉原 研究(笑) 町歩き 古い話 東電災害 電算機関係の話題 情報保護・セキュリティ 読んだり見たり TIPSとかKludgeとか 拙作ソフトウェア 未分類 最新の記事
記事ランキング
以前の記事
最新のトラックバック
その他のジャンル
ブログジャンル
画像一覧
|
ファン申請 |
||