import tweepy import time import datetime from tweepy import StreamingClient, StreamRule import os import signal from elasticsearch import Elasticsearch es = Elasticsearch("http://localhost:9200") bearer_token = "***secret***" client = tweepy.Client(bearer_token=bearer_token) mots_a_suivre = ['#cyberattaque', '#cyberdéfense', '#FIC2023', '@FIC_eu','@FICAmNord'] class TweetPrinterV2(tweepy.StreamingClient): def on_connect(self): print("connected") def on_tweet(self, tweet): index_type = "tweet" if tweet.referenced_tweets: index_type = tweet.referenced_tweets[0]["type"] print("type : ", index_type) author_id = tweet.author_id user = client.get_users(ids=author_id, user_fields=["username"]) username = user.data[0].username words = [] for mot in mots_a_suivre: if (mot.upper() in tweet.text.upper()): words.append(mot) print("tweet author id : ", tweet.author_id) print("tweet author username : ", username) print("Date : ", tweet.created_at) print("Text : \n", tweet.text) metric = tweet.public_metrics print("nb like : ", metric["like_count"]) print("nb retweets :", metric["retweet_count"]) print("localisation : ", tweet.geo) print("mots : ", words) print("-"*50) es.index(index='bot_twitter', doc_type="tweet", body={ 'id' : tweet.id, 'tweet_type' : index_type, 'author_id': author_id, 'author_username': username, 'text': tweet.text, 'date': tweet.created_at, 'location': tweet.geo, 'likes': metric["like_count"], 'retweets': metric["retweet_count"], 'words' : words }) time.sleep(3) printer = TweetPrinterV2(bearer_token) def del_rules(printer): # clean-up pre-existing rules rule_ids = [] result = printer.get_rules() print("old_rules : ", result.data) if result.data: for rule in result.data: print(f"rule marked to delete: {rule.id} - {rule.value}") rule_ids.append(rule.id) if(len(rule_ids) > 0): printer.delete_rules(rule_ids) printer = TweetPrinterV2(bearer_token) else: print("no rules to delete") for mots in mots_a_suivre: rule = StreamRule(value=mots) printer.add_rules(rule) del_rules(printer) printer.filter(tweet_fields=["referenced_tweets","created_at","geo", "public_metrics"], expansions=["author_id"], user_fields=["username"])