[PYTHON] Unterstützen Sie sich mit der Twitter API

Einführung

Dies ist ein Artikel aus Adventskalender des Tokyo National College of Technology ① Tag 16. Da ich ein Anfänger in der Programmierung bin, denke ich, dass es viele unansehnliche Punkte gibt, aber ich würde es begrüßen, wenn Sie mir vergeben könnten.

Übrigens, es tut mir von Anfang an leid für die persönlichen Angelegenheiten, aber in letzter Zeit hat sich die Reaktion meiner Follower auf meine Tweets verlangsamt. Dies ist auch auf meine mangelnde Anstrengung zurückzuführen, aber da dies in naher Zukunft wahrscheinlich zu einem mentalen Zusammenbruch führen wird, habe ich beschlossen, selbst eine Antwort auf meinen Tweet als symptomatische Behandlung für Feuer zu senden.

Für Tweets mit negativen Wörtern, die ich oft benutze, wie "hilf mir" und "Ich bin müde", antworten sie vorerst mit Worten des Trostes, der Anstrengung und der Ermutigung mit einem dankbaren Bild. Wir wollten die herzhafte Twitter-API verwenden.

Verwendete Elemente

Annahme

How To Make

1. API-Schlüsseleinstellung

Zunächst erstellen wir standardmäßig eine neue .py-Datei getrennt von main.py und beschreiben den Prozess der Zuweisung des API-Schlüssels zu der dortigen Variablen (hier heißt sie config.py). Es ist der Dateiname).

config.py


CONSUMER_KEY = 'Erhaltener Consumer-API-Schlüssel'
CONSUMER_SECRET = 'Erhaltener geheimer Schlüssel für die Consumer-API'
ACCESS_TOKEN = 'Erhaltenes Zugriffstoken'
ACCESS_TOKEN_SECRET = 'Erhaltenes Zugriffstoken-Geheimnis' 

Damit ist die API-Schlüsseleinstellung abgeschlossen. Jetzt müssen Sie nur noch diese config.py in main.py importieren und die Variablen verwenden.

2. Beschreibung von main.py

Die Gesamtheit von main.py ist wie folgt.

main.py


#Datei(config.py)Und Module importieren
import config
import json
import random, glob, time
from requests_oauthlib import OAuth1Session
​
#OAuth-Authentifizierung
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
​
#Funktion zum Ausführen der Antwort auf Bildanhänge
def reply(replies, id):
​
    url_media = 'https://upload.twitter.com/1.1/media/upload.json'
    url_text = 'https://api.twitter.com/1.1/statuses/update.json'

    images = glob.glob('images/*')
​
    files = {'media': open(images[random.randrange(len(images))], 'rb')}
    req_media = twitter.post(url_media, files = files)
​
    media_id = json.loads(req_media.text)['media_id']
​
    params = {'status': replies[random.randrange(len(replies))], 'media_ids': [media_id], 'in_reply_to_status_id': id}
    req_text = twitter.post(url_text, params = params)
​
#Wiederholte Verarbeitung mit einem 3-Sekunden-Zyklus
while True:
​
    #Holen Sie sich Ihre neuesten Tweets und listen Sie die Keywords von ihnen auf(words)Extrahieren Sie nur diejenigen, die das entsprechende Wort enthalten
    url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
​
    params ={'count': 1}
    req = twitter.get(url, params = params)
​
    words = ['Hilf mir', 'Würzig', 'Hart', 'Nicht gut', 'Unmöglich','Ich will wegrennen', 'Nicht mögen', 'am schlimmsten', 'Ich bin müde geworden', 'Ich möchte verschwinden', 'gescheitert','Ich habe die lineare Algebra fallen lassen', 'Wiederholtes Jahr', 'ich wurde erwischt']
​
    #Liste der für die Antwort verwendeten Wörter(replies)Extrahieren Sie die darin gespeicherten Wörter nach dem Zufallsprinzip und übergeben Sie sie an die Antwortfunktion
    replies = ['Du gibst dein Bestes', 'Ich bin sicher, dass es okay ist', 'Ich war heute gerade krank', 'Es wird definitiv morgen funktionieren', 'Lass uns gut gehen, anstatt zu quetschen!', 'Mach dir um nichts Sorgen', 'Gott wird dir vergeben', 'Wie erwartet! Ich erlebe die Nöte des Lebens', 'Lass dich nicht verwöhnen', 'Erbärmlich', 'Menschliches Durcheinander']
