libro
www.tuyano.com
App InventorによるAndroid開発入門

TinyWebDBでサーバー通信を行おう (2/5)

作成:2010-11-14 19:02
更新:2010-11-14 19:02

■サーバーの用意

さて、まずはサーバーにプログラムを用意しておく必要があります。といっても、「全然、プログラミングはわからないよ!」という人もいるでしょう(そういう人のためのApp Inventorですから)。そうした人は、Googleが用意しているテスト用サーバーをそのまま利用することができます。

http://appinvtinywebdb.appspot.com/

これが、そのアドレスです。通常、TinyWebDBを作成すると、デフォルトでこのアドレスがアクセス先に設定されます。

が、「テスト用」のサーバーは、あくまでテスト用ですので、永久にデータが保管されるわけではありませんし、さまざまな人が利用しますからデータが上書きされたり削除される可能性もあります。可能であれば、独自にサーバーのプログラムを用意しておくべきでしょう。

ここでは、Googleが提供するサーバー環境「Google App Engine(GAE)」を利用したプログラムのサンプルをあげておきましょう。GAEは、Googleに無料でWebアプリケーションを作成し利用できるサービスです。これは、http://appengine.google.com/からアカウントをとり、アプリケーションを配置できます。

GAEでは、Pythonというスクリプト言語を使ってプログラムを作成します。以下に、App InventorからTinyWebDBを利用するための簡単なプログラム例をあげておきます。これをGAEで実行するスクリプトとして記述し、デプロイ(アプリケーションを公開する)してください(GAEのプログラミングについては、別途http://libro99.appspot.com/index2?id=50に入門講座を用意しているので、そちらで勉強してください)。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#!/usr/bin/env python

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from django.utils import simplejson as json

class StoredData(db.Model):
  tag = db.StringProperty()
  value = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(required=True, auto_now=True)

class StoreAValue(webapp.RequestHandler):

  def post(self):
    tag = self.request.get('tag')
    value = self.request.get('value')
    entry = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
    if entry:
      entry.value = value
    else: entry = StoredData(tag = tag, value = value)
    entry.put()
    result = ["STORED", tag, value]
    WritePhone(self, lambda : json.dump(result, self.response.out))

class GetValue(webapp.RequestHandler):

  def post(self):
    tag = self.request.get('tag')
    entry = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
    if entry:
      value = entry.value
    else:
      value = ""
    WritePhone(self, lambda : json.dump(["VALUE", tag, value], self.response.out))

def WritePhone(handler, writer):
  handler.response.headers['Content-Type'] = 'application/jsonrequest'
  writer()

application = webapp.WSGIApplication(
       [('/storeavalue', StoreAValue),
       ('/getvalue', GetValue)], debug=True)

def main():
  run_wsgi_app(application)

if __name__ == '__main__':
  main()
※関連コンテンツ

「App InventorによるAndroid開発入門」に戻る