[PYTHON] Soutenez-vous avec l'API Twitter

introduction

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.

Éléments utilisés

--Langue: Python3

supposition

How To Make

1. Paramètre de clé API

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.

2. Description de 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.


2.1. Importation et authentification OAuth

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.


2.2. Fonction d'exécution de la réponse

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é.


2.3. Recevez régulièrement les derniers tweets

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.

Résultat d'exécution

J'ai pu l'exécuter en toute sécurité. Est-ce que cela guérira la blessure?

python.exe


Posted!

Conclusion

Je veux une réponse correcte des humains dans le monde à venir.

Site de référence

Article Qiita que j'ai utilisé comme référence

Référence officielle

[^ 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

Soutenez-vous avec l'API Twitter
Utiliser l'API Twitter avec Python
Update_with_media réussi avec l'API Twitter
[Life hack] Bot de support Anna pour femmes avec API Twitter
Collecter des informations sur Twitter avec Python (API Twitter)
Publier à partir d'un autre compte avec l'API Twitter
Extraire des mots populaires soudains avec l'API de streaming Twitter
Extruder avec l'API Fusion360
Accédez à l'API Twitter après l'authentification Oauth avec Django
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Choisissez uniquement du japonais croustillant avec l'API de streaming Twitter
Téléchargement d'image avec l'API Flickr
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Utiliser l'API Trello avec python
Créer une API avec Django
Mémo graphique Twitter avec Python
Obtenez la chronologie Twitter avec Python
Extraire les données Twitter avec CSV
API avec Flask + uWSGI + Nginx
Essayez d'utiliser l'API Twitter
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
Obtenir des informations avec l'API Zabbix
Rationalisez la collecte d'informations avec l'API Twitter et les robots Slack
API Web avec Python + Falcon
Essayez d'utiliser l'API Twitter
Appelez l'API avec python3.
Rechercher des tweets Twitter avec Python
Utiliser l'API subsonique avec python3
Prise en charge de plusieurs sessions avec SQL Alchemy
Système de support de présentation avec Python3
Qiita API Oauth avec Django
Obtenez un classement avec l'API Rakuten
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs
J'ai créé un bot Twitter avec Go x Qiita API x Lambda
Utilisez Nutanix avec l'API REST, partie 2
Créer Awaitable avec l'API Python / C
Obtenez des avis avec l'API googlemap de python
Exécutez Rotrics DexArm avec l'API Python
Quine Post avec l'API Qiita (Python)
Application de publication sur Twitter réalisée avec Django
Accédez à l'API Etherpad-lite avec Python
Publiez plusieurs images Twitter avec python
Modèle multi-entrées / multi-sorties avec API fonctionnelle
Créez une API en utilisant hug avec mod_wsgi
Publiez facilement sur Twitter avec Python 3
Acquisition continue par l'API Twitter (Astuces)
API GraphQL utilisant graphene_django dans Django
Client de recherche Twitter fait avec bouteille
Accéder à l'API Twitter avec Python
Présentation de l'API Google Map avec rails
[Memo] Tweet sur Twitter avec Python
Hit API ERS d'ISE avec PowerShell
Créez un service Twitter BOT avec GAE / P + Tweepy + RIOT API! (Partie 1)
Essayez de collecter des sites partout au Japon compatibles avec le navigateur Brave avec l'API Twitter
Soyez prudent lorsque vous récupérez des tweets à intervalles réguliers avec l'API Twitter