Naučite kako izraditi vlastitu aplikaciju Vijesti s Pythonom i bibliotekom Tkinter.

U ovom brzom svijetu ključno je biti u toku s najnovijim vijestima. Izgradite svoju vlastitu aplikaciju Vijesti koja vam donosi vijesti iz različitih kategorija kao što su zabava, sport i tehnologija dostupne na bilo kojoj platformi na dohvat ruke.

Ovu ćete aplikaciju razviti koristeći Tkinter, standardnu ​​GUI biblioteku za Python, i pokretati je pomoću News API-ja koji dobiva članke iz više od 80 000 izvora.

Instalirajte tkinter i zahtijevajte module

Tkinter je višeplatformski, jednostavan i user-friendly modul koje možete koristiti za brzu izradu grafičkih korisničkih sučelja. Neki od aplikacije koje možete izraditi koristeći Tkinter uključuju glazbeni player, kalendar, alat za pretvorbu težine, igra zbrke riječi i tako dalje.

Instalirati tkinter u vašem sustavu pokrenite sljedeću naredbu u terminalu:

pip instaliraj tkinter

The zahtjevi modul olakšava izradu HTTP zahtjeva. S ovim, možete razviti zanimljive aplikacije kao što je provjera statusa web stranice

instagram viewer
, web scraper, bot za praćenje burze i tester performansi web stranice. Da biste instalirali modul zahtjeva, otvorite terminal i pokrenite sljedeću naredbu:

pip instalacijski zahtjevi

Ovdje možete pronaći cijeli izvorni kod aplikacije Vijesti koja koristi Python GitHub spremište.

Generirajte News API ključ

Započnite s uvozom potrebnih biblioteka. Prijavite se na API za vijesti i generirajte svoj API ključ. S besplatnim računom razvojnog programera možete poslati do 100 zahtjeva dnevno, što je odlično za testiranje i početak. Pohranite API u varijablu koju ćete kasnije koristiti s osnovnim URL-om za dohvaćanje glavnih naslova prema vašoj zemlji.

iz tkinter uvoz *
iz tkinter uvoz okvir za poruke
uvoz zahtjevi

apiKey = 'VAŠ_API_KLJUČ'

Definirajte strukturu aplikacije

Definirajte klasu, NewsApp. Upućivanje na apiKey i tip varijable globalno. Definirajte objekt klase i inicijalizirajte korijenski prozor. Postavite dimenzije i naslov svoje aplikacije. Definirajte dva popisa, prvi popis ćete koristiti za definiranje gumba, a drugi za definiranje kategorija vijesti koje želite prikazati u svojoj aplikaciji.

razredaNewsApp:
globalno apiKey, tip
def__u tome__(ja, korijen):
self.root = korijen
self.root.geometry('1000x650')
self.root.title("Aplikacija za vijesti")
self.newsCategoryButton = []
self.newsCategory = ["Općenito", "Zabava", "sportski", "tehnologija"]

Definirajte oznaku koja služi kao naslov vaše aplikacije. Proslijedite nadređeni element u koji ga želite smjestiti, tekst koji bi trebao prikazati, stil fonta, ispunu i boju pozadine koju bi trebao imati. Koristiti paket() mogućnost ispune kako bi oznaka zauzela cijeli prostor u smjeru X.

Definirajte a LabelFrame i postavite njegov roditeljski element zajedno s bojom pozadine koju bi trebao imati. Koristiti mjesto() funkciju za organiziranje na određenim koordinatama. Dodatno prođite širinu i visinu okvira.

 naslov = Oznaka (self.root, text="Aplikacija za vijesti", font=("Times New Roman", 28, "podebljano"), pady=2, bg='#ff007f').pack (fill=X)
F1 = LabelFrame (self.root, bg='#fc6c85')
F1.mjesto (x=20, y=80, širina=215, visina=210)

Definirajte for petlju koja prolazi kroz duljinu vijestiMačka popis. Definirajte gumb u prethodno definiranom okviru. Proslijedite tekst koji treba prikazati i pretvorite ga u velika slova. Proslijedite širinu, dubinu obruba, stil fonta i boju pozadine gumba. Koristiti rešetka upravitelja da rasporedi gumbe u obliku stupaca i doda ispunu u smjerovima X i Y.

Upotrijebite metodu vezanja za pričvršćivanje gumba i područja vijesti. definira da je Newsarea funkcija će se pojaviti na klik lijevog miša od strane korisnika. Dodajte ove gumbe na newsCatButton popis definiran ranije.

za ja u raspon (len (self.newsCategory)):
b = Gumb (F1, text=self.newsCategory[i].upper(), width=15, bd=3, font="arial 14 podebljano", bg='#c154c1')
b.mreža (redak=i, stupac=0, padx=10, pady=5)
b.bind('', sebe. Newsarea)
self.newsCategoryButton.append (b)

Definirajte okvir i proslijedite mu nadređeni element u koji ga želite smjestiti i dubinu obruba koji bi trebao imati. Organizirajte ga na određenim koordinatama i proslijedite relativnu visinu i širinu. Definirajte okomitu traku za pomicanje pomoću orijentirati parametar i smjestite ga u ovaj okvir.

