🤖

Twitter自動リプライ:リプライ内容設定編

2022/02/13に公開

前回の内容

自動リプライの基本はこちらで
https://zenn.dev/ryo427/articles/aeb7aaf22aa8f9

送るリプライをリッチにしたい

前回は決まった定型文を送るだけだったので、もう少し賢くするためのTIPSを書いてみようと思います。初心者向けの内容です。AIの内容は出てきません。
前回のStream用関数でいうと、

###ここで自分のリプライの内容を設定します
text ="リプライありがとう!"

この部分の内容をもう少し煮詰めましょうという記事です。

初級 ランダムに返事をさせる

単純に定型文の種類を増やしてランダムで決める作戦です。
以下を追加して呼び出すだけですのでお手軽です。

import random
def random_reply(reply_username=""):
    words=["リプライありがとう!",
    "いつも応援ありがとうございます",
    "わーいリプライ!私リプライ大好き!",
    "ただしつけもの、テメーはダメだ"]
    word =random.choice(words)
    return word

呼び出し方はこう

###ここで自分のリプライの内容を設定します
text =random_reply()

中級 相手の名前も入れる

tweet_idから情報を引き出します。

def get_reply(tweet_id):
    oauth = OAuth1Session(
        consumer_key,
        client_secret=consumer_secret,
        resource_owner_key=access_token,
        resource_owner_secret=access_token_secret,
    )
    params = {"ids": tweet_id, "expansions": "author_id"}

    response = oauth.get(
        "https://api.twitter.com/2/tweets", params=params
    )

    if response.status_code != 200:
        raise Exception(
            "Request returned an error: {} {}".format(response.status_code, response.text)
        )
    print("Response code: {}".format(response.status_code))
    json_response = response.json()
    return json_response

初級のランダム要素と組み合わせてみましょう。呼び出し方はこんな感じ。

 ##ここで自分のリプライの内容を設定します
json_response_rep =get_reply(tweet_id)
reply_username =json_response_rep["includes"]["users"][0]["username"]
text =random_reply(reply_username)

random_replyで文章を作ります。

def random_reply(reply_username=""):
    words=["@"+ reply_username +"さん!リプライありがとう!",
    "@"+ reply_username +"さん、いつも応援ありがとうございます",
    "わーい@"+ reply_username+"さんのリプライ!私リプライ大好き!",
    "ただし@"+ reply_username +"、テメーはダメだ"]

ちょっと人柄が出ます。
https://twitter.com/haruna_machine/status/1492739954912350209

上級 会話の内容でケース分けする

単純ですがif文で会話の内容をケース分けします。
inを使うことで部分一致でも反応できます。

##ここで自分のリプライの内容を設定します
monster =["シュレック","緑","怪物"]

if "角野卓三" in reply_text:
    text="角野卓三じゃねーよ!"
elif"ステラ"in reply_text or "クッキー"in reply_text:
    text="ステラおばさんじゃねーよ!"
elif True in[x in reply_text for x in monster]:
    text="シュレックじゃねーよ!"
else:
   text =random_reply(reply_username)

ちなみにシュレックの分岐は、
リスト内包表記[x in reply_text for x in monster]で各条件との比較結果のリストを取得し、
True inで「一つでも一致部分があればシュレック」という内容を書いています。

以上です

あとは角野卓三に"幸楽","ピン子"を追加するなどセンスの見せどころです。
AI春菜の作り方みたいになってしまいましたが、内容を変えれば単純な業務用BOTなどに応用できると思います。
AI春菜の場合random_replyのタイミングでreply_textの内容を見てAIが文章の自動生成をしています。ここでは取り扱いませんがまた記事にできたらいいなと思います。

Discussion