​
    if req.status_code == 200:
        timeline = json.loads(req.text)
        for word in words:
            if word in timeline[0]['text']:
                reply(replies, timeline[0]['id_str'])
                print('Posted!')
    else:
        print('ERROR: %d' % req.status_code)
    
    time.sleep(3)

Als nächstes werde ich eine kurze Erklärung von main.py geben.


2.1. Import und OAuth-Authentifizierung

main.py


#Datei(config.py)Und Module importieren
import config
import json
import random, glob, time
from requests_oauthlib import OAuth1Session
​
#OAuth-Authentifizierung
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)

Dies entspricht fast der allgemeinen Vorlage. Zusätzlich zu "json", das zum Laden des Endpunkts und "config.py" verwendet wird, wird "request_oauthlib" zum Übergeben der OAuth-Authentifizierung, zum Importieren von "random", "glab", "time" und siehe unten verwendet. Ich benutze es für die Verarbeitung.


2.2 Funktion zum Ausführen der Antwort

main.py


#Funktion zum Ausführen der Antwort auf Bildanhänge
def reply(replies, id):
​
    url_media = 'https://upload.twitter.com/1.1/media/upload.json'
    url_text = 'https://api.twitter.com/1.1/statuses/update.json'

    images = glob.glob('images/*')
​
    files = {'media': open(images[random.randrange(len(images))], 'rb')}
    req_media = twitter.post(url_media, files = files)
​
    media_id = json.loads(req_media.text)['media_id']
​
    params = {'status': replies[random.randrange(len(replies))], 'media_ids': [media_id], 'in_reply_to_status_id': id}
    req_text = twitter.post(url_text, params = params)

Hier wird, wie in der Kommentar-Out-Anweisung angegeben, "eine Funktion definiert, die eine Antwort auf einen Bildanhang ausführt". Nach dem Posten eines Bildes können Sie eine Antwort mit dem angehängten Bild posten, indem Sie eine Antwort mit der im Parameter "media_ids" gespeicherten "['media_id']" des Bildes posten.

Die relativen Koordinaten der Bildgruppe, die lokal von "grab.grab ()" erhalten wurden, werden "Bildern" in einem Listentyp zugewiesen, und eine davon wird zufällig mit "random.randrange ()" zugewiesen. Es hat eine Struktur zum Auswählen und Veröffentlichen.

Um ehrlich zu sein, habe ich diese Funktion implementiert, um Bilder vom lokalen Standort zu erfassen. Daher denke ich, dass es besser ist, sie zu entfernen, damit sie weniger kompliziert sind.


2.3 Holen Sie sich regelmäßig die neuesten Tweets

main.py


#Wiederholte Verarbeitung mit einem 3-Sekunden-Zyklus
while True:
​
    #Holen Sie sich Ihre neuesten Tweets und listen Sie die Keywords von ihnen auf(words)Extrahieren Sie nur diejenigen, die das entsprechende Wort enthalten
    url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
​
    params ={'count': 1}
    req = twitter.get(url, params = params)
​
    words = ['Hilf mir', 'Würzig', 'Hart', 'Nicht gut', 'Unmöglich','Ich will wegrennen', 'Nicht mögen', 'am schlimmsten', 'Ich bin müde geworden', 'Ich möchte verschwinden', 'gescheitert','Ich habe die lineare Algebra fallen lassen', 'Wiederholtes Jahr', 'ich wurde erwischt']
​
    #Liste der für die Antwort verwendeten Wörter(replies)Extrahieren Sie die darin gespeicherten Wörter nach dem Zufallsprinzip und übergeben Sie sie an die Antwortfunktion
    replies = ['Du gibst dein Bestes', 'Ich bin sicher, dass es okay ist', 'Ich war heute gerade krank', 'Es wird definitiv morgen funktionieren', 'Lass uns gut gehen, anstatt zu quetschen!', 'Mach dir um nichts Sorgen', 'Gott wird dir vergeben', 'Wie erwartet! Ich erlebe die Nöte des Lebens', 'Lass dich nicht verwöhnen', 'Erbärmlich', 'Menschliches Durcheinander']
​
    if req.status_code == 200:
        timeline = json.loads(req.text)
        for word in words:
            if word in timeline[0]['text']:
                reply(replies, timeline[0]['id_str'])
                print('Posted!')
    else:
        print('ERROR: %d' % req.status_code)
    
    time.sleep(3)

Hier wird durch Ersetzen von "url" durch den Endpunkt "get own tweet" und Setzen des Parameters auf "{'count': 1}" nur der neueste erhalten. Danach wird beurteilt, ob es der Liste der im Voraus erstellten Schlüsselwörter entspricht oder nicht, und wenn es entspricht, wird der Wert an die oben erwähnte Funktion "reply ()" übergeben.

