Lær hvordan du lager din egen nyhetsapplikasjon med Python og Tkinter-biblioteket.

I denne fartsfylte verdenen er det avgjørende å holde seg oppdatert med de siste nyhetene. Bygg din egen nyhetsapplikasjon som gir deg nyheter på tvers av forskjellige kategorier som underholdning, sport og teknologi tilgjengelig på alle plattformer rett ved fingertuppene.

Du vil utvikle denne applikasjonen ved å bruke Tkinter, standard GUI-biblioteket for Python, og drive den ved hjelp av News API som får artikler fra mer enn 80 000 kilder.

Installer tkinter og ber om moduler

Tkinter er en enkel og brukervennlig modul på tvers av plattformer som du kan bruke til å lage grafiske brukergrensesnitt raskt. Noen av applikasjoner du kan bygge med Tkinter inkluderer en musikkspiller, kalender, vektkonverteringsverktøy, ordspill og så videre.

Å installere tkinter i systemet ditt, kjør følgende kommando i terminalen:

pip installer tkinter

De forespørsler modulen gjør det enklere å lage HTTP-forespørsler. Med dette, du kan utvikle interessante applikasjoner som en nettstedstatuskontroll

instagram viewer
, nettskraper, aksjemarkedsmonitorbot og nettstedytelsestester. For å installere forespørselsmodulen, åpne terminalen og kjør følgende kommando:

pip-installasjonsforespørsler

Du kan finne hele kildekoden til News-applikasjonen ved å bruke Python i denne GitHub-depot.

Generer News API Key

Begynn med å importere de nødvendige bibliotekene. Påmelding kl Nyheter API og generer API-nøkkelen din. Med den gratis utviklerkontoen kan du sende opptil 100 forespørsler daglig, noe som er flott å teste og komme i gang. Lagre API-en i en variabel som du vil bruke senere med basis-URLen for å hente de øverste overskriftene i henhold til landet ditt.

fra tkinter import *
fra tkinter import meldingsboks
import forespørsler

apiKey = 'YOUR_API_KEY'

Definer strukturen til appen

Definer en klasse, NewsApp. Referer til apiKey og type variabler globalt. Definer et objekt i klassen og initialiser rotvinduet. Angi dimensjonene og tittelen på søknaden din. Definer to lister, du vil bruke den første listen til å definere knappene og den andre til å definere til kategorier av nyheter du vil vise i applikasjonen din.

klasseNewsApp:
global apiKey, skriv
def__i det__(selv, rot):
self.root = rot
self.root.geometry('1000x650')
self.root.title("Nyhetsapplikasjon")
self.newsCategoryButton = []
self.newsCategory = ["generell", "underholdning", "sport", "teknologi"]

Definer en etikett som fungerer som en tittel på søknaden din. Send det overordnede elementet du vil plassere det i, teksten det skal vise, skriftstilen, utfyllingen og bakgrunnsfargen den skal ha. Bruke pakke() fyll-alternativet for å få etiketten til å oppta hele plassen i X-retningen.

Definer a LabelFrame og angi det overordnede elementet sammen med bakgrunnsfargen det skal ha. Bruke plass() funksjon for å organisere den på angitte koordinater. Pass i tillegg bredden og høyden på rammen.

 title = Etikett (self.root, text="Nyhetsapplikasjon", font=("Times New Roman", 28, "dristig"), pady=2, bg='#ff007f').pack (fyll=X)
F1 = LabelFrame (self.root, bg='#fc6c85')
F1.place (x=20, y=80, bredde=215, høyde=210)

Definer en for-løkke som går gjennom lengden på nyheterCat liste. Definer en knapp i rammen definert tidligere. Send teksten den skal vise og konverter den til store bokstaver. Send bredden, kantdybden, skriftstilen og bakgrunnsfargen til knappene. Bruke Nett manager for å ordne knappene i et kolonneformat og legge til utfylling i X- og Y-retningene.

Bruk bindemetoden for å legge ved knappen og nyhetsområdet. definerer at Nyhetsområde funksjonen vil skje ved venstre museklikk av brukeren. Legg disse knappene til newsCatButton liste definert tidligere.

til Jeg i område (len (self.newsCategory)):
b = Knapp (F1, text=self.newsCategory[i].upper(), width=15, bd=3, font="Arial 14 fet", bg='#c154c1')
b.grid (rad=i, kolonne=0, padx=10, pady=5)
b.bind('', selv. Nyhetsområde)
self.newsCategoryButton.append (b)

Definer en ramme og gi den det overordnede elementet du vil plassere den i og kantdybden den skal ha. Organiser den på angitte koordinater og pass den relative høyden og bredden. Definer et vertikalt rullefelt ved å bruke orientere parameter og plasser den i denne rammen.

