YouTube Counter für eigene Webseite mit Python - Abonnenten werden nicht aktualisiert. Wie kann ich das Problem lösen?
Ich würde gern einen YouTube-Counter für mein Programm machen und wollte da halt die Top 10 YouTuber einbauen. Aber es soll, wenn ein YouTube-Kanal den anderen überholt automatisch geändert werden und dafür dachte ich, das ich das was du mir geschickt hast, verwenden kann. Aber so wie es aussieht, funktioniert es trotzdem nicht.
import tkinter as tk
import urllib.request
import json
import time
YouTube API KEY
YouTube Daten gesamt auslesen
pew_data = urllib.requesthttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=PewDiePie&key=key=key=key=" + key).read()
budentv_data = urllib.request.urlopen( https://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=Node&key=key=" + key).read()
tseries_data = urllib.request.urlopenhttps://www.googleapis.com/youtube/v3/channels?part=statistics&forUsername=TSeries&key=key=" + key).read()
Subscriber/Subs auslesen
pew_subs = json.loads(pew_data)["items"][0]["statistics"]["subscriberCount"]
budentv_subs = json.loads(budentv_data)["items"][0]["statistics"]["subscriberCount"]
tseries_subs = json.loads(tseries_data)["items"][0]["statistics"]["subscriberCount"]
Sortierung
def custom_sort(t):
return t[1] L = [("PewDiePie", pew_subs), ("BudenTv", budentv_subs), ("T-Series", tseries_subs)]
L.sort(key=lambda x: x[1], reverse=True)
Tkinter Gui
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
Ergebnis wird angezeigt,
labels = {}
Mein Problem ist, dass, wenn ich das Skript laufen lasse, die Abonnenten nicht aktualisiert werden. Wie kann ich das Problem lösen?
1 Antwort
Hi,
Ich habe dir das als Kommentar geschrieben gehabt und deswegen hier nochmal als Antwort:
Also wenn du eine Echtzeit Anwendung haben möchtest, musst das das ein klein wenig anders machen. Du möchtest nicht jedesmal deine 10 Labels neu generieren nur weil es sein könnte, dass sich die Subscriber geändert haben. Da würde ich lieber allgemein 10 Labels haben welche die 10 Plätze repräsentieren.
Zusätzlich musst du immer wieder "pollen" (also die Daten neu Abgreifen) in einem gewissen Abstand. Das kannst du mit der after Methode in tkinter machen. http://effbot.org/tkinterbook/widget.htm (So habe ich das früher immer gemacht). Damit kannst du auch das GUI updaten.
Die Funktion die du mit after aufrufst müsste dann immer wieder die Daten pollen. In dieser musst du sie auch wieder neu sortieren. Wenn du dann die neue Sortierung hast, musst du nur noch jedem Label von den Text zuweisen wie deine neue Reihenfolge der sortierten Liste ist.
Um das möglichst dynamisch zu machen würde ich dann eine For-Loop über die L liste mit Hilfe der enumerate() Funktion machen.
for index, (item, count) in enumerate(L):
pass
Dann wäre der Index der Rank des Youtube Accounts. Möglicherweise musst du L nochmal reversen aber das weiß ich jetzt nicht.
Regards,
LifeArtist