まず、TwitterAPIを使って投稿するのに参考にさせていただいた記事内に「OAuth認証はややこしいので凡人はライブラリを使う」と書いてあるので僕もpipを利用してインストールしたのが前回の記事
「基本はHTTP Requestを送ってJSONを得るだけなので、わざわざTwitter専用のライブラリを使うことも無いと思って自分で書いてみた。」
とあるので自分も練習がてら参考にさせてもらいながらTwitterの投稿、タイムライン取得、検索等のクラスを自分で書いて備忘録として残すことにした。
importしているfile_mngは以前書いたヤツを利用
/usr/local/lib/twitter.py
#!/usr/bin/python
# -*- coding: utf-8 -*-from requests_oauthlib import OAuth1Session
import json
import file_mng
etcDir = "/usr/local/etc/"#twitter main URL
url_twitter = "https://api.twitter.com/1.1/"
#tweet URL
url_tweet = url_twitter + "statuses/update.json"
#timeline URL
url_time = url_twitter + "statuses/home_timeline.json"
#search URL
url_search = url_twitter + "search/tweets.json"
class Twitter:CK = '***' # Consumer Key
CS = '***' # Consumer Secret
AT = '***' # Access Token
AS = '***' # Accesss Token Secertdef setKeys(self,etcFilename):
self.keys = file_mng.load(etcDir + etcFilename)
for s in self.keys:
sp = s.split(":")
if sp[0] == "CK":
Twitter.CK = sp[1]
if sp[0] == "CS":
Twitter.CS = sp[1]
if sp[0] == "AT":
Twitter.AT = sp[1]
if sp[0] == "AS":
Twitter.AS = sp[1]def search(self,params = 'test',url = url_search):
self.spara = {"q":params}
# OAuth で GET
self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
self.req = self.twitterKey.get(url, params = self.spara)
self.list =
if self.req.status_code == 200:
# レスポンスはJSON形式なので parse する
self.res = json.loads(self.req.text)
self.dic = self.res["statuses"]
for rs in self.dic:
self.list.append(rs["text"])
else:
# エラーの場合
self.list.append("Error: %d" % self.req.status_code)
return self.listdef timeline(self,params = {},url = url_time):
# OAuth で GET
self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
self.req = self.twitterKey.get(url, params = params)
self.list =
if self.req.status_code == 200:
# レスポンスはJSON形式なので parse する
self.timeline = json.loads(self.req.text)
# 各ツイートの本文を表示
for twt in self.timeline:
self.list.append(twt["text"])
else:
# エラーの場合
self.list.append("Error: %d" % self.req.status_code)
return self.listdef tweet(self,params = "test", url = url_tweet):
self.tpara = {"status":params}
# OAuth認証で POST method で投稿
self.twitterKey = OAuth1Session(Twitter.CK, Twitter.CS, Twitter.AT, Twitter.AS)
self.req = self.twitterKey.post(url, params = self.tpara) #tweet# レスポンスを確認
if self.req.status_code == 200:
return ("OK")
else:
return ("Error: %d" % self.req.status_code)
CK = '***' # Consumer Key
CS = '***' # Consumer Secret
AT = '***' # Access Token
AS = '***' # Accesss Token Secert
の***部分を取得したキーに置き換えるとそのまま使える。
/usr/local/etc/(任意のファイル)
CK:***********
CS:***********
AT:************
AS:***********
に認証キーファイルを置き、クラスのインスタンスにsetKeys(任意のファイル名)で認証キーのファイル名を渡し、簡単に置き換えられる仕様にした。
また、タイムラインや検索結果の複雑な辞書形式のものを簡単なリスト形式に変換して取得するようにした。
使い方。
test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-from twitter import Twitter #インポート
tw = Twitter() #インスタンス生成
#tw.setKeys("(任意のキーファイル名)")#キーファイルを設定
print tw.tweet("テスト投稿")#投稿、成功したら「OK」が返る
timeline = tw.timeline()#タイムラインをリスト形式で取得
for s in timeline:
print ssearch = tw.search("検索")#検索をリスト形式で取得
for s in search:
print s
※ python2.7なので環境によって文字列の変換エラーが出るかもしれない。
関連記事