Außerdem wird es mit "while True" und "time.sleep ()" alle 3 Sekunden ausgeführt [^ 1]. Die maximale Häufigkeit, mit der "https: // api.twitter.com / 1.1 / statuses / user_timeline.json" in der Twitter-API erfasst werden kann, beträgt 900 Mal in 15 Minuten = einmal pro Sekunde, aber ich war besorgt, also gab ich ihm etwas Zeit.

Da es nur langweilig ist, Ale zu sagen, habe ich auch eine leichte Verspottung als Gewürz gemischt.

Ausführungsergebnis

Ich konnte es sicher ausführen. Wird dies die Wunde heilen?

python.exe


Posted!

Fazit

Ich möchte eine angemessene Antwort von Menschen in der nächsten Welt.

Referenzseite

Qiita-Artikel, den ich als Referenz verwendet habe

Offizielle Referenz

[^ 1]: Um genau zu sein, beträgt der Zyklus aufgrund der Spezifikationen von "time.sleep ()" nicht genau 3 Sekunden, aber in diesem Programm wird er als kleiner Fehler angesehen und sollte ignoriert werden. Zu Weitere Informationen finden Sie unter Ausführen und Überprüfen in Python in regelmäßigen Abständen.

Recommended Posts

Unterstützen Sie sich mit der Twitter API
Verwenden Sie die Twitter-API mit Python
Erfolgreiches update_with_media mit Twitter API
[Life Hack] Anna-Unterstützungsbot für Frauen mit Twitter-API
Sammeln von Informationen von Twitter mit Python (Twitter API)
Poste von einem anderen Konto mit Twitter API
Extrahieren Sie plötzliche beliebte Wörter mit der Twitter-Streaming-API
Extrudieren Sie mit der Fusion360-API
Klicken Sie nach der Oauth-Authentifizierung mit Django auf die Twitter-API
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Mit der Twitter-Streaming-API können Sie nur knuspriges Japanisch lernen
Bild herunterladen mit Flickr API
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Verwenden Sie die Trello-API mit Python
Erstellen Sie eine API mit Django
Twitter-Grafiknotiz mit Python
Holen Sie sich Twitter-Timeline mit Python
Extrahieren Sie Twitter-Daten mit CSV
API mit Flask + uWSGI + Nginx
Versuchen Sie es mit der Twitter-API
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
Informationen erhalten Sie mit zabbix api
Optimieren Sie das Sammeln von Informationen mit Twitter API und Slack Bots
Web-API mit Python + Falcon
Versuchen Sie es mit der Twitter-API
Rufen Sie die API mit python3 auf.
Suche nach Twitter-Tweets mit Python
Verwenden Sie die Unterschall-API mit Python3
Unterstützt mehrere Sitzungen mit SQL Alchemy
Präsentationsunterstützungssystem mit Python3
Qiita API Oauth mit Django
Holen Sie sich ein Ranking mit Rakuten API
Crawlen mit Python und Twitter API 2-Implementierung der Benutzersuchfunktion
Ich habe einen Twitter-Bot mit Go x Qiita API x Lambda erstellt
Betreiben Sie Nutanix mit der REST-API Teil 2
Erstellen Sie Awaitable mit der Python / C-API
Holen Sie sich Bewertungen mit Python Googlemap API
Führen Sie Rotrics DexArm mit der Python-API aus
Quine Post mit Qiita API (Python)
Twitter-Posting-Anwendung mit Django gemacht
Klicken Sie mit Python auf die Etherpad-Lite-API
Veröffentlichen Sie mehrere Twitter-Bilder mit Python
Multi-Input / Multi-Output-Modell mit funktionaler API
Erstellen Sie eine API mit hug mit mod_wsgi
Mit Python 3 einfach auf Twitter posten
Kontinuierliche Erfassung durch Twitter API (Tipps)
GraphQL-API mit graphene_django in Django
Twitter-Such-Client mit Flasche gemacht
Greifen Sie mit Python auf die Twitter-API zu
Einführung der Google Map API mit Schienen
[Memo] Tweet auf Twitter mit Python
Klicken Sie mit PowerShell auf die ERS-API von ISE
Erstellen Sie einen Twitter-BOT-Dienst mit der GAE / P + Tweepy + RIOT-API! (Teil 1)
Versuchen Sie, Websites in ganz Japan zu sammeln, die mit dem Brave-Browser mit Twitter-API kompatibel sind
Seien Sie vorsichtig, wenn Sie in regelmäßigen Abständen Tweets mit der Twitter-API abrufen