Skip to content

Commit af6e047

Browse files
authored
Merge pull request #8 from return/breaking-news
Updated breaking news ticker
2 parents 8fc9eb3 + f08db08 commit af6e047

2 files changed

Lines changed: 25 additions & 15 deletions

File tree

bbcli/bbcapi.py

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import arrow
55
import os
66

7+
from defusedxml import minidom
8+
79
API_BASE_URL = "http://trevor-producer-cdn.api.bbci.co.uk"
8-
BBC_URL = "http://www.bbc.co.uk"
10+
BBC_URL = "https://www.bbc.co.uk"
11+
BBC_POLLING_URL = "https://polling.bbc.co.uk"
912

1013
class BBC():
1114

@@ -22,22 +25,29 @@ def get_ticker(self):
2225
if ticker == None:
2326
return None
2427
else:
25-
data = json.dumps(ticker.json())
28+
data = json.dumps(ticker.json(strict=False))
2629
return self.parse_ticker_data(data)
2730

2831
def parse_ticker_data(self, ticker_data):
2932
tickers = []
3033
data = json.loads(ticker_data)
31-
for d in data['entries']:
32-
headline = d['headline']
33-
prompt = d['prompt']
34-
breaking = d['isBreaking']
35-
if 'url' in d:
36-
url = d['url']
37-
else:
38-
url = ""
39-
ticker = Ticker(headline, prompt, breaking, url)
40-
tickers.append(ticker)
34+
35+
if len(data["html"]) == 0:
36+
return tickers
37+
38+
response = data["html"]
39+
htmlData = minidom.parseString(response)
40+
elements = htmlData.getElementsByTagName("div")
41+
42+
# Not yet tested to handle multiple breaking news alerts.
43+
44+
# Heading
45+
headline = elements[0].getElementsByTagName("p")[0].firstChild.nodeValue.replace("\n","")
46+
# News Link as in /news/
47+
url = elements[0].getElementsByTagName("a")[0].getAttribute('href')
48+
49+
ticker = Ticker(headline, "BREAKING NEWS", "true", BBC_URL + url)
50+
tickers.append(ticker)
4151
return tickers
4252

4353
def parse_news(self, stories):
@@ -84,7 +94,7 @@ def get_bbc_ticker(self):
8494
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/5311 (KHTML, like Gecko) Chrome/13.0.837.0 Safari/5311'
8595
}
8696
try:
87-
res = requests.get(BBC_URL + "/news/10284448/ticker.sjson", data=None, headers=ua)
97+
res = requests.get(BBC_POLLING_URL + "/news/latest_breaking_news?audience=Domestic", data=None, headers=ua)
8898
except requests.ConnectionError as e:
8999
if hasattr(e, 'reason'):
90100
print 'We failed to reach a server.'
@@ -93,7 +103,7 @@ def get_bbc_ticker(self):
93103
print 'The server couldn\'t fulfill the request.'
94104
print 'Error code: ', e.code
95105
return res
96-
106+
97107
class News():
98108

99109
def __init__(self, title, link, subtext):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
author_email='wesley@hakobaito.co.uk',
1313
url='https://github.com/hako/bbcli',
1414
packages=['bbcli'],
15-
install_requires=['urwid', 'requests', 'arrow'],
15+
install_requires=['urwid', 'requests', 'arrow', 'defusedxml'],
1616
classifiers=[
1717
'Environment :: Console',
1818
'License :: OSI Approved :: MIT License',

0 commit comments

Comments
 (0)