pythonからTwitterAPI触ってみた(主に画像取得

pythonの勉強にTwitterAPIを触ってみただけ。
python-twitterは使いません

アプリケーション登録

先人が居るのでそちらを参考に
website-planner.com

ここで取得した

  • ConsumerKey
  • ConstumerSecret
  • AccessToken
  • AccessTokenSecret

を使用するのでどこかにメモって置く

OAuth認証

pythonからOAuth認証は  requests_oauthlib ライブラリを使う
コマンドは下記

pip install requests_oauthlib


requests_oauthlib がインストール出来たら認証の処理を書くが、
毎回処理を書くのもしんどいので、
別のpythonファイルに切り出しておいてimportする方が楽

from requests_oauthlib import OAuth1Session
CONSUMER_KEY = "Consumer Key"
CONSUMER_SECRET = "Consumer Secret"
ACCESS_TOKEN = "Access Token"
ACCESS_TOKEN_SECRET = "Access Token Secret"

def CreateOAuthSession():
    return OAuth1Session(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET)

ここで分けて置くと、別のpythonファイルに記述するとき

import ファイル名
twitter = ファイル名.CreateOAuthSession()

だけで完結するので便利

投稿してみる

import sys
import OAuth

#OAuth認証
twitter = OAuth.CreateOAuthSession()

#投稿用エンドポイント
url = "https://api.twitter.com/1.1/statuses/update.json"

#引数取得 [1] = 投稿したいメッセージ
args = sys.argv

#投稿
params = {"status":args[1]}
response = twitter.post(url,params=params)

#投稿成功判定
if response.status_code == 200:
    print("success")
else:
    print("error")

簡単。

ダイレクトメッセージも送ってみる

import sys
import OAuth

#OAuth認証
twitter = OAuth.CreateOAuthSession()

#ダイレクトメッセージエンドポイント
url = "https://api.twitter.com/1.1/direct_messages/new.json"

#引数取得 [1] = ユーザー名 [2] = メッセージ
args = sys.argv

#送信
params={"screen_name":args[1],"text":args[2]}
response = twitter.post(url,params=params)

#送信成功判定
if response.status_code == 200:
    print("success")
else:
    print("error")

URLとparamsが変わっただけ。
引数で@ユーザー名とメッセージを渡すだけで送信できる。

検索ワードから画像だけを取得する

これがやりたかった。
が、ほとんど参考にしただけなのでリンクを置く。

qiita.com

これだけではアレなので・・・

python3系で書く場合は1か所注意が必要

filename = '%s.jpg' % md5hex(urls[0]['media_url'])

この部分が文字コードエラーで通らないため、
UTF-8にencodeしてあげる必要があるので下記に治す。

#そもそも上でmedia_urls = urls[0]['media_url'] してた
filename = '%s.jpg' % md5hex(media_urls.encode("utf-8"))

これでキチンと動く。


RWBYのカップリング画像集めが捗りそう。

※同じAPIは15分に15回だけなので注意


参考:
qiita.com

qiita.com

syncer.jp