2010-09-27

Python で書いたフィルタを GAE に載せる #1

Blogger で作ったブログの記事一覧を作成するプログラムを、まず Ruby で書き、次にそれを単純なフィルタをつなげたフィルタとして書き直し、さらにそれを Python で書き直した。すべてはこのプログラムを Google App Engine (以下、GAE) に載せるためにやったことだ。

Python はまだ勉強を始めたばかりなので、いまはまだ、たとえ短いプログラムだとしてもいきなり Python で書き始めることは難しい。まずは Ruby で書いて動くようにした上で、それを Python に書き直す、という段階を踏む必要があったのだ。

今回は、まずウェブアプリとしての概要を考えてみる。アプリ名は Blogger Glass になる予定(アプリ ID は bloggerglass)。予定というかすでに GAE の管理コンソールでアプリを作ってある。アプリ ID は先に決めておかないとメンドウだからね。

アプリのデザイン(意匠と設計)

外観

最初の版では iPhone や iPad 等のデバイスのことは考慮しない。まずは、Mac(や PC)で動くものに仕上げる。

外観はごくシンプル。ただ記事一覧のリストが出てくるだけ。Google の検索結果のような感じにしたい。というより、まんま Google をパクってみよう。つまり、(a) 1 ページに表示する項目数は制限しておき、(b) 記事数がそれを超えるなら複数ページに分割し、(c) 各ページの下部には後続ページへのリンクを置く。

Google に怒られたら、よくある「[1][2][3]...」という数字によるリンクに変えよう(いやまあ怒られなくても最終的には変えるつもりだ)。

iPhone/iPad 用では「Prev」「Next」ボタンによるナビゲーションになる。その場合、いま何ページが表示されているかをどうやってユーザにフィードバックするか。それは作ってみてから考えるよう。

リクエストの形式

いまのところアプリを構成する画面は 1 種類しかない。違いはリストが分割されている場合、リストのどのページを表示するか、という点だ。よって、リクエストの形式は 1 つで良いが、パラメータで表示するページを指定できなければならない。

http://bloggerglass.appspot.com/?page=10

リクエストに埋め込まれたパラメータは、GAE のリクエストハンドラでは以下のようにして読み取ることになる。上のリクエストでこのハンドラが呼び出されると、page には 10 が代入される。また、default_value を指定してあるので、パラメータなしでリクエストされたときは page には 0 が代入される(ページは 0 から数えることにする)。

(リクエストハンドラのサンプル)
 1: class MainHandler(webapp.RequestHandler):
 2:     def get(self):
 3:         page = int(self.request.get("page", default_value="0"))
ストレージは使わない方向でやってみる

前回の記事でも書いたように、最初のバージョン(プロトタイプというべきか)では取得したフィードのデータは使い捨てる。このため、リクエストごとに Blogger からフィードを取得することになる。さすがに毎回全記事分のデータを取得するのは無駄なので、ページ当たりの項目数を Blogger のフィードにデフォルトでふくまれている記事数(= 25)に一致させる。こうすれば、Blogger へのリクエスト時に start-index として page * 25 + 1 を指定すれば、ちょうど必要な数の記事データを取得できる。

次回は?

デザイン(意匠と設計)はこれぐらいにして、次回はコードを書き始めよう。フィードの取得から HTML を生成する部分はすでにできているのだから、あとはページ自体の生成とページ間遷移の仕組みだけだ。まずはページを作るところから。GAE 標準で使えるテンプレートを使って作ってみたい。この程度のアプリには大袈裟だけど、何事も練習だからな。

参考文献

Programming Google App Engine
Dan Sanderson
Oreilly & Associates Inc ( 2009-11-15 )
ISBN: 9780596522728

買ったのはこれの eBook 版。それも iPhone 用のアプリとして販売されているもの。アプリ版から ePub ファイルを取り出す方法はこちら(→ たった600円でオライリー本をiPadやKindleで読む。すてき。)を参照のこと。

関連リンク

関連記事

0 件のコメント:

コメントを投稿