【Python】Twitter APIを利用して在庫情報を自動投稿するボットを作る

Python

こんにちは、しらすです。

ECサービス等から在庫情報を取得し、在庫が復活したら通知してくれる自動ボットを作ろうと思い、Twitter APIを利用してみたのでブログにしたいと思います。

大きく以下の2つのパートで作ってみました。今回は主に1について紹介したいと思います。

  1. Twitter APIを利用してテキストを投稿する関数
  2. ECサイトをスクレイピングして在庫情報を確認する関数

【準備】Twitter API用のKeyを取得

まずコードを作成する前に、Twitter APIのKeyを取得する必要があります。以下のサイトに細かく手順が書いてありますのでご参照ください。最終的に作成される4つのKeyを記録しておきましょう。

2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説
Twitter APIを利用するためのデベロッパー申請から、APIキー、トークン取得方法を詳しく解説します。

注意点

APIを利用してツイートするためにはApp permissionsを「Read and Writer」に設定しておく必要があります。デフォルトではReadのみ設定されているため、API経由でツイートしようとするとエラーが発生します。

Twitter APIを利用してテキストを投稿する関数

API用のkeyを入れたファイルと、実際にTwitter投稿する関数が書かれたファイルの2つからなります。

API用のkeyを入れたファイル(API_Key.py)

CONSUMER_KEY='xxx'
CONSUMER_SECRET='xxx'
ACCESS_TOKEN_KEY='xxx'
ACCESS_TOKEN_SECRET='xxx'

上記 xxx 部分に先ほど取得したKeyを入れてください。

Twitterに投稿する関数が書かれたファイル(twitter_API.py)

from API_Key import CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET
from requests_oauthlib import OAuth1Session
from http import HTTPStatus
from datetime import datetime

def post_tweet(body):
    # 認証処理
    twitter = OAuth1Session(
        CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET
    )

    # ツイート処理
    res = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params={"status": body})
    print(res)

    # エラー処理
    if res.status_code == HTTPStatus.OK:
        print("Successfuly posted")
    else:
        print(f"Failed: {res.status_code}")

post_tweetという関数に渡した引数を自動投稿するようになっています。API_Key.pyと同じ階層にこのファイルを置いて実行してください。

ECサイトをスクレイピングして在庫情報を確認する関数

この部分はやりたいことによって様々だと思いますので、ご参考までにこちらでAmazonのスクレイピングについて記載しました。

自動投稿部分は上記で作成しているので、あとはスクレイピングの結果に応じて必要な文章を作成し、post_tweetに渡せば投稿できます。

まとめ

TwitterAPIのKeyを取得する部分が英語ばかりで少し面倒ですが、APIを使った投稿部分自体は非常に簡単に作成可能です。スクレイピングと合わせれば非常に強力な自動ボットが作成できるので、一度作ってみてみると面白いと思います。

今回は実行すると自動で情報を取得してツイートするようにしましたが、次回はこのボットをサーバー上に設置して定時実行できるようにしたいと思います。

コメント