[PYTHON] Ein Skript, das Tweets mit bestimmten Schlüsselwörtern auf Twitter in Echtzeit an Slack überträgt.

Erfahren Sie, wie Sie Twitter überwachen und Tweets mit bestimmten Schlüsselwörtern in Echtzeit an Slack weiterleiten. Das Skript ist python3 und die Twitter-API "statuses / filter.json" wird verwendet, um Tweets in Echtzeit abzurufen.

Systemschema

Stellen Sie sich diese Systemkonfiguration vor. Dieser Artikel enthält ein Beispiel für das Skript "twitter_monitoring.py" unten links in dieser Abbildung.

システム構成図03.png

Das Verhalten des Skripts besteht darin, Tweets mit bestimmten Schlüsselwörtern mit der Twitter-API "statuses / filter.json" abzurufen und Slackbot die Tweets über die Slack-API auf einem beliebigen Kanal veröffentlichen zu lassen.

Vorbereitungen

Machen Sie sich bereit, die Twitter-API und die Slack-API zu verwenden.

Erstellen Sie ein Twitter-API-Konto

Token erworben werden

Es ist in Ordnung, wenn Sie ein Twitter-API-Konto erstellen und die folgenden 4 Token erhalten.

Wie man ... macht

Für die Erstellung eines Kontos war die folgende Website hilfreich.

Slackbot erstellen

Erstellen Sie auf der Slack-API-Seite einen Bot als Benutzer für Tweet-Posts.

Token erworben werden

Nach dem Erstellen des Slackbot ist es in Ordnung, wenn Sie die folgenden Token auf der Seite "OAuth & Permissions" der Slack API-Verwaltungssite abrufen können.

Wie man ... macht

Für die Erstellung von Slackbot war die folgende Website hilfreich.

Geltungsbereich (Erlaubnis)

Für die Einstellung des Gültigkeitsbereichs (Berechtigung) von Slackbot reicht es aus, nur "chat: write" für diesen Zweck zuzulassen.

Python-Skript

Ich werde etwas über die diesmal erstellte twitter_monitoring.py erklären.

Ganzer Code

Unten finden Sie ein Codierungsbeispiel für ein Python-Skript (insgesamt 45 Zeilen).

twitter_monitoring.py


# coding: utf-8
import json
import logging
from time import sleep

import requests_oauthlib
import slack

# Parameters
keyword = 'keyword' #Geben Sie ein Suchschlüsselwort an

# 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)

#wird bearbeitet
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: #Wenn Sie in das Twitter-Ratenlimit usw. geraten.
            logging.warning("status_code:%s, reason:%s", twitter_response.status_code, twitter_response.reason)
            sleep(900) #Warten Sie 15 Minuten
            continue
        for line in twitter_response.iter_lines():
            if not line: #Kein entsprechender Tweet
                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) #Übertragen Sie Tweet-Links zu Slack
    except Exception as e:
         logging.error(f'{e}')

Parameter einstellen

Da der Code selbst kurz ist, werden in diesem Beispiel die Konfigurationsparameter in das Skript eingebettet. Geben Sie die Werte verschiedener Token und Parameter in den folgenden Variablen an.

Einstufung Ziel Variablennamen Erläuterung
Zeichen Twitter consumer_key Twitter API key
Zeichen Twitter consumer_secret Twitter API secret key
Zeichen Twitter access_token Twitter Access token
Zeichen Twitter access_token_secret Twitter Access token secret
Zeichen Slack bot_token Slack Bot User OAuth Access Token
Parameter Twitter keyword Twitter-Suchbegriffe
Parameter Slack channel_id Post an Slack Channel ID[^1]

[^ 1]: Das Ende der Link-URL für den Slack-Kanal.

Das Ausführen dieses Skripts mit allgemeinen Schlüsselwörtern für Schlüsselwörter kann den Ziel-Slack-Kanal mit einer großen Anzahl von Tweets überfordern. Daher ist es eine gute Idee, es zuerst mit einem Test-Slack-Kanal zu versuchen.

Protokollierungseinstellungen

Ich habe die Einstellung "Protokollierung" für das Debuggen festgelegt, aber Sie können sie löschen, wenn Sie sie nicht benötigen. Wenn Sie es so ausführen, wie es ist, wird der folgende Vorgang ausgeführt.

Skriptausführungsmethode

Führen Sie das Python-Skript mit der folgenden Methode aus.

Python-Bibliothek

Installieren Sie die erforderliche Python-Bibliothek im Voraus.

sudo pip install --upgrade pip
sudo pip install slackclient
sudo pip install requests_oauthlib
sudo pip install logging

Ausführungsbefehl

Führen Sie das Python-Skript mit dem folgenden Befehl aus.

nohup python twitter_monitoring.py &

Durch Ausführen mit nohup wird sichergestellt, dass das Skript auch dann weiter ausgeführt wird, wenn Sie sich vom Python-Executor abmelden.

das ist alles. Stellen Sie nach der Ausführung sicher, dass der Link des Tweets mit der im Schlüsselwort angegebenen Zeichenfolge weiterhin in Echtzeit auf den Ziel-Slack-Kanal übertragen wird.

Bemerkungen

Recommended Posts

Ein Skript, das Tweets mit bestimmten Schlüsselwörtern auf Twitter in Echtzeit an Slack überträgt.
Speichern Sie Tweets mit bestimmten Schlüsselwörtern auf Twitter als CSV
Python-Programm, das täglich Tweets mit bestimmten Schlüsselwörtern sammelt und in CSV speichert
Rufen Sie weiterhin Tweets mit bestimmten Schlüsselwörtern mithilfe der Streaming-API in Python ab
Slack-Benachrichtigung, wenn ein bestimmtes Wort auf Twitter mit Heroku mit Python gemurmelt wird
Ich habe versucht, ein Skript zu erstellen, das die Tweets eines bestimmten Benutzers auf Twitter verfolgt und das veröffentlichte Bild sofort speichert
So stoppen Sie das Programm bis zu einem bestimmten Datum und einer bestimmten Uhrzeit in Python
Ich habe "Ich habe versucht, ein Skript zu erstellen, das gepostete Bilder sofort speichert, indem ich zu den Tweets eines bestimmten Benutzers auf Twitter zurückgekehrt bin" überarbeitet.
Die Geschichte der Erstellung von Botonyan, das den Inhalt von Google Text & Tabellen als Antwort auf ein bestimmtes Keyword in Slack zurückgibt
Extrahieren Sie mit Pandas Zeilen, die eine bestimmte "Zeichenfolge" enthalten
So zählen Sie Zahlen in einem bestimmten Bereich
Ruft Zeilen mit bestimmten Elementen in np.where ab
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
Ein Python-Skript, das die Start- / Endzeit des Mac für die Anwesenheitsverwaltung verwenden möchte
Eine Lösung für das Problem, dass Dateien mit [und] nicht in glob.glob () aufgeführt sind
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Versuchen Sie, Tweets mithilfe der Twitter-API in großen Mengen zu löschen
Versuchen Sie die Gesichtserkennung in Echtzeit mit einer Webkamera
[Hinweis] Ein Shell-Skript, das die CPU-Auslastung eines bestimmten Prozesses in einer while-Schleife überprüft.