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.
Python3.7.5
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",
}
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)
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()
Obtenez l'URL avec la fonction de journal et enregistrez l'image dans le dossier spécifié avec la fonction save_image.
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.
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.
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.
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