Dies ist ein Artikel des SLP KBIT Adventskalenders 2019. Ich wollte schon immer Bilder auf Twitter sammeln, deshalb habe ich diese Gelegenheit genutzt, um dies zu tun. Dieses Programm ist ein Programm, das Bilder von Tweets eines bestimmten Kontos herunterlädt.
Python3.7.5
Da das auf Twitter gepostete Bild diesmal angezeigt wird, benötigen Sie dafür einen Schlüssel. Ich werde die Methode zum Erhalten des Schlüssels weglassen, da er bei Google herauskommt. Da tweepy verwendet wird, installieren Sie es.
pip install tweepy
Erstellen Sie eine Datei, um den erhaltenen Schlüssel abzulegen. Es kann sich am selben Speicherort wie die ausführbare Datei befinden, aber ich persönlich bevorzuge diese ...
config.py
CONFIG1 = {
"CONSUMER_KEY":"XXXXXXXXXXX",
"CONSUMER_SECRET":"XXXXXXXXXXXX",
"ACCESS_TOKEN":"XXXXXXXXXXXXXXXXXXX",
"ACCESS_SECRET":"XXXXXXXXXXXXXXXXX",
}
Importieren Sie das, was Sie benötigen, und bringen Sie den Schlüssel aus config.py. Die unteren drei Zeilen sind erforderlich, um die API zu verwenden.
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)
Es ist ein Programm, das auf dem Terminal ausgeführt wird. Wenn eine ID angegeben wird, werden Tweets von dem Konto mit dieser ID erfasst. Wenn ein Bild-Tweet vorhanden ist, wird dieser heruntergeladen.
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)
#Über Schlüsselwort suchen
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("ID eingeben>>")
id = fast(user_name)
url = log(user_name, count, id - 1)
save_image(url, user_name)
if __name__ == "__main__":
start()
Rufen Sie die URL mit der Protokollfunktion ab und speichern Sie das Bild in dem Ordner, der mit der Funktion save_image angegeben wurde.
Sie erhalten die Konto-ID, die Anzahl der erfassten Tweets und die Tweet-ID als Argumente. Wir werden die Ergebnisse in einer for-Anweisung übergeben. Die URL des Bildes wird in einem json-ähnlichen Format gespeichert. Nehmen Sie sie daher heraus und speichern Sie sie in result_url. Machen Sie es zu einem Rückgabewert. Ich möchte das Bild dieses Mal nicht retweeten lassen, daher versuche ich, es mit der if-Anweisung auszuschließen.
sava_image Wie der Name schon sagt, ist es eine Funktion, die ein Bild speichert. Zu diesem Zeitpunkt tritt beim Speichern mit der URL ein Fehler auf. Rufen Sie daher die Funktion extract_pic_file auf, um den Dateinamen zu konvertieren.
Der Dateiname des Bildes wird aus der URL unter Verwendung eines regulären Ausdrucks festgelegt. Dadurch wird verhindert, dass das Bild abgedeckt wird, wenn das Bild von demselben Konto abgerufen wird.
Dies ist ein Prozess für die Ausnahmeverarbeitung. Der Grund dafür ist, dass die Protokollfunktion die ID des Tweets als Argument verwendet und vergangene Tweets von diesem Tweet abruft. Daher ist die erste Ausnahmebehandlung erforderlich.
Ich bin nicht gut darin, leicht verständlich zu schreiben. Ich fand es einfacher zu verstehen, was in der Funktion vor sich ging, und schrieb eine Beschreibung für jede Funktion.
Recommended Posts