Ceci est un article du Calendrier de l'Avent du Tokyo National College of Technology ① Jour 16. Comme je suis un débutant en programmation, je pense qu'il y a beaucoup de points disgracieux, mais j'apprécierais que vous me pardonniez.
Au fait, je suis désolé d'avoir été personnellement impliqué depuis le début, mais récemment, la réaction de mes abonnés à mes tweets a ralenti. Cela est également dû à mon manque d'efforts, mais comme il est susceptible de provoquer un effondrement mental dans un proche avenir, j'ai décidé d'envoyer moi-même une réponse à mon tweet en tant que traitement symptomatique du feu.
Pour le moment, pour les tweets contenant des mots négatifs que j'utilise souvent, tels que «aidez-moi» et «je suis fatigué», ils répondent par des mots de réconfort, d'effort et d'encouragement avec une image reconnaissante. Nous visions à utiliser la copieuse API Twitter.
--Langue: Python3
How To Make
Tout d'abord, en standard, nous allons créer un nouveau fichier .py
séparément de main.py
et décrire le processus d'attribution de la clé API à la variable (ici, il est appelé config.py
). C'est le nom du fichier).
config.py
CONSUMER_KEY = 'Clé d'API consommateur obtenue'
CONSUMER_SECRET = 'Obtention de la clé secrète de l'API Consumer'
ACCESS_TOKEN = 'Jeton d'accès obtenu'
ACCESS_TOKEN_SECRET = 'Obtention du secret du jeton d'accès'
Ceci termine le paramétrage de la clé API. Il ne vous reste plus qu'à importer ce config.py
dans main.py
et à utiliser les variables.
main.py
L'ensemble de «main.py» est le suivant.
main.py
#Fichier(config.py)Et importation de modules
import config
import json
import random, glob, time
from requests_oauthlib import OAuth1Session
#Authentification OAuth
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
#Fonction pour exécuter la réponse de pièce jointe d'image
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)
#Traitement répété avec un cycle de 3 secondes
while True:
#Recevez vos derniers tweets et répertoriez les mots-clés qu'ils contiennent(words)N'extrayez que ceux qui contiennent le mot correspondant à
url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
params ={'count': 1}
req = twitter.get(url, params = params)
words = ['Aidez moi', 'Épicé', 'Dur', 'Pas bien', 'Impossible','je veux m'enfuir', 'Ne pas aimer', 'pire', 'Je suis fatigué', 'Je veux disparaître', 'échoué','J'ai abandonné l'algèbre linéaire', 'Année répétée', 'J'ai été attrapé']
#Liste des mots utilisés pour la réponse(replies)Extraire aléatoirement les mots stockés et les transmettre à la fonction de réponse
replies = ['Tu fais de ton mieux', 'Je suis sûr que ça va', 'Je suis juste tombé malade aujourd'hui', 'Cela fonctionnera certainement demain', 'Allons bien plutôt que de presser!', 'Ne t'inquiète de rien', 'Dieu te pardonnera', 'Comme prévu! Je vis les difficultés de la vie', 'Ne soyez pas gâté', 'Pathétique', 'Désordre humain']
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)
Ensuite, je donnerai une brève explication de main.py
.
main.py
#Fichier(config.py)Et importation de modules
import config
import json
import random, glob, time
from requests_oauthlib import OAuth1Session
#Authentification OAuth
CK = config.CONSUMER_KEY
CS = config.CONSUMER_SECRET
AT = config.ACCESS_TOKEN
ATS = config.ACCESS_TOKEN_SECRET
twitter = OAuth1Session(CK, CS, AT, ATS)
C'est presque le même que le modèle général. En plus de json
utilisé pour charger le point de terminaison et config.py
, requests_oauthlib
utilisé pour passer l'authentification OAuth, import random
, glab
, time
et voir ci-dessous. Je l'utilise pour le traitement.
main.py
#Fonction pour exécuter la réponse de pièce jointe d'image
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)
Ici, comme l'indique l'instruction comment-out, "définir une fonction qui exécute une réponse de pièce jointe d'image". Après avoir publié une image, vous pouvez publier une réponse avec l'image jointe en publiant une réponse avec le ['media_id']
de l'image stocké dans le paramètre media_ids
.
Dans ʻimages, les coordonnées relatives du groupe d'images obtenues localement par
grab.grab () ʻsont assignées comme type de liste, et l'une d'elles est assignée aléatoirement en utilisantrandom.randrange ()
. Il a une structure pour sélectionner et publier.
Pour être honnête, j'ai implémenté cette fonction pour acquérir des images du local, donc je pense qu'il vaudrait mieux la supprimer pour que ce soit moins compliqué.
main.py
#Traitement répété avec un cycle de 3 secondes
while True:
#Recevez vos derniers tweets et répertoriez les mots-clés qu'ils contiennent(words)N'extrayez que ceux qui contiennent le mot correspondant à
url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
params ={'count': 1}
req = twitter.get(url, params = params)
words = ['Aidez moi', 'Épicé', 'Dur', 'Pas bien', 'Impossible','je veux m'enfuir', 'Ne pas aimer', 'pire', 'Je suis fatigué', 'Je veux disparaître', 'échoué','J'ai abandonné l'algèbre linéaire', 'Année répétée', 'J'ai été attrapé']
#Liste des mots utilisés pour la réponse(replies)Extraire aléatoirement les mots stockés et les transmettre à la fonction de réponse
replies = ['Tu fais de ton mieux', 'Je suis sûr que ça va', 'Je suis juste tombé malade aujourd'hui', 'Cela fonctionnera certainement demain', 'Allons bien plutôt que de presser!', 'Ne t'inquiète de rien', 'Dieu te pardonnera', 'Comme prévu! Je vis les difficultés de la vie', 'Ne soyez pas gâté', 'Pathétique', 'Désordre humain']
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)
Ici, en remplaçant le point de terminaison "get own tweet" par ʻurlet en définissant le paramètre sur
{'count': 1}, seul le dernier est obtenu. Après cela, on juge si cela correspond à la liste de mots-clés préparée à l'avance ou non, et si cela correspond, la valeur est passée à la fonction
reply ()` mentionnée ci-dessus.
De plus, par while True
et time.sleep ()
, il est exécuté toutes les 3 secondes [^ 1]. Le nombre maximum de fois que https: // api.twitter.com / 1.1 / statuses / user_timeline.json
peut être acquis dans l'API Twitter est de 900 fois en 15 minutes = une fois par seconde, mais j'étais inquiet, alors je lui ai donné un peu de temps supplémentaire.
De plus, comme c'est ennuyeux de dire de la bière, j'ai mélangé une légère raillerie comme une épice.
J'ai pu l'exécuter en toute sécurité. Est-ce que cela guérira la blessure?
python.exe
Posted!
Je veux une réponse correcte des humains dans le monde à venir.
[^ 1]: Pour être exact, en raison des spécifications de time.sleep ()
, le cycle n'est pas exactement de 3 secondes, mais dans ce programme, il est considéré comme une erreur mineure et doit être ignoré. À Pour plus d'informations, consultez Comment exécuter et valider en Python à intervalles réguliers.
Recommended Posts