Definer en tekstwidget. Send det overordnede elementet som denne rammen sammen med skriftstilen og bakgrunnsfargen den skal ha. Ved innstilling av verdien av yscroll-kommando som scroll_y.set den får gjeldende posisjon til rullefeltet ved brukerinteraksjon.

 F2 = Frame (self.root, bd=3)
F2.place (x=260, y=80, relwidth=0.7, relheight=0.8)
scroll_y = Rullefelt (F2, orient=VERTICAL)
self.txtarea = Tekst (F2, yscrollcommand=scroll_y.set, font=("Times New Roman", 15, "dristig"), bg='#fc6c85')

Bruke pakke() fyll-alternativet for å plassere rullefeltet på høyre side av rammen og okkupere hele plassen i Y-retningen. Ved innstilling av kommandoparameteren som txtarea.yview, blir rullefeltets bevegelse knyttet til opp- og ned-funksjonene. Så når brukeren samhandler med rullefeltet, endres tekstområdets visninger tilsvarende.

Bruke sett inn() metode for å be brukeren velge en kategori og plassere den på slutten av eksisterende tekst. Bruke pakke() metode for å be tekstwidgeten ta mellomrommet i X- og Y-retningen og tilordne ekstra plass om nødvendig ved å bruke utvide parameter.

 scroll_y.pack (side=HØYRE, fyll=Y)
scroll_y.config (command=self.txtarea.yview)
self.txtarea.insert (END,"Velg en kategori:")
self.txtarea.pack (fill=BOTH, expand=1)

Trekk ut nyheter fra API-responsen

Definer en funksjon, Nyhetsområde() som godtar gjeldende forekomst av klassen og knappen-hendelsen. Send kategorien til nyhetene brukeren valgte med små bokstaver og lagre den. Send de nødvendige parameterne til basis-URL-en og slett all tekst som er til stede tidligere fra den første indeksen til den siste. Sett inn en linje for avgrensning.

Definer a prøve blokkere og sende en HTTP GET-forespørsel til serveren som er definert i basis-URLen. Konverter svaret til JSON-format og trekk ut innholdet som har nøkkelen som artikler og lagre den i en variabel.

defNyhetsområde(selv, hendelse):
type = event.widget.cget('tekst').Nedre()
BASE_URL = f' http://newsapi.org/v2/top-headlines? country=in&category={type}&apiKey=' + apiKey
self.txtarea.delete("1.0", SLUTT)
self.txtarea.insert (END, "\n")
prøve:
artikler = (requests.get (BASE_URL).json())["artikler"]

Hvis antall hentede artikler ikke er null, kjør en sløyfe og sett inn artiklene én etter én i tekstwidgeten. Vis tittelen, etterfulgt av beskrivelse, innhold og URL i separate linjer. Sett inn to linjer for avgrensning. Hvis antall artikler er null, vis at ingen nyheter er tilgjengelige for den aktuelle kategorien.

Hvis prøveblokken mislykkes, bruk unntaksblokken for å vise den aktuelle feilmeldingen til brukerne.

hvis (artikler != 0):
til Jeg i område (len (artikler)):
self.txtarea.insert (END, f"{artikler[i]['tittel']}\n")
self.txtarea.insert (END, f"{artikler[i]['beskrivelse']}\n")
self.txtarea.insert (END, f"{artikler[i]['innhold']}\n")
self.txtarea.insert (END, f" les mer...{artikler[i]['url']}\n")
self.txtarea.insert (END, "\n")
self.txtarea.insert (END, "\n")
ellers:
self.txtarea.insert (END, "Ingen nyheter tilgjengelig")
unntatt Unntak som e:
messagebox.showerror('FEIL', "Beklager, vi har hatt noen problemer. Vennligst sjekk internettforbindelsen og prøv igjen.")

Opprett en forekomst av klassen og initialiser den. De mainloop() funksjonen forteller Python å kjøre Tkinter-hendelsesløkken og lytte etter hendelser til du lukker vinduet.

root = Tk()
obj = NewsApp (root)
root.mainloop()

Sett all koden sammen og applikasjonen din er klar til å vise nyheter i henhold til forskjellige kategorier.

Utgangen av nyhetsapplikasjonen

Når du kjører programmet, ber tekstområdet om å velge en kategori. Når du klikker på en av knappene, viser den nyhetene med beskrivelsen, innholdet og dens lenke (hvis tilgjengelig) for den kategorien atskilt med to linjer.

Nyttige API-er for Python-prosjektet ditt

APIer er veldig nyttige for å integrere nye applikasjoner med eksisterende programvaresystemer. Du kan bruke OpenWeatherMap API for å hente værinformasjon i sanntid for ethvert område og Google Maps API for å inkorporere kart i nettstedets applikasjon. Du kan automatisere GitHub-oppgaver via GitHub API og bruke Zoom API for å integrere videokonferanser.

Du kan også bruke kraften til ChatGPT fra dine egne apper ved å bruke OpenAIs API og lage noen fascinerende AI-drevne applikasjoner.