[PYTHON] Obtenez des images d'utilisateurs spécifiques sur Twitter

introduction

Ceci est un article du SLP KBIT Advent Calendar 2019. J'ai toujours voulu collecter des images sur Twitter, alors j'en ai profité pour le faire. Ce programme est un programme qui télécharge des images à partir de tweets d'un compte spécifique.

environnement

Python3.7.5

Préparation

Puisque l'image publiée sur Twitter sera affichée cette fois, vous aurez besoin d'une clé pour cela. J'omettrai la méthode d'obtention de la clé car elle sortira si vous google. Puisque tweepy est utilisé, installez-le.

pip install tweepy

Créez un fichier pour mettre la clé obtenue. Il peut être au même emplacement que le fichier exécutable, mais je préfère personnellement celui-ci ...

config.py


CONFIG1 = {
    "CONSUMER_KEY":"XXXXXXXXXXX",
    "CONSUMER_SECRET":"XXXXXXXXXXXX",
    "ACCESS_TOKEN":"XXXXXXXXXXXXXXXXXXX",
    "ACCESS_SECRET":"XXXXXXXXXXXXXXXXX",
   }

Acquisition d'image

Importez ce dont vous avez besoin et apportez la clé depuis config.py. Les trois dernières lignes sont nécessaires pour utiliser l'API.

twitter.py


import tweepy
from config import CONFIG
import urllib.request
import re


CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

api = tweepy.API(auth)

Programme complet

C'est un programme qui s'exécute sur le terminal, et lorsqu'un identifiant est donné, les tweets sont acquis à partir du compte avec cet identifiant, et s'il y a un tweet d'image, il est téléchargé.

twitter.py


import tweepy
from config import CONFIG2
import urllib.request
import re


CONSUMER_KEY = CONFIG["CONSUMER_KEY"]
CONSUMER_SECRET = CONFIG["CONSUMER_SECRET"]
ACCESS_TOKEN = CONFIG["ACCESS_TOKEN"]
ACCESS_SECRET = CONFIG["ACCESS_SECRET"]

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)

api = tweepy.API(auth)

#Recherche par mots-clés
def log(user_name, count, id):
    result_url = []
    for i in range(0, 2):
        results = api.user_timeline(screen_name=user_name, count=count, max_id=id)
        id = results[-1].id
        for result in results:
            if 'media' in result.entities:
                judg = 'RT @' in result.text
                if judg == False:
                    for media in result.extended_entities['media']:
                        result_url.append(media['media_url'])
    return result_url

def extract_pic_file(image_url):
    m = re.search(r"(([A-Za-z0-9]|_)+\.(png|jpg))", image_url)
    if m:
        name = 'img_dl/' + m.group(0)
    else:
        name = 'img_dl/None.png'

    return name

def save_image(url, name):
    count = 1
    for image_url in url:
        file_name = extract_pic_file(image_url)
        urllib.request.urlretrieve(image_url, file_name)
        count += 1

def fast(user_name):
    results = api.user_timeline(screen_name=user_name, count="1")
    for result in results:
        id = result.id
    return id

def start():
    count = 100
    user_name = input("Entrer l'ID>>")
    id = fast(user_name)
    url = log(user_name, count, id - 1)
    save_image(url, user_name)

if __name__ == "__main__":
    start()

couler

Obtenez l'URL avec la fonction de journal et enregistrez l'image dans le dossier spécifié avec la fonction save_image.

Description de la fonction

fonction de journalisation

Vous recevrez l'ID de compte, le nombre de tweets acquis et l'ID de tweet comme arguments. Nous passerons les résultats dans une déclaration for. L'URL de l'image est stockée dans un format de type json, alors retirez-la et stockez-la dans result_url. Faites-en une valeur de retour. Je ne veux pas que l'image soit retweetée cette fois, alors j'essaye de l'exclure avec l'instruction if.

sava_image Comme son nom l'indique, c'est une fonction qui enregistre une image. À ce moment-là, une erreur se produira lors de l'enregistrement avec l'URL, appelez donc la fonction extract_pic_file pour convertir le nom du fichier.

Fonction extract_pic_file

Le nom de fichier de l'image est décidé à partir de l'URL à l'aide d'une expression régulière. Cela empêchera l'image d'être couverte lors de la récupération de l'image à partir du même compte.

fonction rapide

Il s'agit d'un processus de traitement des exceptions. La raison pour laquelle cela est nécessaire est que la fonction de journalisation prend l'ID du tweet comme argument et récupère les tweets passés de ce tweet. Par conséquent, la première gestion des exceptions est requise.

À la fin

Je ne suis pas doué pour écrire d'une manière facile à comprendre. J'ai trouvé plus facile de comprendre ce qui se passait à l'intérieur de la fonction, j'ai donc écrit une description pour chaque fonction.

Recommended Posts

Obtenez des images d'utilisateurs spécifiques sur Twitter
Obtenez des images par recherche par mot-clé sur Twitter
Programme pour obtenir les images préférées de Twitter
Obtenez l'historique des tweets de célébrités sur Twitter
Obtenez des données de Twitter avec Tweepy
Obtenez des informations sur les retards sur Twitter et tweet
Obtenez des signets Twitter sur CentOS en utilisant Selenium
[python] Obtenir la chronologie Twitter pour plusieurs utilisateurs
twitter avec python3
Obtenez des informations sur les 100 utilisateurs techniques de Twitter les plus influents au monde avec python.
Grattage d'images ②-Obtenez des images de bing, yahoo, Flickr
Télécharger en masse des images à partir d'une URL spécifique avec python
Obtenir les données utilisateur Twitter
Télécharger en masse des images à partir d'une URL de site spécifique avec python
Enregistrer les tweets contenant des mots-clés spécifiques sur Twitter au format CSV
Recherchez et enregistrez l'image de Tomono Kafu depuis Twitter