【備忘録】PythonでTwitterAPIを叩いてツイート取得、CSV出力しようとして詰まったところの話

f:id:kajideal:20190713061652p:plain

こんにちは ありがとう さよなら また会いましょう

どうも,コピペPythonマンです.

オタクたちの間ではクソQiita記事とかよく殴られてるけど,それにも満たないレベルの話が繰り広げられるぜ夜露死苦.

備忘録だから!備忘録だから!!てかはてブロだし!!!(???)
女装千年王国 [の~すとらいく]

タイムゾーンの話 created_at

tweet['created_at']だけで持ってくるとUTC(協定世界時)で日時表示されるので気が狂う.あと表記が見辛い(扱い辛い?)

のでJST(日本時間)に戻す.そのためにcreated_atをdatatimeオブジェクト(? 日時を扱うアレ)に入れ直して、時差9時間を足してあげる.

time_utc = datetime.datetime.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y')
time_difference = datetime.timedelta(hours=9)
time_jst = time_utc + time_difference


ちなみに時間検索条件の方はJSTって付ければ対応してくれる.

params = {'q':self.keyword, 'count':100,
'since':'2019-07-06_00:00:00_JST','until':'2019-07-07_23:59:59_JST'}

同人誌、同人ゲーム、同人ソフトのダウンロードショップ - DLsite

ツイート本文の改行を潰そう

んじゃあcsv出力れっつごーってやると改行を含むツイートでシッチャカメッチャカになる.

のでツイート本文中の改行文字を置換する. replace以外にもrstripとかsplitlinesとかあるらしい.

hoge = tweet['text'].replace('\n','')

UnicodeEncodeError

もう大丈夫やろってんで取得範囲広げてバーっとやろうとしたら
"UnicodeDecodeError: 'cp932' codec can't decode byte"って怒られた.

cp932ってなんだよワンピースの仲間か?と思ったけどShift-JISのことだって.

PythonとWindowsの兼ね合いで出力時にモニャるそう.

実は、Pythonは明示的に変換しなくても、標準出力等をする場合、自動的にシステムのエンコーディングに変換してから出力しようとする。

Windowsの場合は、CP932へ変換しようとするため、CP932に変換出来ない場合は、UnicodeEncodeError例外が発生する。

https://qiita.com/butada/items/33db39ced989c2ebf644

上記を読んではえーとなったけど別の対処をして,csvを開くところに"encoding='utf-8'"を刺してあげたら良い感じになった.最適解なのかはナオキ.

あとから開くときにUTF-8を指定しないとな状況になるんだけど,それが出来ない場合はまた何か別のことしないと.

with open('hoge.csv','w',newline='',encoding='utf-8') as f:

csv1行空いちゃう問題

おっしゃ出来たーと思って出来上がったcsvを見たら,ツイート1件ごとに改行されてる.

はークソクソと思ったけど調べたらまあ先例いっぱいですね.ありがたや.

"newline=''"ってやつを刺してあげて解決.

with open('hoge.csv','w',newline='',encoding='utf-8') as f:

終わりに

いかがでしたか!?!???!?!?

まあ色々と自分の理解にはなった.多分.
Pythonで~TwitterAPIで~みたいなのは先人の轍だらけの話で,調べれば調べるほど色々出てくるのでありえんありがたかった.

このあと出力したcsvをグラフとか解析とかで良い感じにしたいと思って,
"RapidMiner"っていうソフト(ちょっと馴染みがあった)を使うんだけど時系列グラフの時間軸がUTCにしか対応してないらしくて痛い目に.

ちなみにいくら調べても分からんくて公式Communityにガバガバイングリッシュを抱えて泣きついた構図が以下.
f:id:kajideal:20190713054359p:plain

f:id:kajideal:20190713054410p:plain
図があれば伝わるやろ!の精神(アホ). 出来ないことが分かったってだけでもスッキリするよね.サンキューマルコ. 次のバージョンに期待.

折角Python使ってるんだしそこでグラフ出力しろやとかのお話も頂いたり.あとはRとか...?

あと凄くしょうもないことだから上に載せなかったけど,Twitterアプリ自体のタイムゾーン設定をJSTにしてなくて,出力結果との照会のためにTwitterアプリを開いたのに「ありえん時間ズレてるんだけど!!!なんで!!!!」で少し,少しだけ時間潰した.アホ.

言い訳としては凍結絡みで設定リセットされていたこと.気をつけろ(長井秀和).

他にやりたいこととしてYouTubeLiveのチャット上手いこと取れないかなーと.
んで軽く調べたところ,どうやらアーカイブからのチャット取得は面倒くさくて生配信中のチャットを取得するのがベターらしい.うーん.

初めてこういう技術チック?な記事を書いたけど色々と恐ろしい.ツッコまれたら適宜修正入れます....

てか終わりにの方が文量あるの草.

おわり.