[PYTHON] Un script qui transfère les tweets contenant des mots-clés spécifiques sur Twitter vers Slack en temps réel.

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.

Schéma du système

Imaginez cette configuration système. Cet article présente un exemple du script twitter_monitoring.py en bas à gauche de cette figure.

システム構成図03.png

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éparation préalable

Préparez-vous à utiliser l'API Twitter et l'API Slack.

Créer un compte API Twitter

Jeton à acquérir

Ce n'est pas grave si vous créez un compte API Twitter et obtenez les 4 jetons suivants.

Comment faire

Pour savoir comment créer un compte, le site suivant a été utile.

Créer un Slackbot

À partir de la page API Slack, créez un bot pour être l'utilisateur qui publie le tweet.

Jeton à acquérir

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.

Comment faire

Pour savoir comment créer Slackbot, le site suivant a été utile.

Portée (permission)

Pour le paramètre de portée (autorisation) de Slackbot, il suffit d'autoriser uniquement chat: write à cet effet.

Script Python

Je vais vous expliquer le twitter_monitoring.py créé cette fois.

Code entier

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}')

Paramètres de réglage

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 Twitter consumer_key Twitter API key
jeton Twitter consumer_secret Twitter API secret key
jeton Twitter access_token Twitter Access token
jeton Twitter access_token_secret Twitter Access token secret
jeton Slack bot_token Slack Bot User OAuth Access Token
Paramètres Twitter 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.

Paramètres de journalisation

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.

Méthode d'exécution du script

Exécutez le script Python par la méthode suivante.

Bibliothèque Python

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

Commande d'exécution

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.

Remarques

Recommended Posts

Un script qui transfère les tweets contenant des mots-clés spécifiques sur Twitter vers Slack en temps réel.
Enregistrer les tweets contenant des mots-clés spécifiques sur Twitter au format CSV
Programme Python qui recueille quotidiennement des tweets contenant des mots-clés spécifiques et les enregistre en csv
Continuez à récupérer des tweets contenant des mots-clés spécifiques à l'aide de l'API Streaming en Python
Notification Slack lorsqu'un mot spécifique est murmuré sur Twitter en utilisant Heroku avec python
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois
Comment arrêter le programme jusqu'à une date et une heure spécifiques en python
J'ai refactoré "J'ai essayé de faire un script qui enregistre les images postées à la fois en retournant sur les tweets d'un utilisateur spécifique sur Twitter".
L'histoire de la création de Botonyan qui renvoie le contenu de Google Docs en réponse à un mot-clé spécifique sur Slack
Extraire des lignes contenant une "chaîne" spécifique avec Pandas
Comment compter les nombres dans une plage spécifique
Obtenir des lignes contenant des éléments spécifiques dans np.where
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Un script python qui souhaite utiliser l'heure de démarrage / fin de Mac pour la gestion des présences
Une solution au problème que les fichiers contenant [et] ne sont pas répertoriés dans glob.glob ()
J'ai fait un script pour mettre un extrait dans README.md
Un mémorandum pour exécuter un script python dans un fichier bat
Que contient cette variable (lorsque le script Python est en cours d'exécution)
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
Essayez la détection des visages en temps réel à l'aide d'une webcam
[Note] Un script shell qui vérifie l'utilisation du processeur d'un processus spécifique dans une boucle while.