J'ai essayé de faire un bot Mastodon et c'était étonnamment facile, donc je vais le résumer. La seule bibliothèque à utiliser est "Mastodon.py", veuillez donc la pipeter à l'avance.
Tout d'abord, obtenez les informations d'enregistrement et d'authentification de l'application côté Mastodon. Vous pouvez le faire une fois au début, alors supprimez-le ou commentez-le lorsque vous avez terminé.
setup.py
from mastodon import Mastodon
url = "imastodon.net" #Adresse de l'instance à utiliser
Mastodon.create_app("OtakuCDDB", #Décidons librement le nom du client
api_base_url=url,
to_file="cred.txt"
)
mastodon = Mastodon(
client_id="cred.txt",
api_base_url=url
)
mastodon.log_in(
"****@*****", #adresse e-mail de connexion
"******", #mot de passe
to_file="auth.txt"
)
Je l'ai sauvegardé dans les informations d'authentification, cred.txt et auth.txt, donc je vais l'utiliser pour l'authentification la prochaine fois. À propos, la clé client et le secret client sont stockés dans cred.txt et le jeton d'accès est stocké dans auth.txt.
Maintenant, faisons le corps du bot. Cette fois, nous allons créer un bot qui accède à l'API et renvoie le résultat en fonction du contenu envoyé dans la réponse.
bot.py
from mastodon import Mastodon, StreamListener
import requests
class Stream(StreamListener):
def __init__(self): #Héritage
super(Stream, self).__init__()
# self.logger = logging.getLogger
def on_notification(self,notif): #Appelé lorsqu'une notification arrive
if notif['type'] == 'mention': #Vérifiez si le contenu de la notification est une réponse
content = notif['status']['content'] #C'est le corps principal de la réponse
id = notif['status']['account']['username']
st = notif['status']
main(content, st, id)
def main(content,st,id):
req = content.rsplit(">")[-2].split("<")[0].strip() #Supprimer les informations supplémentaires du corps de la réponse
r_date = requests.get(url + "?title=" + req, headers="") #Hit api
print(req)
try:
r = r_date.json()["Items"][0] #Traitez un peu les données renvoyées
resr = "\n" + "Titre de la chanson:" + r["Title"] + "\n" + \ #Je vais faire le corps de la réponse
"Nom d'artiste:" + r["Artist"] + "\n" + \
"vocal:" + ",".join(r["Vocal"]) + "\n" + \
"Paroles:" + ",".join(r["Word"]) + "\n" + \
"Composition:" + ",".join(r["Composer"]) + "\n" + \
"Arrangement:" + ",".join(r["Arranger"]) + "\n" + \
"l'oeuvre:" + ",".join(r["TieUp"]) + "\n" + \
"marque:" + ",".join(r["Brand"]) + "\n" + \
"Genre:" + ",".join(r["Genre"])
except IndexError: #Si les données ne sont pas enregistrées, une erreur sera générée et elle sera traitée.
resr = "Cette chanson n'est pas enregistrée"
mastodon.status_reply(st,
resr,
id,
visibility='unlisted') #Non listé
mastodon = Mastodon(
client_id = "cred.txt",
access_token = "auth.txt",
api_base_url = "https://imastodon.net") #exemple
url = "https://********" #URL de l'API
notif = mastodon.notifications() #Avoir des notifications
count = 0
while True:
if notif[count]['type'] == 'mention':
if notif[count]['status']['replies_count'] == 0: #Vérifiez si la réponse a déjà été faite
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()) #Lancer le flux
Tout d'abord, si vous recevez la notification jusqu'à présent au démarrage et qu'il n'y a pas de réponse, nous y répondrons immédiatement. Il est normal de sauter ici parce que je voulais simplement répondre à la réponse qui a volé lorsque le programme était en panne.
Une fois le flux démarré, on_notification (self, notif) sera appelé lorsque la notification vole, alors incluez la fonction de réponse ici. De plus, il ne sert à rien de répondre aux redémarrages ou aux favoris, alors vérifiez si la notification est une réponse. Il ne semble pas y avoir de moyen pratique d’obtenir uniquement des réponses. Après cela, faisons divers traitements de manière appropriée et sautons la réponse avec mastodon.status_reply c'est tout. N'était-ce pas étonnamment facile?
Documentation Exemple utilisant l'API de flux dans Mastodon.py 50 exemples de codes inversés Python (API Mastodon débutants) [Python] J'ai créé un bot Mastodon et l'ai essayé!