Ich habe versucht, einen Mastodon-Bot zu erstellen, und es war überraschend einfach, also werde ich es zusammenfassen. Die einzige Bibliothek, die verwendet werden kann, ist "Mastodon.py". Bitte leiten Sie sie im Voraus weiter.
Erhalten Sie zunächst die Informationen zur Registrierung und Authentifizierung der Anwendung auf der Mastodon-Seite. Es ist in Ordnung, dies zu Beginn einmal zu tun. Löschen Sie es also oder kommentieren Sie es aus, wenn Sie fertig sind.
setup.py
from mastodon import Mastodon
url = "imastodon.net" #Adresse der zu verwendenden Instanz
Mastodon.create_app("OtakuCDDB", #Lassen Sie uns den Kundennamen frei entscheiden
api_base_url=url,
to_file="cred.txt"
)
mastodon = Mastodon(
client_id="cred.txt",
api_base_url=url
)
mastodon.log_in(
"****@*****", #Login-E-Mail-Adresse
"******", #Passwort
to_file="auth.txt"
)
Ich habe es in den Authentifizierungsinformationen cred.txt und auth.txt gespeichert, damit ich es ab dem nächsten Mal für die Authentifizierung verwenden kann. Der Clientschlüssel und das Clientgeheimnis werden übrigens in cred.txt und das Zugriffstoken in auth.txt gespeichert.
Jetzt machen wir den Bot-Körper. Dieses Mal erstellen wir einen Bot, der auf die API trifft und das Ergebnis basierend auf dem in der Antwort gesendeten Inhalt zurückgibt.
bot.py
from mastodon import Mastodon, StreamListener
import requests
class Stream(StreamListener):
def __init__(self): #Erbe
super(Stream, self).__init__()
# self.logger = logging.getLogger
def on_notification(self,notif): #Wird aufgerufen, wenn eine Benachrichtigung eingeht
if notif['type'] == 'mention': #Überprüfen Sie, ob der Inhalt der Benachrichtigung eine Antwort ist
content = notif['status']['content'] #Es ist der Hauptteil der Antwort
id = notif['status']['account']['username']
st = notif['status']
main(content, st, id)
def main(content,st,id):
req = content.rsplit(">")[-2].split("<")[0].strip() #Entfernen Sie zusätzliche Informationen aus dem Hauptteil der Antwort
r_date = requests.get(url + "?title=" + req, headers="") #Hit api
print(req)
try:
r = r_date.json()["Items"][0] #Verarbeiten Sie die zurückgegebenen Daten ein wenig
resr = "\n" + "Song Titel:" + r["Title"] + "\n" + \ #Ich werde den Hauptteil der Antwort machen
"Künstlername:" + r["Artist"] + "\n" + \
"Vokal:" + ",".join(r["Vocal"]) + "\n" + \
"Text:" + ",".join(r["Word"]) + "\n" + \
"Komposition:" + ",".join(r["Composer"]) + "\n" + \
"Anordnung:" + ",".join(r["Arranger"]) + "\n" + \
"die Arbeit:" + ",".join(r["TieUp"]) + "\n" + \
"Marke:" + ",".join(r["Brand"]) + "\n" + \
"Genre:" + ",".join(r["Genre"])
except IndexError: #Wenn die Daten nicht registriert sind, wird ein Fehler ausgegeben und behoben.
resr = "Dieses Lied ist nicht registriert"
mastodon.status_reply(st,
resr,
id,
visibility='unlisted') #Nicht aufgeführt
mastodon = Mastodon(
client_id = "cred.txt",
access_token = "auth.txt",
api_base_url = "https://imastodon.net") #Beispiel
url = "https://********" #API-URL
notif = mastodon.notifications() #Erhalten Sie Benachrichtigungen
count = 0
while True:
if notif[count]['type'] == 'mention':
if notif[count]['status']['replies_count'] == 0: #Überprüfen Sie, ob die Antwort bereits erfolgt ist
content = notif[count]['status']['content']
id = notif[count]['status']['account']['username']
st = notif[count]['status']
main(content, st, id)
count += 1
else:
break
else:
count += 1
count += 1
mastodon.stream_user(Stream()) #Stream starten
Wenn Sie die Benachrichtigung bisher beim Start erhalten und keine Antwort erhalten, werden wir umgehend darauf antworten. Es ist in Ordnung, hier herumzuspringen, weil ich nur auf die Antwort antworten wollte, die geflogen ist, als das Programm nicht verfügbar war.
Sobald der Stream gestartet ist, wird on_notification (self, notif) aufgerufen, wenn die Benachrichtigung fliegt. Fügen Sie daher hier die Antwortfunktion hinzu. Es macht auch keinen Sinn, auf Neustarts oder Favoriten zu antworten. Überprüfen Sie daher, ob die Benachrichtigung eine Antwort ist. Es scheint keinen bequemen Weg zu geben, nur Antworten zu erhalten. Lassen Sie uns danach verschiedene Verarbeitungen entsprechend durchführen und die Antwort mit mastodon.status_reply überspringen das ist alles. War es nicht überraschend einfach?
Dokumentation Beispiel mit Stream-API in Mastodon.py 50 Python Reverse Sample Codes (Mastodon API-Anfänger) [Python] Ich habe einen Mastodon-Bot erstellt und ausprobiert!
Recommended Posts