Lær, hvordan du opretter din helt egen nyhedsapplikation med Python og Tkinter-biblioteket.
I denne hurtige verden er det afgørende at holde sig opdateret med de seneste nyheder. Byg din helt egen nyhedsapplikation, der giver dig nyheder på tværs af forskellige kategorier såsom underholdning, sport og teknologi, der er tilgængelig på enhver platform lige ved hånden.
Du vil udvikle denne applikation ved hjælp af Tkinter, standard GUI-biblioteket for Python, og drive den ved hjælp af News API, der får artikler fra mere end 80.000 kilder.
Installer tkinter og anmoder om moduler
Tkinter er et enkelt og brugervenligt modul på tværs af platforme som du kan bruge til at oprette grafiske brugergrænseflader hurtigt. Nogle af applikationer, du kan bygge ved hjælp af Tkinter, inkluderer en musikafspiller, kalender, vægtkonverteringsværktøj, ordspil og så videre.
At installere tkinter i dit system skal du køre følgende kommando i terminalen:
pip installer tkinter
Det anmodninger modul gør det nemmere at lave HTTP-anmodninger. Med dette,
du kan udvikle interessante applikationer såsom en hjemmesidestatuskontrol, webskraber, aktiemarkedsmonitorbot og webstedsydelsestester. For at installere anmodningsmodulet skal du åbne terminalen og køre følgende kommando:pip installationsanmodninger
Du kan finde hele kildekoden til News-applikationen ved hjælp af Python i denne GitHub-depot.
Generer nyheds-API-nøglen
Begynd med at importere de nødvendige biblioteker. Tilmelding kl Nyheder API og generer din API-nøgle. Med den gratis udviklerkonto kan du sende op til 100 anmodninger dagligt, hvilket er fantastisk at teste og komme i gang med. Gem API'en i en variabel, som du senere skal bruge med basis-URL'en for at hente de øverste overskrifter i henhold til dit land.
fra tkinter importere *
fra tkinter importere beskedboks
importere anmodninger
apiKey = 'DIN_API_KEY'
Definer appens struktur
Definer en klasse, Nyhedsapp. Henvis til apiKey og type variabler globalt. Definer et objekt i klassen og initialiser rodvinduet. Indstil dimensioner og titel på din ansøgning. Definer to lister, du vil bruge den første liste til at definere knapperne og den anden til at definere til kategorier af nyheder, du ønsker at vise i din applikation.
klasseNyhedsapp:
global apiKey, skriv
def__i det__(selv, rod):
self.root = rod
self.root.geometry('1000x650')
self.root.title("Nyhedsapplikation")
self.newsCategoryButton = []
self.newsCategory = ["generel", "underholdning", "sport", "teknologi"]
Definer en etiket, der fungerer som en titel til din ansøgning. Send det overordnede element, du vil placere det i, teksten, det skal vise, skrifttypestilen, polstringen og baggrundsfarven, det skal have. Brug pakke() udfyldningsmulighed for at få etiketten til at optage hele rummet i X-retningen.
Definer en LabelFrame og sæt dets overordnede element sammen med den baggrundsfarve, det skal have. Brug placere() funktion til at organisere det på specificerede koordinater. Derudover skal du passere bredden og højden af rammen.
title = Etiket (self.root, text="Nyhedsapplikation", skrifttype=("Times New Roman", 28, "fremhævet"), pady=2, bg='#ff007f').pack (fyld=X)
F1 = LabelFrame (self.root, bg='#fc6c85')
F1.place (x=20, y=80, bredde=215, højde=210)
Definer en for-løkke, der løber gennem længden af nyhederCat liste. Definer en knap i den tidligere definerede ramme. Send den tekst, den skal vise, og konverter den til store bogstaver. Giv knappernes bredde, kantdybde, skrifttypestil og baggrundsfarve. Brug gitter manager til at arrangere knapperne i et søjleformat og tilføje polstring i X- og Y-retningerne.
Brug bindemetoden til at vedhæfte knappen og nyhedsområdet. definerer, at Nyhedsområde funktion vil ske ved venstre museklik af brugeren. Føj disse knapper til newsCatButton liste defineret tidligere.
til jeg i rækkevidde (len (self.newsCategory)):
b = Knap (F1, text=self.newsCategory[i].upper(), width=15, bd=3, skrifttype="Arial 14 fed", bg='#c154c1')
b.gitter (række=i, kolonne=0, padx=10, pady=5)
b.bind('' , selv. nyhedsområde)
self.newsCategoryButton.append (b)
Definer en ramme og giv den det overordnede element, du vil placere den i, og den kantdybde, den skal have. Organiser det på angivne koordinater og passér den relative højde og bredde. Definer en lodret rullepanel ved hjælp af orientere parameter og placer den i denne ramme.
Definer en tekstwidget. Send det overordnede element som denne ramme sammen med skrifttypestilen og den baggrundsfarve, den skal have. Ved indstilling af værdien af yscroll-kommando som scroll_y.set den får den aktuelle position af rullepanelet ved brugerinteraktion.
F2 = Ramme (self.root, bd=3)
F2.place (x=260, y=80, relwidth=0.7, rehøjde=0.8)
scroll_y = Scrollbar (F2, orient=LODRET)
self.txtarea = Tekst (F2, yscrollcommand=scroll_y.set, font=("Times New Roman", 15, "fremhævet"), bg='#fc6c85')
Brug pakke() udfyld mulighed for at placere rullepanelet på højre side af rammen og optage hele rummet i Y-retningen. Ved indstilling af kommandoparameteren som txtarea.yview, bliver rullebjælkens bevægelse knyttet til op- og ned-funktionerne. Så når brugeren interagerer med rullepanelet, ændres tekstområdets visninger tilsvarende.
Brug indsæt() metode til at bede brugeren om at vælge en kategori og placere den i slutningen af enhver eksisterende tekst. Brug pakke() metode til at bede tekstwidgetten om at tage mellemrummet i X- og Y-retningen og om nødvendigt tildele yderligere plads ved hjælp af udvide parameter.
scroll_y.pack (side=HØJRE, fill=Y)
scroll_y.config (command=self.txtarea.yview)
self.txtarea.insert (END,"Vælg en kategori:")
self.txtarea.pack (fill=BOTH, expand=1)
Uddrag nyheder fra API-svaret
Definer en funktion, Nyhedsområde() der accepterer den aktuelle forekomst af klassen og knaphændelsen. Send nyhedskategorien med små bogstaver, som brugeren valgte, og gem den. Send de nødvendige parametre til basis-URL'en, og slet al tekst, der er til stede tidligere, fra det første indeks til det sidste. Indsæt en linje til afgrænsning.
Definer en prøve blokere og sende en HTTP GET-anmodning til serveren defineret i basis-URL'en. Konverter svaret til JSON-format og udtræk indholdet, der har nøglen som artikler og gemme det i en variabel.
defNyhedsområde(selv, begivenhed):
type = event.widget.cget('tekst').nederste()
BASE_URL = f' http://newsapi.org/v2/top-headlines? country=in&category={type}&apiKey=' + apiKey
self.txtarea.delete("1.0", SLUT)
self.txtarea.insert (END, "\n")
prøve:
artikler = (requests.get (BASE_URL).json())['artikler']
Hvis antallet af hentede artikler ikke er nul, skal du køre en løkke og indsætte artiklerne en efter en i tekstwidgetten. Vis titlen efterfulgt af beskrivelse, indhold og URL i separate linjer. Indsæt to linjer til afgrænsning. Hvis antallet af artikler er nul, skal du vise, at ingen nyheder er tilgængelige for den pågældende kategori.
Hvis prøveblokken mislykkes, skal du bruge undtagelsesblokken til at vise den relevante fejlmeddelelse til brugerne.
hvis (artikler != 0):
til jeg i interval (len (artikler)):
self.txtarea.insert (END, f"{artikler[i]['titel']}\n")
self.txtarea.insert (END, f"{artikler[i]['beskrivelse']}\n")
self.txtarea.insert (END, f"{artikler[i]['indhold']}\n")
self.txtarea.insert (END, f" læs mere...{artikler[i]['url']}\n")
self.txtarea.insert (END, "\n")
self.txtarea.insert (END, "\n")
andet:
self.txtarea.insert (END, "Ingen nyheder tilgængelige")
undtagen Undtagelse som e:
messagebox.showerror('FEJL', "Beklager, vi stødte på nogle problemer. Tjek venligst internetforbindelsen og prøv igen.")
Opret en forekomst af klassen og initialiser den. Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser, indtil du lukker vinduet.
root = Tk()
obj = NewsApp (rod)
root.mainloop()
Sæt al koden sammen, og din applikation er klar til at vise nyheder efter forskellige kategorier.
Outputtet af nyhedsapplikationen
Når programmet kører, beder tekstområdet om at vælge en kategori. Når du klikker på en af knapperne, viser den nyhederne med beskrivelsen, indholdet og dets link (hvis det findes) for den pågældende kategori adskilt af to linjer.
Nyttige API'er til dit Python-projekt
API'er er super praktiske til at integrere nye applikationer med eksisterende softwaresystemer. Du kan bruge OpenWeatherMap API til at hente vejrinformation i realtid for ethvert område og Google Maps API til at inkorporere kort i din hjemmesideapplikation. Du kan automatisere GitHub-opgaver via GitHub API og bruge Zoom API til at integrere videokonferencer.
Du kan også bruge kraften i ChatGPT fra dine egne apps ved hjælp af OpenAIs API og skabe nogle fascinerende AI-drevne applikationer.