Научете как да създадете свое собствено приложение за новини с Python и библиотеката Tkinter.

В този забързан свят е изключително важно да сте в крак с последните новини. Създайте свое собствено приложение за новини, което ви предоставя новини в различни категории като развлечения, спорт и технологии, достъпни на всяка платформа на една ръка разстояние.

Ще разработите това приложение с помощта на Tkinter, стандартната GUI библиотека за Python, и ще го захранвате с помощта на API за новини, който получава статии от повече от 80 000 източника.

Инсталирайте tkinter и изисква модули

Tkinter е междуплатформен, прост и лесен за използване модул които можете да използвате за бързо създаване на графични потребителски интерфейси. Някои от приложенията, които можете да създавате с помощта на Tkinter, включват музикален плейър, календар, инструмент за преобразуване на теглото, игра за смесване на думи и т.н.

Да инсталираш tkinter във вашата система изпълнете следната команда в терминала:

pip инсталирайте tkinter
instagram viewer

The заявки модулът улеснява отправянето на HTTP заявки. С тази, можете да разработите интересни приложения като проверка на състоянието на уебсайта, уеб скрепер, бот за наблюдение на фондовия пазар и тестер за ефективност на уебсайтове. За да инсталирате модула за заявки, отворете терминала и изпълнете следната команда:

заявки за инсталиране на pip

Тук можете да намерите целия изходен код на приложението News, използващо Python GitHub хранилище.

Генерирайте ключа за API за новини

Започнете с импортиране на необходимите библиотеки. Регистрирайте се на API за новини и генерирайте вашия API ключ. С безплатния акаунт на програмист можете да изпращате до 100 заявки дневно, което е чудесно за тестване и започване. Съхранявайте API в променлива, която ще използвате по-късно с основния URL адрес, за да извлечете водещите заглавия според вашата страна.

от tkinter импортиране *
от tkinter импортиране кутия за съобщения
импортиране заявки

apiKey = „YOUR_API_KEY“

Определете структурата на приложението

Определете клас, NewsApp. Позоваване на apiKey и Тип променливи в световен мащаб. Дефинирайте обект от класа и инициализирайте основния прозорец. Задайте размерите и заглавието на вашето приложение. Дефинирайте два списъка, като ще използвате първия списък, за да дефинирате бутоните, а втория, за да дефинирате категориите новини, които искате да показвате във вашето приложение.

класNewsApp:
глобален apiKey, тип
деф__в него__(сам, корен):
self.root = корен
self.root.geometry("1000x650")
self.root.title(„Приложение за новини“)
self.newsCategoryButton = []
self.newsCategory = ["общ", "развлечение", "спорт", "технология"]

Дефинирайте етикет, който действа като заглавие на вашето приложение. Предайте родителския елемент, в който искате да го поставите, текста, който трябва да показва, стила на шрифта, подложката и цвета на фона, който трябва да има. Използвай пакет() опция за запълване, за да накарате етикета да заема цялото пространство в посока X.

Определете а LabelFrame и задайте неговия родителски елемент заедно с цвета на фона, който трябва да притежава. Използвай място() функция, за да го организира в определени координати. Допълнително преминете ширината и височината на рамката.

 заглавие = Етикет (self.root, text=„Приложение за новини“, шрифт=("Times New Roman", 28, "удебелен"), pady=2, bg='#ff007f').pack (fill=X)
F1 = LabelFrame (self.root, bg='#fc6c85')
F1.място (x=20, y=80, ширина=215, височина=210)

Дефинирайте for цикъл, който преминава през дължината на новиниCat списък. Дефинирайте бутон в дефинираната по-рано рамка. Предайте текста, който трябва да показва, и го преобразувайте в главни букви. Предайте ширината, дълбочината на границата, стила на шрифта и цвета на фона на бутоните. Използвай решетка мениджър, за да подредите бутоните в колонен формат и да добавите подложка в посоките X и Y.

Използвайте метода на свързване, за да прикрепите бутона и областта за новини. определя, че Newsarea функция ще се появи при щракване с левия бутон на мишката от потребителя. Добавете тези бутони към newsCatButton списък, определен по-рано.

за аз в диапазон (len (self.newsCategory)):
b = Бутон (F1, text=self.newsCategory[i].upper(), width=15, bd=3, шрифт="arial 14 получер", bg='#c154c1')
b.grid (ред=i, колона=0, padx=10, pady=5)
b.bind('', себе си. Newsarea)
self.newsCategoryButton.append (b)

Дефинирайте рамка и й предайте родителския елемент, в който искате да я поставите, и дълбочината на границата, която трябва да има. Организирайте го в определени координати и предайте относителната височина и ширина. Дефинирайте вертикална лента за превъртане, като използвате ориентирам параметър и го поставете в тази рамка.

