44import arrow
55import os
66
7+ from defusedxml import minidom
8+
79API_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
1013class 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+
97107class News ():
98108
99109 def __init__ (self , title , link , subtext ):
0 commit comments