PythonでTwitterAPIを使ってツイートする

Requests、requests-oauthlibを使ってツイートします。twitterというモジュールがある事に後から気づきました。ドキュメントちょっと見た感じでは、使いやすそうな印象を感じました。

参考URL: requests-oauthlib , twitter



事前準備

Pythonモジュールをインストール

Twitter APIへツイート内容をHTTPRequestを送信するためのモジュール、Twitter APIを利用するための認証情報を保存するyamlファイルを扱うモジュールをインストールします。

pip install requests requests_oauthlib pyyaml


Twitter DevelopersからAPIKEYとACCESSTOKENを発行する

Twitter APIを利用するために、Twitter Developersへ登録しAPIKEYとACCESSTOKENを発行します。

Twitter Developers URL


アクセス情報をyamlファイルに保存する

Twitter APIを利用するための、APIKEY、ACCESS TOKENをyamlファイルに保存します。プログラムからこのファイルを読み込んで利用します。

API_KEY: "XXXXXXXXXXXXXXXXXXX"
API_SECRET_KEY: "XXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN: "XXXXXXXXXXXXXXXXXXX"
ACCESS_TOKEN_SECRET: "XXXXXXXXXXXXXXXXXXX"



サンプルプログラム

※yamlファイルのパスは環境に併せて修正してください


実行コマンド

プログラムを実行してツイートします。

python post_tweet.py

実行結果


正常系

Success.

異常系

Failed.
 - Responce Status Code : 401
 - Error Code : 89
 - Error Message : Invalid or expired token.


おまけ

PythonでTwitterAPIを使ってリプライする

パラメータにリプライするツイートのIDを”in_reply_to_status_id”キーで追加することでリツイートができます。

他のパラメータもあるので、詳細は公式ドキュメントを参照ください。

公式ドキュメントURL

サンプルプログラム

実行結果

PythonでLINE、Slack、Discordへメッセージ、通知を送る

Pythonでアプリにメッセージや通知を送るためのサンプルコードです。

PythonでLINE、Slack、Discordへメッセージ、通知を送る

LINE、Slack、Discordといったアプリにメッセージや通知を送るには、Pythonプログラムから各アプリのメッセージ受信アドレス(URL)へHTTPリクエスト(https)を送信します。

今回は下記のモジュールを利用して、HTTPリクエストを送信します。

# requestsをインストール
pip install requests

今回は、requestsモジュールを利用しますが、標準モジュールのurllibを利用するなど、他の方法でもメッセージを送ることが可能です。

PythonでLINE、Slack、Discordへメッセージ、通知を送る

では、先にサンプルコードを掲載します。

サンプルコード


解説

では、それぞれ解説です。

LINEにPythonでメッセージ、通知を送る

LINEへメッセージを送るためには、LINE notifyというサービスを利用する必要があります。

LINE notifyの公式URLはこちら

このサービスを登録すると、LINE notifyのURLにメッセージ(HTTPリクエスト)を送信すると、送ったメッセージをLINE通知として転送してくれます。LINEの通知先は、LINE notifyの公式URLからログインし、設定画面から登録します。※グループのみ登録可能だったはずです

LINEにPythonでメッセージ、通知を送るサンプルコード

def line_notify(token, message):
    """
    LINE send message.

    Args:
        token (str): line notify token.
        message (str): message.
    """
    LINE_NOTIFY_URL = 'https://notify-api.line.me/api/notify'
    if token:
        requests.post(LINE_NOTIFY_URL,
                      headers={'Authorization': 'Bearer {}'.format(token)},
                      data={'message': '\n{}'.format(message)})

line_notifyメソッドでLINEにメッセージを送信します。引数1には、LINE notfyで取得したトークン、引数2には、送信するメッセージを設定します。

「LINE_NOTIFY_URL 」には、LINE notifyのURLを固定で指定しています。
「if token」でトークンが設定されているかを判定しています。
「requests.post」メソッドで、LINE notifyのURLにHTTPリクエスト(POST)を送信します。headersには、LINE notfyで取得したTokenを設定し、dataにはメッセージを設定しています。


SlackにPythonでメッセージ、通知を送る

Slackにメッセージを送るには、slack incoming-webhookを利用します。

Webhookとは、外部システムからSlack送られてくるHTTPリクエストのことで、今回の場合、PythonプログラムからSlackへ送るメッセージのことを指します。

Slackのincoming-webhookを利用するにはこちらのページにアクセスし、「Create a Slack app」をクリックします。

前述のLINEでもそうでしたが、Slack、Discordにメッセージを送るということは、いずれの場合も、こちらのプログラム(PythonじゃなくてもOK)から各サービスの受信用URLにHTTPリクエストを送信し、リクエストを受信したサービス側で自動的にそれぞれのアプリの形式でメッセージ通知してくれるという処理の流れになります。

SlackにPythonでメッセージ、通知を送るサンプルコード

def slack_notify(url, message):
    """
    Slack send message.

    Args:
        url (str): slack incoming-webhook url.
        message (str): message.
    """
    if url:
        requests.post(url,
                      data=json.dumps({'text': message}))

slack_notifyメソッドでSlackにメッセージを送信します。引数1には、slack incoming-webhookで取得したURL、引数2には、送信するメッセージを設定します。

「if url」でurlが設定されているかを判定しています。
「requests.post」メソッドで、slack incoming-webhookのURLにHTTPリクエスト(POST)を送信します。urlにslack incoming-webhookを設定し、dataにはJSON形式でメッセージを設定しています。


DiscordにPythonでメッセージ、通知を送る

Discordにメッセージを送るには、Discord webhookを利用します。

Discordのwebhookを利用するには、チャンネルの編集からWebhookの設定を行います。

DiscordにPythonでメッセージ、通知を送るサンプルコード

def discord_notify(url, message):
    """
    Discord send message.

    Args:
        url (str): discord webhook url.
        message (str): message.
    """
    if url:
        requests.post(url,
                      data={'content': message})

discord_notifyメソッドでDiscordにメッセージを送信します。引数1には、discord webhookで取得したURL、引数2には、送信するメッセージを設定します。

「if url」でurlが設定されているかを判定しています。
「requests.post」メソッドで、discord webhookのURLにHTTPリクエスト(POST)を送信します。urlにdiscord webhookを設定し、dataにはJSON形式でメッセージを設定しています。