Lär dig hur du skapar din egen nyhetsapplikation med Python och Tkinter-biblioteket.
I denna snabba värld är det avgörande att hålla sig uppdaterad med de senaste nyheterna. Bygg din egen Nyheter-applikation som ger dig nyheter inom olika kategorier som underhållning, sport och teknik tillgänglig på alla plattformar direkt till hands.
Du kommer att utveckla den här applikationen med Tkinter, standardbiblioteket för GUI för Python, och driva det med hjälp av News API som får artiklar från mer än 80 000 källor.
Installera tkinter och begär moduler
Tkinter är en plattformsoberoende, enkel och användarvänlig modul som du kan använda för att snabbt skapa grafiska användargränssnitt. Några av applikationer du kan bygga med Tkinter inkluderar en musikspelare, kalender, verktyg för viktomvandling, ordblandningsspel och så vidare.
Att installera tkinter i ditt system, kör följande kommando i terminalen:
pip installera tkinter
De förfrågningar modulen gör det lättare att göra HTTP-förfrågningar. Med detta,
du kan utveckla intressanta applikationer som en webbplatsstatuskontroll, webbskrapa, börsövervakare bot och webbplatsprestandatestare. För att installera begärandemodulen, öppna terminalen och kör följande kommando:pip-installationsförfrågningar
Du kan hitta hela källkoden för News-applikationen med Python i denna GitHub-förråd.
Generera Nyhets-API-nyckeln
Börja med att importera de nödvändiga biblioteken. Anmälan kl Nyheter API och generera din API-nyckel. Med det kostnadsfria utvecklarkontot kan du skicka upp till 100 förfrågningar dagligen, vilket är bra att testa och komma igång. Lagra API: et i en variabel som du kommer att använda senare med basadressen för att hämta de översta rubrikerna enligt ditt land.
från tkinter importera *
från tkinter importera meddelandebox
importera förfrågningar
apiKey = "DIN_API_KEY"
Definiera appens struktur
Definiera en klass, NewsApp. Hänvisa till apiKey och typ variabler globalt. Definiera ett objekt i klassen och initiera rotfönstret. Ange mått och titel för din ansökan. Definiera två listor, du kommer att använda den första listan för att definiera knapparna och den andra för att definiera till kategorier av nyheter som du vill visa i din applikation.
klassNewsApp:
global apiKey, typ
def__i det__(själv, rot):
self.root = rot
self.root.geometry('1000x650')
self.root.title("Nyhetsapplikation")
self.newsCategoryButton = []
self.newsCategory = ["allmän", "underhållning", "sporter", "teknologi"]
Definiera en etikett som fungerar som en titel för din ansökan. Skicka det överordnade elementet du vill placera det i, texten det ska visa, typsnittet, stoppningen och bakgrundsfärgen det ska ha. Använd packa() fyllningsalternativ för att få etiketten att uppta hela utrymmet i X-riktningen.
Definiera a LabelFrame och ställ in dess överordnade element tillsammans med bakgrundsfärgen den ska ha. Använd plats() funktion för att organisera den på angivna koordinater. Passera dessutom ramens bredd och höjd.
title = Etikett (self.root, text="Nyhetsapplikation", typsnitt=("Times New Roman", 28, "djärv"), pady=2, bg='#ff007f').pack (fyll=X)
F1 = LabelFrame (self.root, bg='#fc6c85')
F1.place (x=20, y=80, bredd=215, höjd=210)
Definiera en for-loop som löper genom längden på nyheterCat lista. Definiera en knapp i den ram som definierats tidigare. Skicka texten den ska visa och konvertera den till versaler. Ange bredden, ramdjupet, teckensnittet och bakgrundsfärgen på knapparna. Använd rutnät manager för att ordna knapparna i kolumnformat och lägga till utfyllnad i X- och Y-riktningarna.
Använd bindningsmetoden för att bifoga knappen och nyhetsområdet. definierar att Nyhetsområde funktionen kommer att ske på vänster musklick av användaren. Lägg till dessa knappar till newsCatButton lista definierad tidigare.
för i i intervall (len (self.newsCategory)):
b = Knapp (F1, text=self.newsCategory[i].upper(), width=15, bd=3, teckensnitt="Arial 14 fet", bg='#c154c1')
b.grid (rad=i, kolumn=0, padx=10, pady=5)
b.bind('' , själv. nyhetsområde)
self.newsCategoryButton.append (b)
Definiera en ram och skicka det överordnade elementet du vill placera den i och det kantdjup den ska ha. Organisera den på angivna koordinater och skicka den relativa höjden och bredden. Definiera en vertikal rullningslist med hjälp av orientera parameter och placera den i denna ram.
Definiera en textwidget. Skicka det överordnade elementet som denna ram tillsammans med teckensnittsstilen och bakgrundsfärgen den ska ha. När du ställer in värdet på yscrollcommand som scroll_y.set den får den aktuella positionen för rullningslisten vid användarinteraktion.
F2 = Frame (self.root, bd=3)
F2.place (x=260, y=80, relwidth=0.7, relhöjd=0.8)
scroll_y = Rullningslist (F2, orient=VERTICAL)
self.txtarea = Text (F2, yscrollcommand=scroll_y.set, font=("Times New Roman", 15, "djärv"), bg='#fc6c85')
Använd packa() fyllningsalternativ för att placera rullningslisten på höger sida av ramen och uppta hela utrymmet i Y-riktningen. Vid inställning av kommandoparametern som txtarea.yview, rullningslistens rörelse kopplas till funktionerna upp och ner. Så när användaren interagerar med rullningslisten ändras textområdets vyer därefter.
Använd Föra in() metod för att be användaren att välja en kategori och placera den i slutet av befintlig text. Använd packa() metod för att be textwidgeten att ta utrymmet i X- och Y-riktningen och tilldela ytterligare utrymme om det behövs med hjälp av bygga ut parameter.
scroll_y.pack (sida=HÖGER, fyll=Y)
scroll_y.config (command=self.txtarea.yview)
self.txtarea.insert (END,"Välj en kategori:")
self.txtarea.pack (fill=BOTH, expand=1)
Extrahera nyheter från API-svaret
Definiera en funktion, Nyhetsområde() som accepterar den aktuella instansen av klassen och knapphändelsen. Passera kategorin för nyheterna som användaren valde med gemener och lagra den. Skicka de nödvändiga parametrarna till baswebbadressen och ta bort all text som fanns tidigare från det första indexet till det sista. Infoga en linje för avgränsning.
Definiera a Prova blockera och skicka en HTTP GET-begäran till servern som definieras i bas-URL. Konvertera svaret till JSON-format och extrahera innehållet som har nyckeln som artiklar och lagra den i en variabel.
defNyhetsområde(själv, händelse):
typ = event.widget.cget('text').lägre()
BASE_URL = f' http://newsapi.org/v2/top-headlines? country=in&category={typ}&apiKey=' + apiKey
self.txtarea.delete("1.0", SLUTET)
self.txtarea.insert (END, "\n")
Prova:
artiklar = (requests.get (BASE_URL).json())["artiklar"]
Om antalet hämtade artiklar inte är noll, kör en slinga och infoga artiklarna en efter en i textwidgeten. Visa titeln följt av beskrivning, innehåll och URL på separata rader. Infoga två rader för avgränsning. Om antalet artiklar är noll, visa att inga nyheter är tillgängliga för just den kategorin.
Om försöksblocket misslyckas, använd undantagsblocket för att visa lämpligt felmeddelande för användarna.
om (artiklar != 0):
för i i intervall (len (artiklar)):
self.txtarea.insert (END, f"{artiklar[i]['titel']}\n")
self.txtarea.insert (END, f"{artiklar[i]['beskrivning']}\n")
self.txtarea.insert (END, f"{artiklar[i]['innehåll']}\n")
self.txtarea.insert (END, f"läs mer...{artiklar[i]["url"]}\n")
self.txtarea.insert (END, "\n")
self.txtarea.insert (END, "\n")
annan:
self.txtarea.insert (END, "Inga nyheter tillgängliga")
bortsett från Undantag som e:
messagebox.showerror('FEL', "Förlåt, vi stötte på några problem. Kontrollera internetanslutningen och försök igen.")
Skapa en instans av klassen och initiera den. De mainloop() funktionen säger åt Python att köra Tkinter-händelsslingan och lyssna efter händelser tills du stänger fönstret.
root = Tk()
obj = NewsApp (root)
root.mainloop()
Sätt ihop all kod så är din applikation redo att visa nyheter enligt olika kategorier.
Utgången av nyhetsapplikationen
När programmet körs, frågar textområdet om att välja en kategori. När du klickar på någon av knapparna visar den nyheterna med beskrivningen, innehållet och dess länk (om sådan finns) för den kategorin separerade med två rader.
Användbara API: er för ditt Python-projekt
API: er är superhändiga för att integrera nya applikationer med befintliga mjukvarusystem. Du kan använda OpenWeatherMap API för att hämta väderinformation i realtid för alla områden och Google Maps API för att integrera kartor i din webbplatsapplikation. Du kan automatisera GitHub-uppgifter via GitHub API och använda Zoom API för att integrera videokonferenser.
Du kan också använda kraften i ChatGPT från dina egna appar med OpenAI: s API och skapa några fascinerande AI-drivna applikationer.