私のcronジョブの目的は、タイムスタンプ付きのツイートをGoogleAppEngineのデータストアに保存することです。データをタイムスタンプ形式で保存する方法を理解できませんでした(現在、文字列として保存されています)。理想的には、これをDateTimePropertyとして保存して、後でエントリを並べ替える時間を簡単にしたいと思います。私が苦労している特定の2つの問題があります:
- time.mktime()の適切な使用、および
- 正しいフォーマット値をGQLに入れる
フィールドは、次のようにjsonでフォーマットされます。
s = "Wed, 20 Mar 2013 05:39:25 +0000"
datetimeモジュールを使用してこの文字列を解析しようとしました:
timestr = datetime.datetime.strptime(s, "%a, %b %Y %d %H:%M:%S +0000")
when = datetime.fromtimestamp(time.mktime(timestr))
すべてを要約すると、これは私のcron.pyファイルのスニペットです。
result = simplejson.load(urllib.urlopen(twitterurl))
for item in result['results']:
g = ""
try:
g = simplejson.dumps(item['geo']['coordinates'])
except:
pass
timestr = datetime.datetime.strptime(str(item['created_at']), "%a, %b %Y %d %H:%M:%S +0000")
when = datetime.fromtimestamp(time.mktime(timestr))
tStore = TweetsFromJSON(user_id=str(item['from_user_id']),
user=item['from_user'],
tweet=unicodedata.normalize('NFKD', item['text']).encode('ascii', 'ignore'),
timestamp=when,
iso=item['iso_language_code'],
geo=g
)
データストアのモデルは次のようになります。
class TweetsFromJSON(db.Model):
user = db.TextProperty()
user_id = db.TextProperty()
tweet = db.TextProperty()
timestamp = db.DateTimeProperty()
iso = db.StringProperty()
geo = db.StringProperty()