はぴぞう君でTweepy自動リプライ(V2)する内容をほんのちょっとだけ賢くしてみた

はぴぞう君(@haptweepy)に何か話しかけたら返事をするようになった。

Twitterで、自動リプライ(V2)したくなったので、Python+tweepyでやってみた。 – happyman web

AIなんぞ入れてみたいなあなんて思っては居ない。LIVA君ではたぶん動かない。

まあそう言うわけで少し賢くしてみようということで、いろいろ遊んでみた。

1.ランダムに返事させよう

元々入っていたんですが、忘れてしまいそうだったので、記録しておく。

ランダムに言葉を選ばせるには、randamをインポートして、下記のコードを書く。

import random
~
# いま何時?と聞かれたら、%Sを返す。%Sの中身は、random.Choiceで括ってやる。
if "いま何時?" in text_list:
text = '%s' % random.choice(['そうね だいたいね', 'ちょっと待ってて オー', 'まーだ はやい', 'え?', 'らーらーらーららら らーらーら','時計を見てね','とーきーをかけるおじさん'])

ただし文字列だけで、時間を返す言葉をランダムに入れておくには、参照するコードをあれこれやらないとダメみたい。まだよく解っていない。

2.言葉を分岐させて違う返事をさせてみる。

Streamに負担をかけるようですが、聞く言葉を「if」で条件分岐して、違う返事を選ぶ事ができる。

#いま何時?と聞かれたら
if "いま何時?" in text_list:
  text = '%s' % random.choice(['そうね だいたいね', 'ちょっと待ってて オー', 'まーだ はやい', 'え?', 'らーらーらーららら らーらーら','時計を見てね','とーきーをかけるおじさん'])

#今何時?ときかれたら
elif "今何時?" in text_list:
  # 時刻を取得
  datetime_dat = datetime.now()
  time_str = datetime_dat.strftime('%H:%M')
  text = "窓際おじさんのはぴぞうがだいたい"+time_str+"をお知らせします。"

# 違ったら
else:
  return

こんなコードで良いみたい。

3.時間を聞いてみたら答えさせてみよう

もう全部書いてしまったのですが、完成させた少し返事が出来るようになったコードがこれ。

import tweepy
import json
from pprint import pprint
from datetime import datetime
import random

# API情報を記入
Bearer_Token=''
consumer_key=''
consumer_secret=''
ACCESS_TOKEN=''
ACCESS_TOKEN_SECRET=''

# クライアント関数を作成
Client=tweepy.Client(
  bearer_token="",
  consumer_key="",
  consumer_secret="",
  access_token="",
  access_token_secret="",
  )

class ClientProcess(tweepy.StreamingClient):
  def on_data(self, raw_data):
    response = json.loads(raw_data)
  
    # ツイートidを取得する
    tweet_id = response["data"]["id"]
    # ツイートの文章を取得する
    reply_text: str = response["data"]["text"]
    # 文章を空白で分割する
    text_list = reply_text.split()

    # いま何時?と聞かれたら
    if "いま何時?" in text_list:
      text = '%s' % random.choice(['そうね だいたいね', 'ちょっと待ってて オー', 'まーだ はやい', 'え?', 'らーらーらーららら らーらーら','時計を見てね','とーきーをかけるおじさん'])
    elif "今何時?" in text_list:
      # 時刻を取得
      datetime_dat = datetime.now()
      time_str = datetime_dat.strftime('%H:%M')
      text = "窓際おじさんのはぴぞうがだいたい"+time_str+"をお知らせします。"
    # 違ったら
    else:
      return

    Client.create_tweet(
      text=text,
      in_reply_to_tweet_id=tweet_id
    )
    return

printer = ClientProcess(Bearer_Token)
printer.add_rules(tweepy.StreamRule("to:スクリーンネーム"))
printer.filter()

少し賢くなった。