Python & X(旧: Twitter) API を使い、特定の Post に返信する

こんにちは @ketancho です。

X(旧: Twitter) において、1つの情報を2つの Post に分けて時間差で投稿するようなことを実装したく、X API を改めて調べているときのメモを記録しておきます。

まずはシンプルに返信先の tweet_id が分かる前提で、そのポストに返信していきます。

POST /2/tweets | Docs | Twitter Developer Platform こちらの API Doc を参考にすると、

    # 返信したい tweet_id を含めて payload を作る
    payload = {'text': text, 'reply': {'in_reply_to_tweet_id': "1864807079866962021"}} 
    response = oauth.post(
        "https://api.twitter.com/2/tweets",
        json=payload,
    )

と、payload に tweet_id を渡してあげるだけ、という非常にシンプルなものでした。

書いたコード

import json
import os
from requests_oauthlib import OAuth1Session
from datetime import datetime, timedelta, timezone

import boto3
ssm_client = boto3.client('ssm')

oauth = None

def lambda_handler(event, context): 
    init()
    
    text = 'おはようございます:)'
    response = tweet(text)
    print(response.json())
    
def init():
    response = ssm_client.get_parameter(
        Name='/credentials/twitter',
        WithDecryption=True
    )
    twitter_parameters = json.loads(response['Parameter']['Value'])

    consumer_key = twitter_parameters["consumer_key"]
    client_secret = twitter_parameters["client_secret"]
    access_token = twitter_parameters["access_token"]
    access_token_secret = twitter_parameters["access_token_secret"]
    
    global oauth
    oauth = OAuth1Session(consumer_key, client_secret, access_token, access_token_secret)
        
def tweet(text):
    # ここに返信したい tweet_id を含めて payload を作る
    payload = {'text': text, 'reply': {'in_reply_to_tweet_id': "1864807079866962021"}}
    response = oauth.post(
        "https://api.twitter.com/2/tweets",
        json=payload,
    )
    if response.status_code != 201:
        raise Exception(
            "[Error] {} {}".format(response.status_code, response.text)
        )
    return response
    

結果

いい感じです。いったん、今日はここまで。

関連記事

www.ketancho.net

お役立ち Twitter Bot を作りながら学ぶ AWS ドリル ~第 1 回 おはよう Bot 編 - builders.flash☆ - 変化を求めるデベロッパーを応援するウェブマガジン | AWS