• ログインログイン
  • 新規登録新規登録

MENU

Google App Engineで遊んでみよう! 第5回

連載Google App Engineで遊んでみよう!

GoogleAppEngineを使った開発レシピです。AWSやさくらインターネットのVPSやレンタルサーバなどの他の有名なクラウド環境と比べると少しクセがあるものの、慣れると非常に楽に開発やローンチができます。一定の範囲内まで無料で活用できるようになっているので、これを機会にぜひ活用してみましょう。

前回までのプログラミング学習コラムに続き5回目の勉強内容です。

こんにちは、ぴかしです。前回までで、TwitterのBotをGAE上で動かすことができるようになりました。今回は、GAEの強力な機能である、データストアについて解説します。データストアのためにGAEを利用すべきといっても過言ではありません。

データストアとは

GAEのデータストアは、一般のWebアプリケーションでいうRDBに相当するものです。データストアを利用することで、Googleの分散ストレージであるBigTableにアプリケーションからアクセスすることができます。データストアにより、超強力なスケーラビリティやコストパフォーマンスを得ることができます。

データストアはRDBに相当するとはいえ、本質的に異なるものです。一般的なDBでは、テーブルを定義し、そこに数値やテキストを格納しますが、データストアにはスキーマがなく、データをオブジェクトとして格納します。また、GQLという、SQLによく似たアクセス言語を利用してデータを操作します。

データストアの利用は難しくありません。以下で、基本的な使い方を見ていきましょう。

データストアを使ってみる

まず、エンティティを作成してみます。ここでは「歯医者こわい」を含むツイートを格納するためのエンティティを定義します。

from google.appengine.ext import db
class TweetModel(db.Model):
 id = db.IntegerProperty() # tweetのid
 screen_name = db.StringProperty() # tweetしたユーザ名
 text = db.StringProperty(multiline=True) # tweetのテキスト

プロパティの型はIntegerProperty、StringProperty以外にも沢山あるので、詳しく知りたい方は、こちらを参考にして下さい。

次に、1つのツイートをデータストアに格納してみます。put()でエンティティを保存することができます。

tweet = TweetModel(id=366725488170893312, screen_name=’pika_shi’, text=’実家でまったり(´ω`)’)
tweet.put()

簡単ですね。同様に、データの取得もget()で簡単にできます。filter()でidを指定して、今格納したツイートを取得してみます。

tweet = TweetModel.all().filter('id = 366725488170893312’)
print tweet.get().text #実家でまったり(´ω`)

最後に、delete()で今のツイートを削除してみます。

db.delete(tweet)

基本はこれだけです。では、前回作成した歯医者こわくないbotに、データストアを取り入れてみます。「歯医者こわい」で検索し、リプライするついでに、検索結果をデータストアに格納してみましょう。

#-*- coding: utf-8 -*-
from google.appengine.ext import db
import twitter
import sys reload(sys)
sys.setdefaultencoding('utf-8')
# 自身が取得したものに置きかえて下さい
CONSUMER_KEY="XXXXXXXXXX"
CONSUMER_SECRET="XXXXXXXXXX"
ACCESS_TOKEN="XXXXXXXXXX"
ACCESS_TOKEN_SECRET="XXXXXXXXXX"
api = twitter.Api(consumer_key=CONSUMER_KEY, 
 consumer_secret=CONSUMER_SECRET, 
 access_token_key=ACCESS_TOKEN, 
 access_token_secret=ACCESS_TOKEN_SECRET,
 cache=None)
# エンティティの定義
class TweetModel(db.Model):
 id = db.IntegerProperty() # ツイートのid
 screen_name = db.StringProperty() # ツイートしたユーザ名
 text = db.StringProperty(multiline=True) # ツイートのテキスト
# 「歯医者こわい」でツイート検索し、結果の上位1件を取得
search_results = api.GetSearch('歯医者こわい'.decode('utf-8'))
tweet = search_results[0]
# 検索結果をデータストアに格納
for result in search_results:
 TweetModel(id=result.id, screen_name=result.user.screen_name, text=result.text).put()
# リプライメッセージを作成
# tweet.user.screen_nameにリプライするユーザ名が入ります
postmsg = '@' + tweet.user.screen_name + ' 歯医者こわくないよ!がんば!'
# リプライを投稿
# in_reply_to_status_idで、どのツイートに対するリプライなのかを指定しています api.PostUpdate(status=postmsg.decode('utf-8'), in_reply_to_status_id=tweet.id)

データストアの内容は、アプリケーション管理ページで見ることができます。「歯医者こわい」を含むツイートが格納されている様子が確認できます。

ぜひデータストアを使って、Botにおもしろい機能を付けてみてはいかがでしょうか?Twitter Botの作成は、今回で終了となります。次回からは、Kay FrameworkというGAE専用のPythonフレームワークを使って、簡単なWebサービスを作成していきます。ご期待下さい。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top