Google App Engine Python:スケジュール、キャッシュ、テンプレートによる効率的更新(3)。- memcache,template

前々回は、スクリプトを指定した時間に起動できるスケジュール・タスクを実現するための「cron.yaml」の記述方法について、前回は、そのスケジュールにしたがって実行されるスクリプトによって、外部から取得したデータを加工したうえで、キャッシュに保存する方法について説明した。今回は、キャッシュからデータを取り出して、テンプレートに埋め込んで表示させよう。

前回のサンプルによって、memcache の"gooRanking"キーには、次のような文字列が格納されている。

<ul>
  <li>キーワード1</li>
  <li>キーワード2</li>
  <li>キーワード3</li>
  <li>キーワード4</li>
</ul>

これを取り出すのは簡単だ。キー名を引数に取り、memcache の get メソッドを用いる。

memcache.get("gooRanking")

後は、この取り出した文字列をテンプレートに埋め込めばよい。

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import os
from google.appengine.ext.webapp import template
from google.appengine.api import memcache
from daily import updateKeywords

class MainPage(webapp.RequestHandler):
  def get(self):
    gooRanking = memcache.get('gooRanking')   
    if not gooRanking :
      updateKeywords()
      gooRanking = memcache.get('gooRanking')    

    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, {
         'gooRanking':gooRanking
    }))

application = webapp.WSGIApplication([('/', MainPage)],debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()      

「if not gooRanking :」のブロックは、前回も説明したが、memcache のデータが失われた場合に、緊急避難として、データを再作成するためのもの。

テンプレート・ファイルの"index.html"には、データを埋め込むためのテンプレート変数を記述しておく。その部分に取得した文字列が埋め込まれる。

<html>
<head>
<title>memcache から取得したデータをテンプレートに埋め込んだサンプル</title>
</head>
<body>
<h1>memcache から取得したデータをテンプレートに埋め込んだサンプル</h1>
{{ gooRanking }}
</body>
</html>

このページにアクセスすると、リストが埋め込まれた状態で表示される。

もちろん、「app.yaml」でリクエストハンドラーを設定しておき、このページのURLにアクセスできるようにしておかなければならない。

前回と前々回で説明した cron によって、リストの内容は、毎日0時12分を境に書き換わる。