DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

PythonでTwitterAPIを使って投稿する

まず、TwitterAPIを使って投稿するのに参考にさせていただいた記事内に「OAuth認証はややこしいので凡人はライブラリを使う」と書いてあるので僕もpipを利用してインストールしたのが前回の記事

dreamerdream.hateblo.jp

 

 「基本はHTTP Requestを送ってJSONを得るだけなので、わざわざTwitter専用のライブラリを使うことも無いと思って自分で書いてみた。

とあるので自分も練習がてら参考にさせてもらいながらTwitterの投稿、タイムライン取得、検索等のクラスを自分で書いて備忘録として残すことにした。

 importしているfile_mngは以前書いたヤツを利用

dreamerdream.hateblo.jp

 

 

/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 Secert

    def 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.list

    def 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.list

    def 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 s

search = tw.search("検索")#検索をリスト形式で取得

for s in search:
  print s

 

※  python2.7なので環境によって文字列の変換エラーが出るかもしれない。

 

 

 関連記事

dreamerdream.hateblo.jp

 

 

kampa.me