徒然日記

徒然なるままに書いていきます 固めのものからゆるい日常まで書きたいものを

Twitterで定期的に検索&RTするお狐かわいいbotを自作した話

キツネをこよなく愛する世界の70億人の方々コン!にちは!!
突然ですがこの写真は私が蔵王キツネ村に行った時に撮れた一枚です。
f:id:cobaltic:20190629105829j:plain
んん〜〜 かわいいっ

でも世の中には良いカメラでもっと可愛くて凛々しいお狐の写真を撮ってきてくれる方々がおり、私はそんなキツネを愛する写真家の方々をフォローしております。
するとかわいいお狐の画像が定期的に流れてきて日々Twitterを開くだけで幸せに過ごすことが出来ます。



最高ですね!!!

ちなみに最近まめちゃんを今一番推しております 凛とした可愛さって感じで本当に最高です…

こんなかわいい画像をまとめてるアカウントはないものだろうか…
というわけで調べると出てきますね、画像を保存して我が物顔でツイートしているであろう輩が…

許せねぇ!!!
かわいくて凛々しいお狐の写真を撮ってくれる方々への敬意を払うべきやろがい!!!!

かわいくて凛々しいお狐の写真を撮ってくれる方の嘆きのツイート…
Cheng-Ren🦊 on Twitter: "キツネアイコンの人にフォローされた!と思ってメディア欄見に行ったら転載画像ばっかりだった時の悲しみ"


ということでかわいくて凛々しいお狐画像を定期的にリツイートするbotを製作しました。
フォローするだけでQoLが上がると思います。



ここからは技術的なお話です。



大まかな流れ



0.botアカウントの登録

好きなようにアカウント作りましょう 以上です。

1.botアカウントのAPIkey取得


www.torikun.com

この記事を参考にしました。

どんな理由で作成して運用するのか?みたいな欄では
私はキツネが大好きです。
自動的にかわいいキツネの画像を取得してリツイートするボットを作りたいです。
自分が楽しむだけでなく、たくさんの人に見てもらいたいです。
自動お気に入りや自動フォローなどの機能を作成して、作業をより効率的にしたいです。

google先生に翻訳してもらって
I love foxes.
I want to create a bot that automatically gets a cute fox image and retweets.
Not only I enjoy myself, I want many people to see it.
I want to make functions more efficient by creating functions such as automatic favorites and automatic follow.
と書いておきました。

2.いい感じのコード書きかき

こちらが今回使ったコードになります

import tweepy
import json
#キー設定                                                                                                                                                     
CONSUMER_KEY = 'XXXXX'
CONSUMER_SECRET = 'XXXXX'
ACCESS_TOKEN = 'XXXXX'
ACCESS_SECRET = 'XXXXX'
#APIインスタンスを作成
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
api = tweepy.API(auth)
#検索条件部
q = " #蔵王キツネ村 OR #キツネ村 OR #ホンドギツネ OR #北キツネ牧場 , filter:images , exclude:retweets , min_faves:100 " 
count = 1

#検索部 
search_results = api.search(q=q, count=count)
#検索結果表示                                                                                                                                                   
for result in search_results:
    username = result.user._json['screen_name']
    tweet_id = result.id #ツイートのstatusオブジェクトから、ツイートidを取得
    user = result.user.name #ツイートのstatusオブジェクトから、userオブジェクトを取り出し、名前を取得する
    tweet = result.text
    time = result.created_at
    
    print(tweet)
    print(tweet_id)
    print(user)
    print('-------------------')
    
    
    #print(time) 
    #fox_list.append(tweet_id)
    
    url = "https://api.twitter.com/1.1/statuses/retweet/%d.json"%tweet_id
    api.unretweet(tweet_id)
    api.retweet(tweet_id) # retweet実行
    api.create_favorite(tweet_id) #いいね
    print(user)
    print("をいいねしました")
    api.create_friendship(username)
    print("をフォローしました")  

長々と書いてるけど要点だけかいつまむと
#蔵王キツネ村 #キツネ村 #ホンドギツネ #北キツネ牧場
のいずれかのタグを含む画像ツイート(100いいね以上)をリツイートといいねして、投稿者をフォローするプログラムです

製作当初は #キツネ も入れていたのですが日向坂46なるグループがキツネ という新曲をリリースしたせいか、女の人の画像が大量に混入する事態が発生してしまったのでお蔵入り。


参考にした記事たちです
Twitterの検索APIについて - メモ帳の裏の切れ端
【Python】 Tweepyで、ツイート・フォロー・リムーブ・検索・画像投稿する方法をまとめてみた - Qiita
TwitterAPI でツイートを大量に取得。サーバー側エラーも考慮(pythonで) | コード7区


3.定期的に実行する

Pythonで作ったTwittter botをHerokuで定期実行する方法【Windows版】 | クロヤギ
この記事を参考にしたかったのですがどうにもうまくいかなかったので挫折…
タスクスケジューラでいい感じに設定しました。
あとはたまに手動でも動かしていきたいと思います。


改善案としてはハッシュタグが入ってないと検索に引っかからないので、TL取得して画像認識してキツネならRTみたいな感じが理想なんですけど出来るんでしょうか
頑張ってみたいと思います。