スナックelve 本店

バツイチ派遣40代女性の日記です

あばうとー  読者になる  follow us in feedly

エポック秒(文字列)を日時に変換できない(;´Д`)[追記]できた!!

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桁を使ってるんだ