Apprenez à surveiller Twitter et à transférer des tweets contenant des mots clés spécifiques vers Slack en temps réel. Le script est python3, et l'API Twitter statuses / filter.json
est utilisée pour obtenir des tweets en temps réel.
Imaginez cette configuration système. Cet article présente un exemple du script twitter_monitoring.py
en bas à gauche de cette figure.
Le comportement du script est d'obtenir des tweets contenant des mots-clés spécifiques avec l'API Twitter statuses / filter.json
et de laisser Slackbot publier les tweets sur n'importe quel canal via l'API Slack.
Préparez-vous à utiliser l'API Twitter et l'API Slack.
Ce n'est pas grave si vous créez un compte API Twitter et obtenez les 4 jetons suivants.
Pour savoir comment créer un compte, le site suivant a été utile.
À partir de la page API Slack, créez un bot pour être l'utilisateur qui publie le tweet.
Après avoir créé le Slackbot, vous pouvez obtenir les jetons suivants à partir de la page «OAuth et autorisations» du site de gestion de l'API Slack.
Pour savoir comment créer Slackbot, le site suivant a été utile.
Pour le paramètre de portée (autorisation) de Slackbot, il suffit d'autoriser uniquement chat: write
à cet effet.
Je vais vous expliquer le twitter_monitoring.py
créé cette fois.
Vous trouverez ci-dessous un exemple de codage d'un script Python (45 lignes au total).
twitter_monitoring.py
# coding: utf-8
import json
import logging
from time import sleep
import requests_oauthlib
import slack
# Parameters
keyword = 'keyword' #Spécifiez un mot-clé de recherche
# Twitter parameters
consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxx' # Twitter API key
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Twitter API secret key
access_token = '9999999999999999999-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Twitter Access token
access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # Twitter Access token secret
# Slack parameters
bot_token = "xoxb-999999999999-9999999999999-xxxxxxxxxxxxxxxxxxxxxxxx" # Slack Bot User OAuth Access Token
channel_id = 'xxxxxxxxxxx' # Slack channel ID
# Logging
logging.basicConfig(filename='twitter_monitoring.log', format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.WARNING)
#En traitement
uri = 'https://stream.twitter.com/1.1/statuses/filter.json'
twitter_session = requests_oauthlib.OAuth1Session(consumer_key, consumer_secret, access_token, access_token_secret)
slack_client = slack.WebClient(token = bot_token)
while True:
try:
logging.info("Request to Twitter API.")
twitter_response = twitter_session.post(uri, data=dict(track=keyword), stream=True)
if twitter_response.status_code != 200: #Si vous êtes pris dans la limite de taux Twitter, etc.
logging.warning("status_code:%s, reason:%s", twitter_response.status_code, twitter_response.reason)
sleep(900) #Attendez 15 minutes
continue
for line in twitter_response.iter_lines():
if not line: #Aucun tweet correspondant
logging.info("No any tweets.")
continue
tweet_dict = json.loads(line.decode("utf-8"))
tweet_link = 'https://twitter.com/i/web/status/' + tweet_dict['id_str']
slack_response = slack_client.chat_postMessage(channel = channel_id , text = tweet_link) #Transférer les liens de Tweet vers Slack
except Exception as e:
logging.error(f'{e}')
Le code lui-même étant court, cet exemple incorpore les paramètres de configuration dans le script. Spécifiez les valeurs de divers jetons et paramètres dans les variables ci-dessous.
Classification | Cible | Nom de variable | La description |
---|---|---|---|
jeton | consumer_key | Twitter API key | |
jeton | consumer_secret | Twitter API secret key | |
jeton | access_token | Twitter Access token | |
jeton | access_token_secret | Twitter Access token secret | |
jeton | Slack | bot_token | Slack Bot User OAuth Access Token |
Paramètres | keyword | Mots-clés de recherche Twitter | |
Paramètres | Slack | channel_id | Publier sur l'ID de chaîne Slack[^1] |
[^ 1]: fin de l'URL du lien pour la chaîne Slack.
L'exécution de ce script avec des mots-clés communs pour les mots-clés peut submerger la chaîne Slack de destination avec un grand nombre de tweets, c'est donc une bonne idée de l'essayer d'abord avec une chaîne de test Slack.
J'ai mis le paramètre logging
pour le débogage, mais vous pouvez le supprimer si vous n'en avez pas besoin. Si vous l'exécutez tel quel, l'opération suivante sera effectuée.
twitter_monitoring.log
est sorti dans le même répertoire au moment de l'exécution.logging.info
, modifiez le paramètre level
de logging.basicConfig
dans le code en logging.INFO
à l'avance.Exécutez le script Python par la méthode suivante.
Installez à l'avance la bibliothèque Python requise.
sudo pip install --upgrade pip
sudo pip install slackclient
sudo pip install requests_oauthlib
sudo pip install logging
Exécutez le script python avec la commande suivante.
nohup python twitter_monitoring.py &
L'exécution avec nohup garantit que le script continue de s'exécuter même si vous vous déconnectez de l'exécuteur Python.
c'est tout. Après exécution, assurez-vous que le lien du tweet contenant la chaîne de caractères spécifiée dans mot-clé continue d'être transféré vers le canal Slack de destination en temps réel.
Recommended Posts