#はじめに
右も左もライブラリもリファレンスもろくに読めない初心者が備忘録も兼ねて作ったものです。
##何か作りたかった
何かしたいと思いながらも何も行動できなかったけれど、今回のはそんな僕でも簡単に書けて、案外実用性があるんじゃないかと思い重い腰を上げて書いた。
やりたかったことが下4つだった。
- 指定したIDの最新のツイート内容を適宜テキストファイルに書き込む
- ついでにちゃんと動いてることがわかるように画面にも表示させる
- 取得した内容が一つ前のツイートと同じだった場合書き込まない
- プログラムを実行している間は半永久的に動き続ける
以上のように非常に実装の難易度は低い簡単なもの。
#前置きはここまでにして書くために環境を整える
自分のPCには元々授業の関係で使ってないAnacondaがあったのでここにぶち込まれているPythonをSublime textにも使えるようにしたかった。
ここの内容を意味も分からずコピペした。
でも何故か試しに文字列をprintで出力させようとすると、文字化けして上手く動かねぇなぁってなって数日溶かして気づいたのがsublime textでは日本語は文字化けすることだった。
半角英語にしたら普通に表示された。
APIに関してはPythonにはいくつものTwitterAPIが存在するみたいだが、
今回はわかりやすいサイトが存在していたので、そちらを参考にするためにPython-Twitterを使わせてもらった。
また、コンシューマキーやトークンは事前に取得していたアプリのキーがあったので、今回は割愛をする。
##でも上手く動かない
変数にキーを挿入するまでは通ったので、とりあえずツイートを取得する前に試しにツイートをさせようとした。
[ { code: 89, message: 'Invalid or expired token.' } ]
これが表示され上手くツイートされなかった。
調べるとトークンが間違っている可能性があると出たので再発行したが駄目だった。
##書き方を変えたら上手くいった
実は書く前に別のサイトで参考にしているサイトがあり、その時はtwitterAPIを入れていたのだが、その際に
CONSUMER_KEY = '**********'
CONSUMER_SECRET_KEY = '***********'
ACCESS_TOKEN = '***********'
ACCESS_TOKEN_SECRET = '***********'
api = twitter.Api(CONSUMER_KEY,CONSUMER_SECRET_KEY,ACCESS_TOKEN,ACCESS_TOKEN_SECRET)
以上のように書いてあったのでそれを参考に書いたのだが、リファレンスを見てみると
api = twitter.Api(consumer_key='consumer_key',
consumer_secret='consumer_secret',
access_token_key='access_token',
access_token_secret='access_token_secret')
とのように書いてある。
なのでこちらに書き方を変えてみると上手くいった。何故なのか・・・
#ツイートを記録してみる
参考サイトを見つつやると上手くいった。そして書き上げたコードが以下
# -*- coding: utf-8 -*-
from time import sleep #timeモジュールの中からsleep関数のみをimportする。
file = open('tweet_list.txt','a') #ファイルを書き込みモードでオープンする。
import twitter
api = twitter.Api(consumer_key='***************',
consumer_secret='**************',
access_token_key='***************',
access_token_secret='************')
tweet1 = 0
tweet2 = 0
infinity = -1
while(infinity < 0):
user = api.GetUser(screen_name = 'furatukibito')
tweet1 = user.status.created_at
sleep(10)
if tweet1 != tweet2:
file.write(user.status.created_at +"\n\t"+ user.status.text + "\n\n")
print (user.status.created_at +"\n\t"+ user.status.text + "\n\n")
tweet2 = tweet1
#まとめ
本当に簡単なコードだけど、やりたいことが実現できてよかった。
ただ、少し気がかりなのが永久的に実行をするのを前提に書いたのでファイルクローズとか書かなくてもCMDを閉じたらいいかと思って書いてないこと。メモリ開放はされるのだろうか・・・