Dans ce monde en constante évolution, il est essentiel de rester informé des dernières nouvelles. Créez votre propre application d’actualités qui vous fournira des informations dans différentes catégories telles que le divertissement, le sport et la technologie, accessibles sur n’importe quelle plateforme, juste au bout de vos doigts.
Vous développerez cette application en utilisant Tkinter, la bibliothèque d’interface graphique standard pour Python, et l’alimenterez en utilisant l’API News qui récupère des articles de plus de 80 000 sources.
Installer tkinter et demander des modules
Tkinter est un module multiplateforme, simple et convivial que vous pouvez utiliser pour créer rapidement des interfaces graphiques. Parmi les applications que vous pouvez créer avec Tkinter, citons un lecteur de musique, un calendrier, un outil de conversion de poids, un jeu de mots mêlés, etc.
Pour installer tkinter dans votre système, exécutez la commande suivante dans le terminal :
pip install tkinter
La commande demandes facilite les requêtes HTTP. Grâce à lui, vous pouvez développer des applications intéressantes telles qu’un vérificateur d’état de site web, un scraper web, un bot de suivi des marchés boursiers et un testeur de performance de site web. Pour installer le module requests, ouvrez un terminal et exécutez la commande suivante :
pip install requests
Vous pouvez trouver le code source complet de l’application News utilisant Python dans ce dépôt GitHub.
Générer la clé API de News
Commencez par importer les bibliothèques requises. Inscrivez-vous sur News API et générez votre clé API. Avec le compte développeur gratuit, vous pouvez envoyer jusqu’à 100 requêtes par jour, ce qui est idéal pour tester et démarrer. Enregistrez l’API dans une variable que vous utiliserez plus tard avec l’URL de base pour récupérer les principaux titres en fonction de votre pays.
from tkinter import *
from tkinter import messagebox
import requests
apiKey = 'YOUR_API_KEY'
Définir la structure de l’application
Définir une classe, NewsApp. Référence apiKey et type variables globalement. Définissez un objet de la classe et initialisez la fenêtre racine. Définissez les dimensions et le titre de votre application. Définissez deux listes, vous utiliserez la première liste pour définir les boutons et la seconde pour définir les catégories de nouvelles que vous souhaitez afficher dans votre application.
class NewsApp:
global apiKey, type
def __init__(self, root):
self.root = root
self.root.geometry('1000x650')
self.root.title("News Application")
self.newsCategoryButton = []
self.newsCategory = ["general", "entertainment", "sports", "technology"]
Définissez une étiquette qui servira de titre à votre application. Passez-lui l’élément parent dans lequel vous souhaitez la placer, le texte qu’elle doit afficher, le style de police, l’espacement et la couleur d’arrière-plan qu’elle doit avoir. Utilisez la fonction pack() option de remplissage pour que l’étiquette occupe tout l’espace dans la direction X.
Définir un LabelFrame et définissez son élément parent ainsi que la couleur d’arrière-plan qu’il doit posséder. Utilisez l’élément place() pour l’organiser aux coordonnées spécifiées. En outre, vous devez fournir la largeur et la hauteur du cadre.
title = Label(self.root, text="News Application", font=("times new roman", 28, "bold"), pady=2, bg='#ff007f').pack(fill=X)
F1 = LabelFrame(self.root, bg='#fc6c85')
F1.place(x=20, y=80, width=215, height=210)
Définir une boucle for qui parcourt la longueur du cadre. newsCat liste. Définissez un bouton dans le cadre défini précédemment. Passez le texte qu’il doit afficher et convertissez-le en majuscules. Passez la largeur, la profondeur de la bordure, le style de police et la couleur d’arrière-plan des boutons. Utilisez la fonction grille pour disposer les boutons en colonnes et ajouter du rembourrage dans les directions X et Y.
Utilisez la méthode bind pour attacher le bouton et la zone d’actualités. <Button-1> ; définit que le Espace presse se déclenchera lorsque l’utilisateur cliquera sur le bouton gauche de la souris. Ajoutez ces boutons à l’élément newsCatButton liste définie précédemment.
for i in range(len(self.newsCategory)):
b = Button(F1, text=self.newsCategory[i].upper(), width=15, bd=3, font="arial 14 bold", bg='#c154c1')
b.grid(row=i, column=0, padx=10, pady=5)
b.bind('<Button-1>', self.Newsarea)
self.newsCategoryButton.append(b)
Définissez un cadre et transmettez-lui l’élément parent dans lequel vous souhaitez le placer ainsi que la profondeur de la bordure qu’il doit avoir. Organisez-le aux coordonnées spécifiées et transmettez-lui la hauteur et la largeur relatives. Définissez une barre de défilement verticale à l’aide de la fonction orienter et le placer dans ce cadre.
Définir un widget texte. Passer l’élément parent à ce cadre ainsi que le style de police et la couleur d’arrière-plan qu’il doit posséder. Lors de la définition de la valeur de l’élément commande yscroll comme scroll_y.set elle obtient la position actuelle de la barre de défilement lors de l’interaction avec l’utilisateur.
F2 = Frame(self.root, bd=3)
F2.place(x=260, y=80, relwidth=0.7, relheight=0.8)
scroll_y = Scrollbar(F2, orient=VERTICAL)
self.txtarea = Text(F2, yscrollcommand=scroll_y.set, font=("times new roman", 15, "bold"), bg='#fc6c85')
Utiliser la fonction pack() option de remplissage pour placer la barre de défilement sur le côté droit du cadre et occuper tout l’espace dans la direction Y. En définissant le paramètre de la commande comme txtarea.yviewle mouvement de la barre de défilement est lié aux fonctions haut et bas. Ainsi, lorsque l’utilisateur interagit avec la barre de défilement, les vues de la zone de texte changent en conséquence.
Utiliser la fonction insérer() pour demander à l’utilisateur de sélectionner une catégorie et de la placer à la fin d’un texte existant. Utiliser la méthode pack() pour demander au widget de texte de prendre l’espace dans les directions X et Y et d’assigner de l’espace supplémentaire si nécessaire à l’aide de la méthode étendre paramètre.
scroll_y.pack(side=RIGHT, fill=Y)
scroll_y.config(command=self.txtarea.yview)
self.txtarea.insert(END,"Select a category:")
self.txtarea.pack(fill=BOTH, expand=1)
Extraire des nouvelles de la réponse de l’API
Définir une fonction, Newsarea() qui accepte l’instance actuelle de la classe et l’événement du bouton. Transmettre la catégorie de l’actualité sélectionnée par l’utilisateur en minuscules et la stocker. Passez les paramètres requis à l’URL de base et supprimez tout texte présent précédemment, du premier au dernier index. Insérer une ligne de démarcation.
Définir un essayer et envoyer une requête HTTP GET au serveur défini dans l’URL de base. Convertissez la réponse au format JSON et extrayez le contenu dont la clé est articles et la stocker dans une variable.
def Newsarea(self, event):
type = event.widget.cget('text').lower()
BASE_URL = f'http://newsapi.org/v2/top-headlines?country=in&category={type}&apiKey=' + apiKey
self.txtarea.delete("1.0", END)
self.txtarea.insert(END, "--------------------------------------------------------------------\n")
try:
articles = (requests.get(BASE_URL).json())['articles']
Si le nombre d’articles récupérés est différent de zéro, lancer une boucle et insérer les articles un par un dans le widget texte. Afficher le titre, suivi de la description, du contenu et de l’URL sur des lignes séparées. Insérez deux lignes pour la démarcation. Si le nombre d’articles est nul, afficher qu’aucune nouvelle n’est disponible pour cette catégorie particulière.
Si le bloc try échoue, utilisez le bloc exception pour afficher le message d’erreur approprié aux utilisateurs.
if (articles != 0):
for i in range(len(articles)):
self.txtarea.insert(END, f"{articles[i]['title']}\n")
self.txtarea.insert(END, f"{articles[i]['description']}\n")
self.txtarea.insert(END, f"{articles[i]['content']}\n")
self.txtarea.insert(END, f"read more...{articles[i]['url']}\n")
self.txtarea.insert(END, "-------------------------------------------------------------\n")
self.txtarea.insert(END, "-------------------------------------------------------------\n")
else:
self.txtarea.insert(END, "No news available")
except Exception as e:
messagebox.showerror('ERROR', "Sorry, we ran into some issues. Please check the internet connection and try again.")
Créez une instance de la classe et initialisez-la. Les mainloop() indique à Python de lancer la boucle d’événements Tkinter et d’écouter les événements jusqu’à ce que vous fermiez la fenêtre.
root = Tk()
obj = NewsApp(root)
root.mainloop()
Mettez tout ce code ensemble et votre application est prête à afficher des nouvelles selon différentes catégories.
La sortie de l’application d’actualités
Lors de l’exécution du programme, la zone de texte demande de sélectionner une catégorie. En cliquant sur l’un des boutons, on affiche l’actualité avec la description, le contenu et le lien (s’il existe) de cette catégorie, séparés par deux lignes.
APIs utiles pour votre projet Python
Les API sont très pratiques pour intégrer de nouvelles applications à des systèmes logiciels existants. Vous pouvez utiliser l’API OpenWeatherMap pour récupérer des informations météorologiques en temps réel sur n’importe quelle zone et l’API Google Maps pour incorporer des cartes dans votre application Web. Vous pouvez automatiser des tâches GitHub via l’API GitHub et utiliser l’API Zoom pour intégrer la vidéoconférence.
Vous pouvez également utiliser la puissance de ChatGPT au sein de vos propres applications en utilisant l’API d’OpenAI et créer de fascinantes applications alimentées par l’IA.
