Hatena::Diary

muoの日記(今はAndroid情報翻訳メイン)

2010-04-04 日経Web刊関連(2)

日経Web刊、紙面ビューア用画像取得スクリプト(Python)

先日書いた日経Web刊 紙面ビューア、ほんの少しだけ技術面の続きとなります。

大事な前書き

結構デリケートなものでありますので、本題の前に少々断りごとを記載します。

今回のツールを含め、みゅおの取り組んでいるものは全てnikkei.comでの(2010年5月以降の)有料会員登録を行わずに記事を読んだり、課金を回避したりするような目的のものではありません。あくまでも正規会員の方が自身の責任で(アカウント停止など、日経新聞社の判断で行われる可能性を認識しつつ)利便性を追求するためのものです。

本来、日経新聞社自体がスマートフォン向けのきちんとしたビューア類を公式展開して頂ければこれに勝るものはありません。しかしながら現状としてAndroidはおろかiPhone向けすら公式ビューアが提供されていません(2010年4月5日現在)。おそらく2010年4月にローンチを間に合わせるというスケジュールや投下資本に対するリターンといった諸々を検討した上で現在の機能や対応プラットフォームへと落ち着いているはずで、企業活動としては至極当然の判断でしょう。

しかし、みゅおとしては長年待ちに待った日経朝刊をスマートフォンで読めるところまであと一歩となっている、技術的にはアクセスも可能である、しかし公式ビューアが無いためアクセス出来ない・・という状況が残念すぎるのです。

このため、みゅおは独自にデータ取得や閲覧を出来るようにしようとする試みを行っています。

その成果は極力オープンにしていこうと考えていますが、それらを利用することで利用者の方と日経新聞社との間でトラブルが発生する可能性は否定出来ません。また産経新聞の紙面ビューアとは違ってnikkei.comへの登録時点で、ある程度の個人情報日経新聞社側へ渡している認識も持ちつつ使って頂きたいと願っております(日経新聞社側でリクエスト送信のパターンからツール利用者を抽出するのは造作も無いことでしょう)。

何をするツールか

前書きが長くてすみません。本題です。

このスクリプトは、最新の日経朝刊について日経Web刊の紙面ビューア用JPEG画像と紙面一覧xmlファイルを取得してくるものです。機能としては

  • nikkei.comへログインする
  • 最新朝刊のサムネイル、通常画像、詳細画像を取得する(このとき、サムネイル→通常画像→詳細画像の順で取得する)

を持っています。CUIツールで延々裏側で処理をして無言で終了します。気の利いたGUIなどは残念ながらありません。一応裏側でログは出力しているので、エラー終了時などには参照ください。

これが出来て何がうれしいか

  • あまり一般の方にはうれしくないでしょう(紙面コレクターの人にはうれしいのかもしれません)。
  • Flash環境用のビューアなどを開発している人にとっては何かの参考になるかもしれません。
  • PCでもAtom環境などFlash版ビューアが重過ぎるという場合は、DirectXなどで簡単なビューアを書くことでかなりレスポンスを改善できるかもしれません。

本エントリ末尾にソース全文を貼り付けておきます(Google Codeからの取得はこちら)。

使い方

	'loginId' : 'username@example.com',
	'loginPass' : 'password',
	'dataDir' : 'C:\\Users\\testuser\\Desktop\\data',

上記のloginIdをnikkei.comの登録メールアドレスに、loginPassをパスワード(平文)に、dataDirを紙面データの保存先ディレクトリに変更して実行してください。途中でエラーとなって取得が失敗した場合は、再実行することで残分を取得出来ます。

ソースについて少々コメント

  • コメントはありませんがログ出力を結構大量に埋め込んでいるので挙動が気になる場合はそちらを読んでください。
  • 実行するとカレントディレクトリにcookies.txtが作成されますが、現状特に意味はありません(ログイン状態記憶等がサイト自体に実装されていないのでセッション継続への利用も出来ない)。気になるようだったらLWPCookieJarを使わないようにするなど適当にいじってください。
  • 実際の画像取得部分には前のエントリで書いたように適当なウェイトを入れています。ソース的にウェイトを外すことは簡単ですが、「ぶっこぬき」っぽい挙動はあなた自身のアカウント寿命を縮めるような気がしませんか?
  • あまり読まない面の詳細画像を取得せずに負荷軽減する機能は残念ながらまだ実装していません。ご要望頂ければ早めに実装しますのでblogコメント欄でも@muo_jp宛でも結構ですのでコメントください。

