スポンサーリンク
個人的に作成していた WordPress 投稿記事を Twitter へ自動投稿するツールが完成しました。
その際に使用した細々とした技術を備忘録として記録しておきます。
サンプルコードも載せておきますので、良かったら参考にしてみてください。
使用言語は Python 3 です。
スポンサーリンク
Twitter API を使用する事前準備
Twitter API を使用するための準備を行います。
(Python はインストール済みであることを前提とします)
APIキーとアクセストークンの発行
Twitter API を使用するためには、APIキーとアクセストークンの発行が必要です。
まだ発行していない場合は、以下の記事を参考にしてこれらを発行してください。
発行は1時間程度で終わります。
【2020年4月版】Twitter API キー / アクセストークンの取得方法 | 備忘録
副業の一環として、Twitter 運用の一部をプログラミングで自動化したいなーと思い、
Twitter API について調べてみました。
requests_oauthlib モジュールのインストール
以下で紹介するサンプルコードを実行するにあたり、
requests_oauthlib モジュールが必要ですので、以下コマンドでインストールしておきます。
1 2 3 |
pip install requests_oauthlib |
インストール時の実行ログ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> pip install requests_oauthlib Collecting requests_oauthlib Downloading requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB) Requirement already satisfied: requests>=2.0.0 in c:\users\xxxxxxxxx\appdata\local\programs\python\python37\lib\site-packages (from requests_oauthlib) (2.21.0) Collecting oauthlib>=3.0.0 Downloading oauthlib-3.1.0-py2.py3-none-any.whl (147 kB) |■■■■■■■■■■■■■■■■| 147 kB 819 kB/s Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\xxxxxxxxx\appdata\local\programs\python\python37\lib\site-packages (from requests>=2.0.0->requests_oauthlib) (3.0.4) Requirement already satisfied: urllib3<1.25,>=1.21.1 in c:\users\xxxxxxxxx\appdata\local\programs\python\python37\lib\site-packages (from requests>=2.0.0->requests_oauthlib) (1.24.1) >requests_oauthlib) (2018.11.29) Installing collected packages: oauthlib, requests-oauthlib Successfully installed oauthlib-3.1.0 requests-oauthlib-1.3.0 |
スポンサーリンク
|
|
Twitter API でツイート投稿するサンプルコード
以下、Twitter へツイート投稿するサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 必要なモジュールのインポート from requests_oauthlib import OAuth1Session import json # 引数で与えたツイート文を投稿する def post_tweet(tweet, consumer_key, consumer_secret, access_token, access_token_secret): # 認証情報を設定 twitter = OAuth1Session(consumer_key, consumer_secret, access_token, access_token_secret) # ツイート投稿のエンドポイントを設定 url = "https://api.twitter.com/1.1/statuses/update.json" # 投稿情報を設定 params = {"status" : tweet} # POST の実行 res = twitter.post(url, params = params) data = res.json() # レスポンスを Python 辞書形式へ変換 # 結果の取得 ## 正常終了 if res.status_code == 200: print(json.dumps(data, indent=4)) # レスポンスを表示 ## 異常終了 else: print(data) if __name__ == '__main__': tweet = ''' テスト投稿 #test https://XXXXXXXXX.com ''' post_tweet(tweet, "【consumer_key を入力】", "【consumer_secret を入力】", "【access_token を入力】", "【access_token_secret を入力】") |
ツイート文章内にそのまま記載してやればOKです。
その他、コマンドの詳細については、以下のドキュメントを確認してください。
Twitter 開発者 ドキュメント日本語訳 POST statuses/update
|
|
ツイート投稿のレスポンス一覧
上記コードでツイートした際、返却されるレスポンスの例を以下に記載します。
サンプルコード内でも実施していますが、json 形式で受け取ることで、
レスポンスから情報を引き抜くことができます。
たとえば、”created_at” の値が欲しい場合は、”data[“created_at”] と記載すれば OK です。
・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
{ "created_at": "Mon May 04 19:55:06 +0000 2020", "id": xxxxxxxxxxxxxxxxxxx, "id_str": "xxxxxxxxxxxxxxxxxxx", "text": "ここにツイートした文章が記載されます。", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "source": "<a href=\"https://xxxxx.com\" rel=\"nofollow\">アプリケーション名</a>", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": xxxxxxxxxxxxxxxxxxx, "id_str": "xxxxxxxxxxxxxxxxxxx", "name": "Twitterユーザー名", "screen_name": "Twittrユーザー名(画面表示)", "location": "", "description": "Twitter ユーザーの自己紹介欄", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 0, "friends_count": 0, "listed_count": 0, "created_at": "Thu Apr 09 15:44:20 +0000 2020", "favourites_count": 0, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 2, "lang": null, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "F5F8FA", "profile_background_image_url": null, "profile_background_image_url_https": null, "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxx.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxx.jpg", "profile_link_color": "1DA1F2", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "lang": "en" } |
以上、参考にしてみてください^^
コメント