Проверьте, является ли изменяющийся номер ниже или выше, чем последний - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над программой на python, которая высмеивает Logan Paul, чтобы попрактиковаться в моих навыках Python.По сути, моя идея состоит в том, чтобы следить за подсчетом Логана, и если он теряет подписчика, он смеется над ним.До сих пор я создал (плохой) графический интерфейс, который отображает его субсчет.Как мне следить за этим и знать, потерял ли он или получил саб?В качестве доказательства концепции я хотел бы сделать что-то вроде печати «Lost» или «Gained» в консоли.Я думаю, что для этого мне нужно было бы сохранить предыдущее число в памяти, используя модуль io, но я не думаю, что это лучший способ.

Вот мой код, Comic Sansдля эффекта:

import urllib.request
import json
from tkinter import*

channelid = "UCG8rbF3g2AMX70yOd8vqIZg"
key = "AIzaSyDAOUFomRB1lxdb_fvSKKaG-FSZDRoVt_s"


def func(label2):
    data = urllib.request.urlopen("https://www.googleapis.com/youtube/v3/channels?part=statistics&id="+channelid+"&key="+key).read()
    subs = json.loads(data)["items"][0]["statistics"]["subscriberCount"]
    subc =("{:,d}".format(int(subs)))
    label2.config(text=subc)
    label2.update()
    root.after(10, lambda:func(label2))


root = Tk()
root.geometry("900x600")
root.title("yeetmeister")

label1 = Label(text="Logan Paul's Sub Count:", font=("Comic Sans MS", 45), fg="Brown")
label2 = Label(font=("Comic Sans MS", 45), fg="Red")

label1.place(x=10, y=20)
label2.place(x=10, y=130)

func(label2)

root.mainloop()

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вам нужна переменная, которая будет содержать подписчиков в предыдущей проверке и выполнять сравнение с подписчиками в новой проверке.Итак, вам придется изменить вашу программу следующим образом:

import urllib.request
import json
from tkinter import*

channelid = "UCG8rbF3g2AMX70yOd8vqIZg"
key = "AIzaSyDAOUFomRB1lxdb_fvSKKaG-FSZDRoVt_s"
prevSubs = 0 # Variable to hold the subs from previous check
firstTime = True # Flag variable to avoid checking the first time due to lack of previous subscribers.

def func(label2,prevSubs, firstTime): # Change the signature here.
    data = urllib.request.urlopen("https://www.googleapis.com/youtube/v3/channels?part=statistics&id="+channelid+"&key="+key).read()
    subs = json.loads(data)["items"][0]["statistics"]["subscriberCount"]
    subc =("{:,d}".format(int(subs)))
    subs = int(subc.replace(',',''))
    # Comparisons to print the appropriate message
    if firstTime:
        print("Started monitoring...")
        firstTime = False
        pass
    else:
        if subs > prevSubs:
            print("Gained")
        elif subs < prevSubs:
            print("Lost")   
        else:
            pass
    prevSubs = subs # Update previous subs.
    label2.config(text=subc)
    label2.update()
    root.after(10, lambda:func(label2,prevSubs,firstTime)) # Add argument to 'func'.


root = Tk()
root.geometry("900x600")
root.title("yeetmeister")

label1 = Label(text="Logan Paul's Sub Count:", font=("Comic Sans MS", 45), fg="Brown")
label2 = Label(font=("Comic Sans MS", 45), fg="Red")

label1.place(x=10, y=20)
label2.place(x=10, y=130)

func(label2,prevSubs,firstTime) # Add new argument to 'func'.

root.mainloop()
0 голосов
/ 30 ноября 2018

Вы можете добавить глобальную переменную:

import urllib.request
import json
from tkinter import*

channelid = "UCG8rbF3g2AMX70yOd8vqIZg"
key = "AIzaSyDAOUFomRB1lxdb_fvSKKaG-FSZDRoVt_s"

score = 0

def func(label2, label3):
    global score
    r = urllib.request.urlopen("https://www.googleapis.com/youtube/v3/channels?part=statistics&id="+channelid+"&key="+key).read()
    # data = r.json()
    subs = json.loads(r.decode('utf-8'))["items"][0]["statistics"]["subscriberCount"]
    newscore = int(subs)
    if(score < newscore):
        label3.config(text="UP" + " prev[ " + str(score) + "]")
        label3.config(fg="Green")
    else:
        if(score == newscore):
            label3.config(text="SAME" + " prev[ " + str(score) + "]")
            label3.config(fg="Blue")
        else:
            label3.config(text="DOWN" + " prev[ " + str(score) + "]")
            label3.config(fg="Red")
    score = newscore
    subc =("{:,d}".format(newscore))
    label2.config(text=subc)
    label2.update()
    root.after(10, lambda:func(label2, label3))


root = Tk()
root.geometry("900x600")
root.title("yeetmeister")

label1 = Label(text="Logan Paul's Sub Count:", font=("Comic Sans MS", 45), fg="Brown")
label2 = Label(font=("Comic Sans MS", 45), fg="Red")
label3 = Label(font=("Comic Sans MS", 45), fg="Blue")

label1.place(x=10, y=20)
label2.place(x=10, y=130)
label3.place(x=340, y=130)
label3.config(text="NO CHANGE")

func(label2, label3)

root.mainloop()
0 голосов
/ 30 ноября 2018

Просто сделайте эту переменную, которую вы помните, таким образом, когда вы получите новый подсчет, вы можете сравнить их

prev_subs = 0

def func():
    current_subs = subs #from api
    if prev_subs:
       if prev_subs > current_subs:
           #went down
       elif prev_subs < current_subs:
           #went up

    prev_subs = current_subs

while true: # just to continually refresh the data
    func(label2)
...