Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """RSS News-feed reader GUI V1.61.
- By Steve Shambles Sept 2018
- Updated Nov 2019
- stevepython.wordpress.com
- pip3 install beautifulsoup4
- """
- import sys
- from tkinter import BOTTOM, Button, LabelFrame, Listbox, Menu, messagebox
- from tkinter import RIGHT, Scrollbar, Tk, X, Y
- import urllib.request
- from urllib.request import urlopen
- import webbrowser
- import xml.etree.ElementTree as ElementTree
- from bs4 import BeautifulSoup as soup
- root = Tk()
- root.title('NewsBox V1.61')
- if sys.platform.startswith('win'):
- root.geometry('464x632')
- root.resizable(False, False)
- else:
- root.geometry('517x663')
- def sky_btn():
- """When sky button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- skysports_url = 'https://www.skysports.com/rss/12040'
- skysports_news(skysports_url)
- def fox_btn():
- """When fox button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- foxsports_url = 'https://api.foxsports.com/v1/' \
- 'rss?partnerKey=zBaFxRyGKCfxBagJG9b8pqLyndmvo7UU'
- foxsports_news(foxsports_url)
- def buzz_btn():
- """When buzz button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- buzz_url = 'https://www.buzzfeed.com/world.xml'
- buzz_news(buzz_url)
- def ny_btn():
- """When nytimes button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- nytimes_url = 'https://www.nytimes.com/svc/collections/v1/publish/' \
- 'https://www.nytimes.com/section/world/rss.xml'
- nytimes_news(nytimes_url)
- def bbc_btn():
- """When bbc button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- bbc_news()
- def google_btn():
- """When google button clicked. Clear listbox, fill with news."""
- list_box.delete('0', 'end')
- google_url = 'https://news.google.com/news/rss/?ned=uk&gl=US&hl=en'
- google_news(google_url)
- def skysports_news(xml_news_url):
- """Retrieve and display skysports news in listbox from RSS feed."""
- gnews_client = urlopen(xml_news_url)
- xml_page = gnews_client.read()
- gnews_client.close()
- soup_page = soup(xml_page, 'xml')
- news_list = soup_page.findAll('item')
- list_box.insert('end', ' SKY SPORTS HEADLINES')
- list_box.itemconfig('end', {'bg': 'dodgerblue'})
- list_box.insert('end', ' ' *85)
- for skysports_news in news_list:
- PDate = (skysports_news.pubDate.text)
- list_box.insert('end', PDate)
- Tit = (skysports_news.title.text)
- list_box.insert('end', Tit)
- Lnk = (skysports_news.link.text)
- list_box.insert('end', Lnk)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def foxsports_news(xml_news_url):
- """Retrieve and display foxsports news in listbox from RSS feed."""
- gnews_client = urlopen(xml_news_url)
- xml_page = gnews_client.read()
- gnews_client.close()
- soup_page = soup(xml_page, 'xml')
- news_list = soup_page.findAll('item')
- list_box.insert('end', ' FOX SPORTS NEWS HEADLINES')
- list_box.itemconfig('end', {'bg': 'orange'})
- list_box.insert('end', ' ' *85)
- for foxsports_news in news_list:
- PDate = (foxsports_news.pubDate.text)
- list_box.insert('end', PDate)
- Tit = (foxsports_news.title.text)
- list_box.insert('end', Tit)
- Lnk = (foxsports_news.link.text)
- list_box.insert('end', Lnk)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def buzz_news(xml_news_url):
- """Retrieve and display buzzfeed news in listbox from RSS feed."""
- gnews_client = urlopen(xml_news_url)
- xml_page = gnews_client.read()
- gnews_client.close()
- soup_page = soup(xml_page, 'xml')
- news_list = soup_page.findAll('item')
- list_box.insert('end', ' BUZZFEED NEWS HEADLINES')
- list_box.itemconfig('end', {'bg': 'salmon'})
- list_box.insert('end', ' ' *85)
- for buzz_news in news_list:
- PDate = (buzz_news.pubDate.text)
- list_box.insert('end', PDate)
- Tit = (buzz_news.title.text)
- list_box.insert('end', Tit)
- Lnk = (buzz_news.link.text)
- list_box.insert('end', Lnk)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def nytimes_news(xml_news_url):
- """Retrieve and display nytimes news in listbox from RSS feed."""
- gnews_client = urlopen(xml_news_url)
- xml_page = gnews_client.read()
- gnews_client.close()
- soup_page = soup(xml_page, 'xml')
- news_list = soup_page.findAll('item')
- list_box.insert('end', ' NEW YORK TIMES NEWS HEADLINES')
- list_box.itemconfig('end', {'bg': 'green2'})
- list_box.insert('end', ' ' *85)
- for nytimes_news in news_list:
- PDate = (nytimes_news.pubDate.text)
- list_box.insert('end', PDate)
- Tit = (nytimes_news.title.text)
- list_box.insert('end', Tit)
- Lnk = (nytimes_news.link.text)
- list_box.insert('end', Lnk)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def google_news(xml_news_url):
- """Retrieve and display google news in listbox from RSS feed."""
- gnews_client = urlopen(xml_news_url)
- xml_page = gnews_client.read()
- gnews_client.close()
- soup_page = soup(xml_page, 'xml')
- news_list = soup_page.findAll('item')
- list_box.insert('end', ' GOOGLE NEWS HEADLINES')
- list_box.itemconfig('end', {'bg': 'gold'})
- list_box.insert('end', ' ' *85)
- for google_news in news_list:
- PDate = (google_news.pubDate.text)
- list_box.insert('end', PDate)
- Tit = (google_news.title.text)
- list_box.insert('end', Tit)
- Lnk = (google_news.link.text)
- list_box.insert('end', Lnk)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def bbc_news():
- """Retrieve and display bbc news in listbox from RSS feed."""
- bbc_url = 'http://feeds.bbci.co.uk/news/world/rss.xml'
- REQ = urllib.request.urlopen(bbc_url)
- PAGE = REQ.read()
- DOC = ElementTree.fromstring(PAGE)
- list_box.insert('end', ' BBC WORLD NEWS HEADLINES')
- list_box.itemconfig('end', {'bg': 'plum'})
- list_box.insert('end', ' ' *85)
- for item in DOC.iter('item'):
- title = item.find('title').text
- pubDate = item.find('pubDate').text
- list_box.insert('end', pubDate)
- list_box.insert('end', title)
- link = item.find('link').text
- list_box.insert('end', link)
- list_box.itemconfig('end', {'fg': 'blue'})
- list_box.insert('end', '-' *85)
- def double_clicked(event):
- """Double clicked mouse on an item"""
- ev_w = event.widget
- idx = int(ev_w.curselection()[0])
- value = ev_w.get(idx)
- # Check is a url.
- if 'http' in value:
- webbrowser.open(value)
- def about_menu():
- """About program pop up."""
- messagebox.showinfo('About', 'NewsBox V1.61.\n'
- 'By Steve Shambles.\n'
- 'Sept 2018.\n'
- 'Updated Nov 2019.')
- def visit_blog():
- """Visit my blog, you know it makes sense."""
- webbrowser.open('https://stevepython.wordpress.com/')
- # Create 2 frames.
- btn_frame = LabelFrame(root)
- btn_frame.grid(row=0, column=0)
- listbox_frame = LabelFrame(root)
- listbox_frame.grid(padx=8, pady=8)
- # Drop-down menu.
- MENU_BAR = Menu(root)
- FILE_MENU = Menu(MENU_BAR, tearoff=0)
- MENU_BAR.add_cascade(label='Menu', menu=FILE_MENU)
- FILE_MENU.add_command(label='Visit Blog', command=visit_blog)
- FILE_MENU.add_separator()
- FILE_MENU.add_command(label='About', command=about_menu)
- FILE_MENU.add_command(label='Exit', command=root.destroy)
- root.config(menu=MENU_BAR)
- # Buttons.
- bbc_btn = Button(btn_frame, bg='plum', text=' BBC News ', command=bbc_btn)
- bbc_btn.grid(row=0, column=0, pady=4, padx=4)
- google_btn = Button(btn_frame, bg='gold', text='Google News', command=google_btn)
- google_btn.grid(row=0, column=1, pady=4, padx=4)
- nytimes_btn = Button(btn_frame, bg='green2', text=' NY Times ', command=ny_btn)
- nytimes_btn.grid(row=0, column=2, pady=4, padx=4)
- sky_btn = Button(btn_frame, bg='dodgerblue', text=' Sky Sports ', command=sky_btn)
- sky_btn.grid(row=1, column=0, pady=4, padx=4)
- foxsports_btn = Button(btn_frame, bg='orange', text=' Fox Sports ', command=fox_btn)
- foxsports_btn.grid(row=1, column=1, pady=4, padx=4)
- buzz_btn = Button(btn_frame, bg='salmon', text=' BuzzFeed ', command=buzz_btn)
- buzz_btn.grid(row=1, column=2, pady=4, padx=4)
- # Listbox with scrollbars.
- list_box = Listbox(
- master=listbox_frame,
- selectmode='single',
- width=60,
- height=30,
- fg='black',
- bg='skyblue')
- sbar_vert = Scrollbar(listbox_frame, orient='vertical')
- sbar_vert.pack(side=RIGHT, fill=Y)
- list_box.configure(yscrollcommand=sbar_vert.set)
- sbar_vert.configure(command=list_box.yview)
- sbar_hor = Scrollbar(listbox_frame, orient='horizontal')
- sbar_hor.pack(side=BOTTOM, fill=X)
- list_box.configure(xscrollcommand=sbar_hor.set)
- sbar_hor.configure(command=list_box.xview)
- list_box.pack()
- list_box.bind('<Double-1>', double_clicked)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement