LoginSignup
1
1

More than 1 year has passed since last update.

【Twitter API×Python】指定したハッシュタグのツイートをまとめてLINEへ送信してみた

Posted at

指定したハッシュタグのツイートを一括で取得したい!

突然ですが、私は最近まで植物に関するクラウドファンディングを実施していました。
その際に、フォロワーを増やそうと #植物のツイートをしている、かつ フォロワーが100人以上の場合にフォローをするという活動を定期的にしていましたがこれが結構大変なのです。(全然増えませんでした。。。)
ですので、この活動がもっと簡単にできないかと思い LINEへ指定した条件のツイートをまとめて送信しするやり方を考えました。
フォロワーを増やしたい方やツイートの分析をしたい方は是非ご覧になってください!

基本的に↓の記事を参考にしていますが、自分がより使いやすいように改変をしています。
リンクから直でツイートに飛べるのでフォローが簡単にできます!

↓コードを実行したときの結果↓
Tweet取得.gif

完成版
import tweepy
import requests

# フォロワーの指定
followers = 100

# 取得するツイートのハッシュタグを指定 
keyword = '植物'

account = "@***"

consumer_key = '***'
consumer_secret = '***'
access_token = '***'
access_token_secret = '***'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth, wait_on_rate_limit = True)

line_notify_token = '***'
line_notify_api = 'https://notify-api.line.me/api/notify'

def searchmake():
    ohasenword = f'#{keyword}'

    return ohasenword

def searchtweet(ohasenword):
    tweets = api.search_tweets(q=ohasenword, count=20)
    for tw in tweets: 
        print(tw.created_at)

    return tweets

def collecttweets(tweets):
    collected_accounts = []
    collected_tweetids = []
    collected_text = []
    collected_follower = []

    for tw in tweets:
        if not (tw.text.startswith('RT')) or (tw.text.startswith('@')):
            if tw.user.followers_count >= followers:
                if not tw.id in collected_tweetids:
                    collected_accounts.append(tw.user.screen_name)
                    collected_tweetids.append(tw.id)
                    collected_text.append(tw.text)
                    collected_follower.append(tw.user.followers_count)
            
    return collected_accounts, collected_tweetids, collected_text, collected_follower

def sendlinemessage01(collected_accounts, collected_tweetids):
    headers = {'Authorization': f'Bearer {line_notify_token}'}
    
    message = f'\n<{keyword}に関するツイートを取得>\n'
    for user, twid in zip(collected_accounts, collected_tweetids):
        user_url = f'https://twitter.com/{user}/status/{twid}'
        message = f'{message}{user_url}\n\n'
    
    data = {'message': message}
    requests.post(line_notify_api, headers = headers, data = data)

def sendlinemessage02(collected_text, collected_follower):
    headers = {'Authorization': f'Bearer {line_notify_token}'}
    
    message = f'\n<{keyword}に関するツイートを表示>\n\n'
    for text, follower in zip(collected_text, collected_follower):
        message = f'{message}●フォロワー:{follower}\n●本文:{text}\n\n' 
    
    data = {'message': message}
    requests.post(line_notify_api, headers = headers, data = data)

def main():
    searchword = searchmake()
    tweets = searchtweet(searchword)
    collected_accounts, collected_tweetids, collected_text, collected_follower= collecttweets(tweets)
    sendlinemessage01(collected_accounts, collected_tweetids)
    sendlinemessage02(collected_text, collected_follower)

if __name__ == '__main__':
    main()

実行環境

  • Python -ver3.9
  • tweepy -ver4.10
  • requests -ver2.28

作り方

1.Twitterデベロッパーへの登録。

まずは、Twitter APIを使うためにTwitterデベロッパーへの登録へ登録する必要があります。
自分は3年前くらいに登録したのですが、申請をしてから実際に使えるようになるまで1週間くらいかかりました。。。
やり方は↓とかが参考になると思います。

使えるようになったら、↓の記事を参考に5項目を記載してください。

キーやトークンを記載(10~15行目)
account = "@***"

consumer_key = '***'
consumer_secret = '***'
access_token = '***'
access_token_secret = '***'

2.LINE Notify APIを使ってメッセージを自分のアカウントにメッセージを送る。

ここからアカウントを登録してトークンを取得します。
https://notify-bot.line.me/ja/

ログイン後は
マイページ⇒トークンを発行する⇒トークン名、トークルームを設定⇒発行する
をすると、トークンが発行されるので22行目にコピペしてください。

トークンを記載(22行目)
line_notify_token = '***'

3.tweepyのライブラリーをインポート

pip install tweepy

4.取得したい項目を記載

ここでは、LINEへ通知する際に取得をしたいツイートの項目を指定します。

collecttweets(37~52行目)
def collecttweets(tweets):
    collected_accounts = []
    collected_tweetids = []
    collected_text = []
    collected_follower = []
    
    for tw in tweets:
        if not (tw.text.startswith('RT')) or (tw.text.startswith('@')):
            if tw.user.followers_count >= followers:
                if not tw.id in collected_tweetids:
                    collected_accounts.append(tw.user.screen_name)
                    collected_tweetids.append(tw.id)
                    collected_text.append(tw.text)
                    collected_follower.append(tw.user.followers_count)
            
    return collected_accounts, collected_tweetids, collected_text, collected_follower
指定の仕方 取得できる項目
tw.user.screen_name ツイートをしたユーザーの名前
tw.id ツイートをしたユーザーのID
tw.text ツイートの内容
tw.user.followers_count ユーザーのフォローワー数

この他にも取得できる項目はたくさんあるので↓を参考にしてみてください。

5.LINEへ通知する。

まずは4で取得をしてきたユーザー名とIDを元にツイートに直接アクセスするためのURLを作成し、↓のようなLINE本文を作成します。

image.png

sendlinemessage01(54~63行目)
def sendlinemessage01(collected_accounts, collected_tweetids):
    headers = {'Authorization': f'Bearer {line_notify_token}'}
    
    message = f'\n<{keyword}に関するツイートを一括で取得>\n'
    for user, twid in zip(collected_accounts, collected_tweetids):
        user_url = f'https://twitter.com/{user}/status/{twid}'
        message = f'{message}{user_url}\n\n'
    
    data = {'message': message}
    requests.post(line_notify_api, headers = headers, data = data)

次に、4で取得をしてきたツイートの内容やフォロワー数を元に↓のようなLINE本文を作成します。
image.png

sendlinemessage02(65~73行目)
def sendlinemessage02(collected_text, collected_follower):
    headers = {'Authorization': f'Bearer {line_notify_token}'}
    
    message = f'\n<{keyword}に関するツイートを表示>\n\n'
    for text, follower in zip(collected_text, collected_follower):
        message = f'{message}●フォロワー:{follower}\n●本文:{text}\n\n' 
    
    data = {'message': message}
    requests.post(line_notify_api, headers = headers, data = data)

おわりに

今のままだと、ツイートを取得するためにわざわざこのコードを実行しないといけません。
ですので、今後はAWSで1日ごとに実行させる等工夫が必要です。
やる気があったら今後やろうと思いますので是非、LGTMをください!!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1