GAEとPythonでギリシャの時間を知らせるTwitter Botをつくる
前回ようやくBotを作ることに成功したので、他にも作ってみよう!
(前回記事)
PythonでTwitter Botを作るまでの長い長い物語(完結編) - からあげ定食
知り合いがギリシャに旅行中なので、ギリシャの現地時刻を知らせる単純なBotを作ってみることにする。
現在時刻を取得するモジュールはdatetime
from date time import datetime d = datetime.today() print "今は%s年%s月%s日%s時%s分%s秒" %(d.year, d.month, d.day, d.hour, d.minute, d.second) # 今は2015年3月6日21時9分25秒
タイムゾーンを扱うモジュールはpytz
使い方はここを参考にしました。
pytz – Pythonでタイムゾーンを扱うライブラリ | 情シスハック
[python]pytzモジュールでのタイムゾーン一覧 | KentaKomai Blog
from datetime import datetime import pytz jst = pytz.timezone('Asia/Tokyo') #日本のタイムゾーン eet = pytz.timezone('Europe/Athens') #ギリシャのタイムゾーン j = datetime.today() g = j.replace(tzinfo=jst).astimezone(eet) #タイムゾーンを自分で設定してから変換する(直接やるとエラー) print '日本の現在時刻は%s時%s分です' % (j.hour,j.minute) print 'ギリシャの現在時刻は%s時%s分です' % (g.hour,g.minute) # 日本の現在時刻は21時18分です # ギリシャの現在時刻は14時18分です
そしてBotのコードがこれ!
tweet.py #!/usr/bin/env python #coding: utf-8 from google.appengine.ext import webapp import keys import GAE_Oauth.oauth CONSUMER_KEY = keys.twi_key['consumer_key'] CONSUMER_SECRET = keys.twi_key['consumer_secret'] ACCESS_TOKEN = keys.twi_key['access_token_key'] ACCESS_SECRET = keys.twi_key['access_token_secret'] def getGreeceTime(): from datetime import datetime import pytz jst = pytz.timezone('UTC') eet = pytz.timezone("Europe/Athens") j = datetime.today() g = j.replace(tzinfo=jst).astimezone(eet) text = u'現在のギリシャ時間は%s時%s分!' % (g.hour,g.minute) return text class TweetHandler(webapp.RequestHandler): def get(self): import GAE_Oauth.oauth from datetime import datetime client = GAE_Oauth.oauth.TwitterClient(CONSUMER_KEY, CONSUMER_SECRET, None) tweet = getGreeceTime() param = {'status': tweet} # Twitter API 1.1 に対応 client.make_request('https://api.twitter.com/1.1/statuses/update.json', token=ACCESS_TOKEN, secret=ACCESS_SECRET, additional_params=param, protected=True, method='POST') self.response.out.write(tweet)
app.py #!/usr/bin/env python import webapp2 from google.appengine.ext.webapp.util import run_wsgi_app from tweet import * app = webapp2.WSGIApplication([ ('/greece', TweetHandler) ], debug=True) def main(): run_wsgi_app(app) if __name__ == "__main__": main()
app.yaml application: greesayo version: 1 runtime: python27 api_version: 1 threadsafe: false handlers: - url: .* script: app.app libraries: - name: webapp2 version: "2.5.2" - name: ssl version: "latest"
できた!
現在のギリシャ時間は12時58分!
— ギリシャ時間 (@Greece_Time) 2015, 3月 6
GAE上でdatetimeを使うと国際標準時で取得されるようなので、タイムゾーンの変換を"UTC"→"Europe/Athens"に変えています。
pytzは標準モジュールでは無いのでダウンロードしてディレクトリに置いておく。
コンシューマーキーなどはkeys.pyとして保存し、tweet.pyから読み込む。
cron.yamlは省略。
GitHub使いたいけど使ったこと無いからそのうち。