Дефинирайте текстов уиджет. Предайте родителския елемент като тази рамка заедно със стила на шрифта и цвета на фона, който трябва да притежава. При задаване на стойността на yscrollcommand като scroll_y.set той получава текущата позиция на лентата за превъртане при взаимодействие с потребителя.

 F2 = рамка (self.root, bd=3)
F2.място (x=260, y=80, relwidth=0.7, relheight=0.8)
scroll_y = Лента за превъртане (F2, ориентир = ВЕРТИКАЛ)
self.txtarea = Текст (F2, yscrollcommand=scroll_y.set, шрифт=("Times New Roman", 15, "удебелен"), bg='#fc6c85')

Използвай пакет() опция за запълване, за да поставите лентата за превъртане от дясната страна на рамката и да заемете цялото пространство в посока Y. При задаване на командния параметър като txtarea.yview, движението на лентата за превъртане се свързва с функциите нагоре и надолу. Така че, когато потребителят взаимодейства с лентата за превъртане, изгледите на текстовата област се променят съответно.

Използвай вмъкване () метод, за да помолите потребителя да избере категория и да я постави в края на всеки съществуващ текст. Използвай пакет() метод, за да помолите текстовия модул да заеме пространството в посока X и Y и да зададе допълнително пространство, ако е необходимо, като използва разширяване параметър.

 scroll_y.pack (страна=ДЯСНО, запълване=Y)
scroll_y.config (команда=self.txtarea.yview)
self.txtarea.insert (КРАЙ,"Избери категория:")
self.txtarea.pack (fill=BOTH, expand=1)

Извличане на новини от отговора на API

Дефинирайте функция, Newsarea() който приема текущия екземпляр на класа и събитието на бутона. Предайте категорията на избраната от потребителя новина с малки букви и я запазете. Предайте необходимите параметри към основния URL адрес и изтрийте всеки текст, присъстващ по-рано от първия индекс до последния. Поставете линия за демаркация.

Определете а опитвам блокира и изпраща HTTP GET заявка до сървъра, дефиниран в основния URL адрес. Преобразувайте отговора във формат JSON и извлечете съдържанието, което има ключа като статии и го съхранявайте в променлива.

дефNewsarea(себе си, събитие):
тип = event.widget.cget('текст').нисък()
BASE_URL = е' http://newsapi.org/v2/top-headlines? държава=в&категория={Тип}&apiKey=' + apiKey
self.txtarea.delete("1.0", КРАЙ)
self.txtarea.insert (КРАЙ, "\н")
опитвам:
статии = (requests.get (BASE_URL).json())["статии"]

Ако броят на извлечените статии не е нула, стартирайте цикъл и вмъкнете статиите една по една в текстовия модул. Покажете заглавието, последвано от описанието, съдържанието и URL адреса в отделни редове. Поставете две линии за демаркация. Ако броят на статиите е нула, покажете, че няма налични новини за тази конкретна категория.

Ако пробният блок е неуспешен, използвайте блока за изключение, за да покажете съответното съобщение за грешка на потребителите.

ако (статии != 0):
за аз в гама (len (статии)):
self.txtarea.insert (КРАЙ, е"{статии[i]['заглавие']}\н")
self.txtarea.insert (КРАЙ, е"{статии[i]["описание"]}\н")
self.txtarea.insert (КРАЙ, е"{статии[i]["съдържание"]}\н")
self.txtarea.insert (КРАЙ, f"прочетете повече...{статии[i]['url']}\н")
self.txtarea.insert (КРАЙ, "\н")
self.txtarea.insert (КРАЙ, "\н")
друго:
self.txtarea.insert (КРАЙ, „Няма налични новини“)
с изключение Изключение като д:
messagebox.showerror(„ГРЕШКА“, „Съжаляваме, срещнахме някои проблеми. Моля, проверете интернет връзката и опитайте отново.")

Създайте екземпляр на класа и го инициализирайте. The mainloop() функцията казва на Python да стартира цикъла на събитията на Tkinter и да слуша за събития, докато затворите прозореца.

корен = Tk()
obj = NewsApp (корен)
root.mainloop()

Съберете целия код и вашето приложение е готово да показва новини според различни категории.

Резултатът от приложението за новини

При стартиране на програмата текстовата област изисква избор на категория. При щракване върху някой от бутоните, той показва новината с описанието, съдържанието и връзката към нея (ако има) за тази категория, разделени с два реда.

Полезни API за вашия Python проект

API са супер удобни за интегриране на нови приложения със съществуващи софтуерни системи. Можете да използвате OpenWeatherMap API, за да извлечете информация за времето в реално време за всяка област и Google Maps API, за да включите карти в приложението на вашия уебсайт. Можете да автоматизирате GitHub задачи чрез GitHub API и да използвате Zoom API за интегриране на видеоконференции.

Можете също така да използвате силата на ChatGPT от вашите собствени приложения, като използвате API на OpenAI и да създадете някои завладяващи приложения, задвижвани от AI.