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.
How To Make
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.
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.
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.
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.
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.
Ich konnte es sicher ausführen. Wird dies die Wunde heilen?
python.exe
Posted!
Ich möchte eine angemessene Antwort von Menschen in der nächsten Welt.
[^ 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