Definirajte tekstualni widget. Proslijedite nadređeni element kao ovaj okvir zajedno sa stilom fonta i bojom pozadine koju bi trebao imati. Prilikom postavljanja vrijednosti naredba yscroll kao scroll_y.set dobiva trenutni položaj trake za pomicanje pri interakciji korisnika.

 F2 = Okvir (self.root, bd=3)
F2. mjesto (x=260, y=80, relwidth=0.7, relativna visina=0.8)
scroll_y = Traka za pomicanje (F2, orijentacija=VERTIKALNO)
self.txtarea = Tekst (F2, yscrollcommand=scroll_y.set, font=("Times New Roman", 15, "podebljano"), bg='#fc6c85')

Koristiti paket() opcija za popunjavanje za postavljanje trake za pomicanje na desnu stranu okvira i zauzimanje cijelog prostora u smjeru Y. Prilikom postavljanja parametra naredbe as txtarea.yview, kretanje trake za pomicanje povezuje se s funkcijama gore i dolje. Dakle, kada korisnik komunicira s trakom za pomicanje, prikazi područja teksta se u skladu s tim mijenjaju.

Koristiti umetnuti() metoda za traženje od korisnika da odabere kategoriju i postavi je na kraj bilo kojeg postojećeg teksta. Koristiti paket() metoda za traženje tekstualnog widgeta da zauzme prostor u smjeru X i Y i dodijeli dodatni prostor ako je potrebno pomoću proširiti parametar.

 scroll_y.pack (side=RIGHT, fill=Y)
scroll_y.config (naredba=self.txtarea.yview)
self.txtarea.insert (END,"Izaberi kategoriju:")
self.txtarea.pack (fill=BOTH, expand=1)

Izdvojite vijesti iz API odgovora

Definirajte funkciju, Newsarea() koji prihvaća trenutnu instancu klase i događaj gumba. Proslijedite kategoriju vijesti koju je korisnik odabrao malim slovima i pohranite je. Proslijedite tražene parametre osnovnom URL-u i izbrišite bilo koji tekst prisutan ranije od prvog indeksa do posljednjeg. Umetnite crtu za razgraničenje.

Definirajte a probati blokirati i poslati HTTP GET zahtjev poslužitelju definiranom u osnovnom URL-u. Pretvorite odgovor u JSON format i izdvojite sadržaj koji ima ključ kao članci i pohraniti ga u varijablu.

defNewsarea(ja, događaj):
tip = event.widget.cget('tekst').niži()
BASE_URL = f' http://newsapi.org/v2/top-headlines? zemlja=u&kategoriji={tip}&apiKey=' + apiKey
self.txtarea.delete("1.0", KRAJ)
self.txtarea.insert (END, "\n")
probati:
članci = (requests.get (BASE_URL).json())['članci']

Ako broj dohvaćenih članaka nije nula, pokrenite petlju i umetnite članke jedan po jedan u tekstualni widget. Prikažite naslov, a zatim opis, sadržaj i URL u zasebnim recima. Umetnite dvije crte za razgraničenje. Ako je broj članaka nula, prikažite da nema dostupnih vijesti za tu kategoriju.

Ako blok pokušaja ne uspije, koristite blok iznimke za prikaz odgovarajuće poruke o pogrešci korisnicima.

ako (članci != 0):
za ja u opseg (len (članci)):
self.txtarea.insert (END, f"{članci[i]['titula']}\n")
self.txtarea.insert (END, f"{članci[i]['opis']}\n")
self.txtarea.insert (END, f"{članci[i]['sadržaj']}\n")
self.txtarea.insert (END, f"pročitaj više...{članci[i]['url']}\n")
self.txtarea.insert (END, "\n")
self.txtarea.insert (END, "\n")
drugo:
self.txtarea.insert (END, "Nema dostupnih vijesti")
osim Iznimka kao e:
messagebox.showerror('GREŠKA', "Žao nam je, naišli smo na probleme. Provjerite internetsku vezu i pokušajte ponovno.")

Napravite instancu klase i inicijalizirajte je. The glavna petlja() funkcija govori Pythonu da pokrene Tkinter petlju događaja i osluškuje događaje dok ne zatvorite prozor.

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

Sastavite sav kod i vaša je aplikacija spremna za prikaz vijesti prema različitim kategorijama.

Izlaz aplikacije vijesti

Prilikom pokretanja programa, tekstualno područje traži odabir kategorije. Pritiskom na bilo koji gumb, prikazuje se vijest s opisom, sadržajem i poveznicom (ako postoji) za tu kategoriju odvojenu s dva retka.

Korisni API-ji za vaš Python projekt

API-ji su super zgodni za integraciju novih aplikacija s postojećim softverskim sustavima. Možete koristiti OpenWeatherMap API za dohvaćanje vremenskih informacija u stvarnom vremenu za bilo koje područje i Google Maps API za uključivanje karata u vašu web aplikaciju. Možete automatizirati GitHub zadatke putem GitHub API-ja i koristiti Zoom API za integraciju video konferencija.

Također možete koristiti snagu ChatGPT-a unutar svojih aplikacija pomoću OpenAI API-ja i stvoriti neke fascinantne aplikacije koje pokreće AI.