読者です 読者をやめる 読者になる 読者になる

からあげ定食

僻地の大学生の進捗発表。R,Python,yacht,twitteR,自然言語処理,将棋,機械学習,ヨット

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"

できた!

GAE上でdatetimeを使うと国際標準時で取得されるようなので、タイムゾーンの変換を"UTC"→"Europe/Athens"に変えています。
pytzは標準モジュールでは無いのでダウンロードしてディレクトリに置いておく。
コンシューマーキーなどはkeys.pyとして保存し、tweet.pyから読み込む。
cron.yamlは省略。
GitHub使いたいけど使ったこと無いからそのうち。