ソース

日経新聞社からのクレームにより削除いたしました。各位にお詫び申し上げます。

ka_zuka_zu 2010/04/25 00:03 はじめまして。ka_zuといいます。
ここをみて同じ考えで早速ためしてみたのですがうまくいきません。
WINDOWS環境でPythonをインストールしてプログラムをRUNモジュールすると
ImportError: No module named lxml
と最後の行に表示されてとまります。
モジュールの追加が必要と思い、ttp://pypi.python.org/pypi/lxml/2.2.6
でlxml-2.2.6.tar.gz (md5, pgp) を解凍したところ
まできたのですがモジュールの組込み方がわかりません。
当方ここでPythonなるものをはじめて知り、試行錯誤しております。
どうか未熟者にご教授願います。本来、このような初歩的な質問を
すること自体、使用する資格がないかも知れませんが
宜しくお願いいたします。

どうにかして通勤電車で快適に紙面をみたいと思っています。
WINDOWS Mobile環境または ATOMのLOOXで実現したいと思います。

ka_zuka_zu 2010/04/25 16:47 何とか動作するところまでは行きました。
画像を分割しないで1つにできないでしょうか?
サイズはつなぎ合わせた感じでよいのですが・・・
できれば1枚プレビューと 4枚1組 16枚1組で
宜しくお願いいたします。

muo_jpmuo_jp 2010/04/26 08:00 はじめまして、コメント頂きありがとうございます。
昨日丸ごとノーマークでして1つ目のご質問の力にはなれなかったのですが自己解決されたようで何よりです(Windows向けのlxmlバイナリダウンロードなどで対応されたでしょうか)。
2つ目のご質問につきまして、画像は元々分割した状態でサーバ上に置かれていますので1枚にするためには何らかの後処理を行う必要があります。処理自体は結構単純ですので、本日のちほど作成してみたいと思います。
ただ少々不安なのは16枚1組のものをそのままのサイズでつなぐと解像度が2000x2696となり、ネットブックには少々重荷なサイズになってしまうところでしょうか。
もっとも、16枚1組のものはいささか解像度が高すぎる感がありますので出力オプションとしてサイズ指定出来るようになっていれば良いのかもしれません。

ka_zuka_zu 2010/04/27 21:52 こんばんは。コメントありがとうございます。
lxmlバイナリの件ですが。Pythonのバージョンが違うのか私のやり方が悪かったのか
わかりませんが、EZ_SETUPや環境変数のpathを通す?などいろいろ自分なりに調べてみたのですが、CUI自体が苦手で馴染めない自分には出来ませんでした。

ですので。LXMLが入ればたぶん動くだろうとそこに賭けてもう一度PYTHON
自体をLXMLインストラーがある2.5へ落として再インストールしました。

画像は元々分割されていたのですか。
自分なりプログラムを弄って見たのですが分かりませんでした。
といっても単純に1と4と16のところと、何か画像を切り取る座標?数値が
ないか探してました・・・単純なことしか出来ませんが。

サイズ指定が出来るとうれしいですが、1枚にそこそこの解像度で表示できて
てもかまいません。
あまり無理を言ってお願いばかりでは申し訳ありませんで。
宜しくお願いいたします。

muo_jpmuo_jp 2010/04/28 00:35 ka_zuさん、こんばんは。
まだ私自身あまりこれらの取得スクリプトを実用出来ていない状態ですので、機能要望・使い勝手などコメント頂けるのは本当にありがたいです。

lxmlの件了解です。2.5でも今のところ特に問題なさそうでよかったです。

さて、画像を結合した上でオプションにてリサイズするスクリプトを作成しましたので別記事( http://d.hatena.ne.jp/muo_jp/20100427 )へまとめました。ご参照ください。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証