時間が無かったので書き溜めから投稿します。 twitter からリプライをもらった時刻から、実際にPython で処理した時刻までの時間を返す関数が欲しかったので、少し考えてみました。
使用するモジュールのインポート
まずは使うモジュールのインポートをします。
import twitter import time import email.utils
twitter からリプライをもらった時刻の取得
次に twitter からリプライをもらった時間を取得します。
API の取得
keyは環境変数からos.environで読み込むのが良いと思いますが略します。
api = twitter.Api(consumer_key="hoge", consumer_secret="hoge", access_token_key="hoge", access_token_secret="hoge" )
rfc2822 形式で時刻を取得
time_of_reply = api.GetMentions()[0].AsDict()[‘created_at’] で取得できます。その結果、以下のような文字列が返されます。
>>> time_of_reply = api.GetMentions()[0].AsDict()['created_at'] >>> time_of_reply 'Tue Jun 06 14:27:54 +0000 2017'
上のように返ってきた時刻は rfc2822 形式で、タイムゾーンは考慮されていません。
秒に変換
rfc2822 形式はemail.utils.parsedate(date) でパースできます。
>>> email.utils.parsedate(time_of_reply) (2017, 6, 6, 14, 27, 54, 0, 1, -1)
のようなタプルが返されます。この9桁はそのままtime.mktime()に通して秒に変換できます。 日本は標準時 +9時間なので、それに9*60*60を足せばいいんですね。
>>> time.mktime((email.utils.parsedate(time_of_reply))) + (9*60*60) 1496759274.0
これでツイッター側のリプライの時刻を秒で取得できました。
Python で処理する時刻の取得
一方で、現在の時刻(秒)はtime.mktime(time.localtime())で取得できます。
>>> time.mktime(time.localtime()) 1496759535.0
twitter からリプライをもらった時刻から、実際にPython で処理した時刻までの時間
>>> (time.mktime(time.localtime()))-(time.mktime((email.utils.parsedate(time_of_reply))) + (9*60*60)) 328.0
という様に、秒で取得できます。ただ、twitterとサーバーのタイムゾーンの設定がずれてると悲しいことになるので、herokuなどで動かしてる場合は設定が必要だと思われます。