GAE Blobstore Python API メモ

RIOT APIから取得したChampion情報を、ディクショナリ形式で.pyにして書き出したら低コストでBOTが読めるかも、と思ってBlobstoreを使ってみた。が、Blobstoreのファイルは通常のファイルの様にアクセス出来ないのでimportする方法が見つからず挫折。根本的に何か勘違いしているので素直にMemcache使えと。今後またBlobstoreを使うかもしれないのでメモ。

from google.appengine.api.urlfetch import fetch
from google.appengine.api import files
from google.appengine.ext.blobstore import BlobInfo
from django.utils.simplejson import loads

import webapp2, logging

from setting import RIOT_KEY #RIOT APIのキー

class mainHandler(webapp2.RequestHandler):
    def get(self):
        result = fetch('https://prod.api.pvp.net/api/lol/na/v1.1/champion?api_key='+RIOT_KEY) #Champion情報を取得する
        if result.status_code == 200:
            b = BlobInfo.all().filter('filename =', 'champions.py').get()
            if b is not None:
                b.delete() #更新判定がめんどくs・・高コストなので前のファイルは問答無用で削除
            blob_io = files.blobstore.create('text/x-python', 'champions.py') #書き出すファイルを定義
            with files.open(blob_io, 'a') as f: 
                f.write('champions = {\n')
                js = loads(result.content)['champions'] #JSONパーサに取得したChampionデータを読み込ませる
                for j in js:
                    f.write('\t\''+str(j['id'])+'\': \''+j['name']+'\', \n') #Champion IDとNameをディクショナリ風に書き出し
                f.write('}')
            files.finalize(blob_io)
            module = __import__(BlobInfo.all().filter('filename =', 'champions.py').get()) #無理でした(当たり前)
        else:
            logging.error(result.content)


app = webapp2.WSGIApplication([ ('/champion', mainHandler) ], debug=True)
カテゴリー: 未分類 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です