読者です 読者をやめる 読者になる 読者になる

「作ればわかる! Google App Engine for Java プログラミング」本をPythonで書いてみる (6)

GoogleAppEngine Python

引き続き、「作ればわかる! Google App Engine for Java プログラミング」本にてPythonを修行中。


今回は、新刊情報ガジェットの作成。
「イマココ」ではDataStoreのデータをJSONへと変換するのを学んだが、今回はクラスをJSONへと変換するのを学んだ。
また、memcacheについても理解を深めることができた。

■ガジェット関連

本の公式サイトの記載にあるとおり、Windows Live Gallery がサービス停止になったため、ガジェットとして公開することができなくなりました。
さらに、マイクロソフトよりガジェットを無効化するKB(Fix it)も公開されており、Windows8でも廃止されたとか。
Microsoft KB2719662 - マイクロソフト セキュリティ アドバイザリ: ガジェットの脆弱性により、リモートでコードが実行される


ガジェットを作れるようになると色々とできそうかと考えていただけに、残念。
今回ガジェットを作る手順があったものの、Google App Engine のアプリケーション名以外は本のコードをそのまま使用(手抜き...)。



Amazon関連

Amazonに関するPythonのライブラリについて

以前、Google App ScriptでAmazonのAPIを叩いたことはあったので流用できるかと思いきや、Google App Engineには同様の機能なし。
Pythonならライブラリがあるだろうということで探してみると、いろいろなライブラリがある模様。
stackoverflow - Amazon API library for Python?


紹介されているものについてそれぞれ調べてみたところ、その中のbotllenoseがGoogle App Engineでの利用例もあり、良さそうな感じ。


GitHubにて公開されており、アプリで使う場合には、bottlenoseフォルダ以下を入れておけば良い模様。
GitHub - dlo - bottlenose

Amazonのパラメータについて

APIが変わったのか、API Version 2011-08-01では、本にあったDetailPageURLが取れず。
仕方ないので他にURLを取得できるものを探してみると、OffersレスポンスグループのMoreOffersUrlが使えそうであったため、そちらを利用することに。
aws documentation - Product Advertising API - ItemSearch




■lxml関連

bottlenoseを紹介しているBlogにて、取得したXMLのオブジェクト化でlxmlを使っていたので、Google App Engineで使えるかを調べてみたところ、lxmlはPython 2.7対応から使えるようになった模様。
http://stackoverflow.com/questions/4228904/using-python-amazon-product-api-on-google-appengine-without-lxml


ただし、Windowsの場合はローカルの開発環境には別途インストールしないと使えない模様。他、app.yamlのlibrariesへ設定も必要。
誰かのメモ - Google app engine / python で lxml



■日付関連

本ではUNIXタイムスタンプを利用して1秒停止の実装をしていた。
Pythonで時刻の差分を取るには、UNIXタイムスタンプはtime.time()で取得できるものの、「1秒後」という実装はどうすれば良いか悩んだ。
一方、datetime.datetimeとdatetime.timedeltaを利用すれば実装できそうだったので、そちらを利用することに。
Python 2.7ja1 documentation - 8.1. datetime ― 基本的な日付型および時間型
taichino.com - pythonとperlとphpとas3とjavascriptで日時計算



JSON関連

Chapter6ではDatastoreのModelをJSON化したものの、今回はクラスのオブジェクトをJSON化する必要あり。
単純に、json.dump() ではJSON化できないため、調べてみたところ、stackoverflowのFred Laurentさんの回答が参考になった。
stackoverflow - Encoding nested python object in JSON


json.dumpsでは、ensure_ascii=Falseとしておかないと、和書のタイトルが文字化けするので、注意。
Python v2.7.3 documentation - 18.2. json ― JSON encoder and decoder - 18.2.2. Encoders and Decoders


ソースコード

GitHub へ chap7 を追加。
いつものapp.yamlの他、amazon/amazon_config.py に自分の情報を加えると使えるように。
freshpubbar.gadgetについては、公式サイトよりダウンロードしたコードを改変せずに使用。