GET direct_messages/events/listを使って30日分取れるならと思ったが取れなかった。
途中でエラーで終わってしまう。
そしてエポック秒を日時に変換できない(;´Д`)
import datetime import json import sys import time import twitter from my_config import * #ファイルに書き込む関数 def writeFileLine(myfilename,dms): f = open(myfilename, 'ab') for dm in dms["events"]: mText = '"' + dm['message_create']['message_data']['text'] + '"' mSender = dm['message_create']['sender_id'] mRecipient = dm['message_create']['target']['recipient_id'] #変換失敗してる mCreated_at = datetime.date.fromtimestamp(int(dm['created_timestamp'][:6])) f.write((mCreated_at.strftime("%Y/%m/%d,%H:%M:%S") + ',' + mSender + ',' + mRecipient + ',' + mText +'\n').encode("utf_8_sig", "ignore")) f.close return(dms['next_cursor']) #初期設定 auth = twitter.OAuth(ACCESS_TOKEN, ACCESS_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET_KEY) t = twitter.Twitter(auth=auth) #ファイルクリア myfilename = 'DmGetter.csv' f = open(myfilename, 'wb') f.close #受信取得 try: dms = t.direct_messages.events.list() except: print('失敗じゃ\n') sys.exit() if 'Error' in dms: print('失敗じゃ\n' + dms) lID = writeFileLine(myfilename,dms) #2回目以降 while lID != 0: try: dms = t.direct_messages.events.list(cursor = lID) except: print('失敗じゃ\n') sys.exit() if 'Error' in dms: print('失敗じゃ\n' + dms) nID = writeFileLine(myfilename,dms) if nID != lID: lID = nID else: lID = 0
追記
#ファイルに書き込む関数 def writeFileLine(myfilename,dms): f = open(myfilename, 'ab') for dm in dms["events"]: mText = '"' + dm['message_create']['message_data']['text'] + '"' mSender = dm['message_create']['sender_id'] mRecipient = dm['message_create']['target']['recipient_id'] etime = int(dm['created_timestamp'][:10]) mCreated_at = datetime.datetime(*time.localtime(etime)[:6]) f.write((mCreated_at.strftime("%Y/%m/%d,%H:%M:%S") + ',' + mSender + ',' + mRecipient + ',' + mText +'\n').encode("utf_8_sig", "ignore")) f.close return(dms['next_cursor'])
これでいけた。なんでかはわからん。10桁の整数にしてから6桁にしてるのかな?*1 謎だ・・・。最初から6桁にしたら昔の日付になるので10桁で(;´Д`)
ネタ元は
y0m0r.hateblo.jp
*1:違う、10桁をパラメーターにして、結果の6桁を使ってるんだ