The branch, eden has been updated
via cdb458537873949fd538b7944d16c2807495bcbb (commit)
from 00957cdc2671bdee3a9ffb59bbdba92a0490657b (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=cdb458537873949fd538b7944d16c2807495bcbb
commit cdb458537873949fd538b7944d16c2807495bcbb
Author: spiff <[email protected]>
Date: Fri Apr 13 09:15:51 2012 +0200
[plugin.video.ted.talks] updated to version 3.0.1
diff --git a/plugin.video.ted.talks/addon.xml b/plugin.video.ted.talks/addon.xml
index 9323220..5de73f5 100644
--- a/plugin.video.ted.talks/addon.xml
+++ b/plugin.video.ted.talks/addon.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.ted.talks"
name="TED Talks"
- version="3.0.0"
+ version="3.0.1"
provider-name="rwparris2, moreginger">
<requires>
<import addon="xbmc.python" version="2.0"/>
diff --git a/plugin.video.ted.talks/changelog.txt
b/plugin.video.ted.talks/changelog.txt
index eec7c58..e6d62b4 100644
--- a/plugin.video.ted.talks/changelog.txt
+++ b/plugin.video.ted.talks/changelog.txt
@@ -1,3 +1,6 @@
+[B]Version 3.0.1[/B]
+Full speaker list restored
(https://github.com/moreginger/xbmc-plugin.video.ted.talks/issues/14)
+
[B]Version 3.0.0[/B]
Bump major version for Eden repository
diff --git a/plugin.video.ted.talks/resources/lib/ted_talks.py
b/plugin.video.ted.talks/resources/lib/ted_talks.py
index 7e5d0b5..7c039ee 100644
--- a/plugin.video.ted.talks/resources/lib/ted_talks.py
+++ b/plugin.video.ted.talks/resources/lib/ted_talks.py
@@ -119,7 +119,7 @@ class UI:
def speakers(self):
newMode = 'speakerVids'
- speakers = self.ted_talks.Speakers(self.get_HTML, self.args.get('url'))
+ speakers = ted_talks_scraper.Speakers(self.get_HTML,
self.args.get('url'))
#add speakers to the list
for speaker in speakers.getAllSpeakers():
speaker['mode'] = newMode
@@ -131,7 +131,7 @@ class UI:
def speakerVids(self):
newMode = 'playVideo'
- speakers = self.ted_talks.Speakers(self.get_HTML, self.args.get('url'))
+ speakers = ted_talks_scraper.Speakers(self.get_HTML,
self.args.get('url'))
for talk in speakers.getTalks():
talk['mode'] = newMode
self.addItem(talk, isFolder = False)
diff --git a/plugin.video.ted.talks/resources/lib/ted_talks_scraper.py
b/plugin.video.ted.talks/resources/lib/ted_talks_scraper.py
index cc04336..539041d 100644
--- a/plugin.video.ted.talks/resources/lib/ted_talks_scraper.py
+++ b/plugin.video.ted.talks/resources/lib/ted_talks_scraper.py
@@ -8,55 +8,55 @@ URLTHEMES = 'http://www.ted.com/themes/atoz/page/'
URLSPEAKERS = 'http://www.ted.com/speakers/atoz/page/'
URLSEARCH = 'http://www.ted.com/search?q=%s/page/'
+
def getNavItems(html):
"""self.navItems={'next':url, 'previous':url,
'selected':pagenumberasaninteger}"""
navItems = {'next':None, 'previous':None, 'selected':1}
paginationContainer = SoupStrainer(attrs =
{'class':re.compile('pagination')})
- for liTag in BeautifulSoup(html, parseOnlyThese =
paginationContainer).findAll('li'):
- if liTag.has_key('class'):
- if liTag['class'] == 'next':
- navItems['next'] = URLTED+liTag.a['href']
- elif liTag['class'] == 'prev':
- navItems['previous'] = URLTED+liTag.a['href']
- elif liTag['class'] == 'selected':
- navItems['selected'] = int(liTag.a.string)
+ for aTag in BeautifulSoup(html, parseOnlyThese =
paginationContainer).findAll('a'):
+ if aTag.has_key('class'):
+ if aTag['class'] == 'next':
+ navItems['next'] = URLTED+aTag['href']
+ elif aTag['class'] == 'prev':
+ navItems['previous'] = URLTED+aTag['href']
+ elif aTag['class'] == 'selected':
+ navItems['selected'] = int(aTag.string)
return navItems
-class NewTalks:
- """
- Fetches new talks!
- """
-
- def __init__(self, getHTML, getLS):
- """
- getHTML method to getHTML from a URL
- getLS method to get localized string from an integer code
- """
- self.getHTML = getHTML
- self.getLS = getLS
-
- def getNewTalks(self, url = None):
- """
- Returns 2-tuples, first value is whether this is a folder, second is
attributes dict
- """
- if url == None:
- url = 'http://www.ted.com/talks/list/page/'
- html = self.getHTML(url)
+class Speakers:
+
+ def __init__(self, get_HTML, url):
+ # adding 9999 to the url takes the script to the very last page of the
list, providing the total # of pages.
+ if url is None:
+ url = URLSPEAKERS + '9999'
+ self.get_HTML = get_HTML
+ self.html = self.get_HTML(url)
+ # only bother with navItems where they have a chance to appear.
+ if URLSPEAKERS in url:
+ self.navItems = getNavItems(self.html)
+
+ def getAllSpeakers(self):
+ speakerContainers = SoupStrainer(attrs =
{'href':re.compile('/speakers/\S.+?.html')})
+ pages_count = self.navItems['selected']
+ for i in range(pages_count):
+ # don't parse the last page twice.
+ if i is not pages_count:
+ html = self.get_HTML(URLSPEAKERS+str(i+1))
+ else:
+ html = self.html
+ for speaker in BeautifulSoup(html, parseOnlyThese =
speakerContainers):
+ title = speaker.string
+ link = URLTED+speaker['href']
+ yield {'url':link, 'Title':title}
- # Forward/backwards
- navItems = getNavItems(html)
- if navItems['next']:
- yield True, {'mode':'newTalks', 'Title': self.getLS(30020),
'url':navItems['next']}
- if navItems['previous']:
- yield True, {'mode':'newTalks', 'Title': self.getLS(30021),
'url':navItems['previous']}
-
- talkContainers = SoupStrainer(attrs =
{'class':re.compile('talkMedallion')})
- for talk in BeautifulSoup(html, parseOnlyThese = talkContainers):
+ def getTalks(self):
+ talkContainer = SoupStrainer(attrs = {'class':re.compile('box
clearfix')})
+ for talk in BeautifulSoup(self.html, parseOnlyThese = talkContainer):
+ title = talk.h4.a.string
link = URLTED+talk.dt.a['href']
- title = cleanHTML(talk.dt.a['title'])
pic = resizeImage(talk.find('img', attrs =
{'src':re.compile('.+?\.jpg')})['src'])
- yield False, {'mode':'playVideo', 'url':link, 'Title':title,
'Thumb':pic}
+ yield {'url':link, 'Title':title, 'Thumb':pic}
class TedTalks:
@@ -99,47 +99,6 @@ class TedTalks:
return {'Title':title, 'Director':speaker, 'Genre':'TED', 'Plot':plot,
'PlotOutline':plot, 'id':id, 'url':url}
- class Speakers:
-
- def __init__(self, get_HTML, url):
- # adding 9999 to the url takes the script to the very last page of
the list, providing the total # of pages.
- if url is None:
- url = URLSPEAKERS + '9999'
- self.get_HTML = get_HTML
- self.html = self.get_HTML(url)
- # only bother with navItems where they have a chance to appear.
- if URLSPEAKERS in url:
- self.navItems = getNavItems(self.html)
-
- def getSpeakers(self):
- # use getAllSpeakers instead... just leaving this function here
for educational purposes.
- speakerContainers = SoupStrainer(attrs =
{'href':re.compile('/speakers/\S.+?.html')})
- for speaker in BeautifulSoup(self.html, parseOnlyThese =
speakerContainers):
- title = speaker.string
- link = URLTED+speaker['href']
- yield {'url':link, 'Title':title, 'label':title}
-
- def getAllSpeakers(self):
- speakerContainers = SoupStrainer(attrs =
{'href':re.compile('/speakers/\S.+?.html')})
- for i in range(self.navItems['selected']):
- # don't parse the last page twice.
- if i is not 8:
- html = self.get_HTML(URLSPEAKERS+str(i+1))
- else:
- html = self.html
- for speaker in BeautifulSoup(html, parseOnlyThese =
speakerContainers):
- title = speaker.string
- link = URLTED+speaker['href']
- yield {'url':link, 'Title':title}
-
- def getTalks(self):
- talkContainer = SoupStrainer(attrs = {'class':re.compile('box
clearfix')})
- for talk in BeautifulSoup(self.html, parseOnlyThese =
talkContainer):
- title = talk.h4.a.string
- link = URLTED+talk.dt.a['href']
- pic = resizeImage(talk.find('img', attrs =
{'src':re.compile('.+?\.jpg')})['src'])
- yield {'url':link, 'Title':title, 'Thumb':pic}
-
class Themes:
def __init__(self, get_HTML, url=None):
diff --git a/plugin.video.ted.talks/resources/lib/ted_talks_scraper_test.py
b/plugin.video.ted.talks/resources/lib/ted_talks_scraper_test.py
index ab525ce..25567ff 100644
--- a/plugin.video.ted.talks/resources/lib/ted_talks_scraper_test.py
+++ b/plugin.video.ted.talks/resources/lib/ted_talks_scraper_test.py
@@ -36,18 +36,15 @@ class TestTedTalks(unittest.TestCase):
self.ted_talks.getVideoDetails("http://www.ted.com/talks/bjarke_ingels_hedonistic_sustainability.html")
-class TestNewTalks(unittest.TestCase):
-
+class TestSpeakers(unittest.TestCase):
+
def setUp(self):
- self.new_talks = ted_talks_scraper.NewTalks(getHTML, lambda code: "%s"
% code)
-
+ self.speakers = ted_talks_scraper.Speakers(getHTML, None)
+
def test_smoke(self):
- new_talks_page_1 = list(self.new_talks.getNewTalks())
- self.assertEqual((True, {'Title':'30020', 'mode':'newTalks',
'url':u'http://www.ted.com/talks/list?page=2'}), new_talks_page_1[0])
- assertTalk(self, new_talks_page_1[1])
-
- new_talks_page_2 =
list(self.new_talks.getNewTalks(new_talks_page_1[0][1]['url']))
- self.assertEqual((True, {'Title':'30020', 'mode':'newTalks',
'url':u'http://www.ted.com/talks/list?page=3'}), new_talks_page_2[0])
- self.assertEqual((True, {'Title':'30021', 'mode':'newTalks',
'url':u'http://www.ted.com/talks/list?page=1'}), new_talks_page_2[1])
- assertTalk(self, new_talks_page_2[2])
-
+ speakers = list(self.speakers.getAllSpeakers())
+ # 1027 at time of writing, feel free to update
+ self.assertTrue(len(speakers) >= 1027)
+ # See
https://github.com/moreginger/xbmc-plugin.video.ted.talks/issues/14 for the
chosen speaker :)
+ self.assertTrue('Clifford Stoll' in [s['Title'] for s in speakers])
+
-----------------------------------------------------------------------
Summary of changes:
plugin.video.ted.talks/addon.xml | 2 +-
plugin.video.ted.talks/changelog.txt | 3 +
plugin.video.ted.talks/resources/lib/ted_talks.py | 4 +-
.../resources/lib/ted_talks_scraper.py | 119 +++++++-------------
.../resources/lib/ted_talks_scraper_test.py | 23 ++--
5 files changed, 55 insertions(+), 96 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons