The branch, eden-pre has been updated
via 1f5e952e3e0ff6df5ec25da009ef774f7754b1f4 (commit)
from aa4f6ed1a0321f65fac57c13cd9f857e14a1b09e (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=1f5e952e3e0ff6df5ec25da009ef774f7754b1f4
commit 1f5e952e3e0ff6df5ec25da009ef774f7754b1f4
Author: spiff <[email protected]>
Date: Thu Dec 8 20:52:13 2011 +0100
[plugin.video.4players] updated to version 1.1.2
diff --git a/plugin.video.4players/addon.py b/plugin.video.4players/addon.py
index f03e99e..dae2678 100644
--- a/plugin.video.4players/addon.py
+++ b/plugin.video.4players/addon.py
@@ -1,7 +1,33 @@
from xbmcswift import Plugin
import resources.lib.scraper as scraper
-plugin = Plugin('4Players Videos', 'plugin.video.4players', __file__)
+class Plugin_adv(Plugin):
+
+ def add_items(self, iterable, view_mode=None, is_update=False,
+ sort_method_ids=[]):
+ print is_update
+ items = []
+ urls = []
+ for i, li_info in enumerate(iterable):
+ items.append(self._make_listitem(**li_info))
+ if self._mode in ['crawl', 'interactive', 'test']:
+ print '[%d] %s%s%s (%s)' % (i + 1, '', li_info.get('label'),
+ '', li_info.get('url'))
+ urls.append(li_info.get('url'))
+ if self._mode is 'xbmc':
+ if view_mode:
+ import xbmc
+ xbmc.executebuiltin('Container.SetViewMode(%s)' % view_mode)
+ import xbmcplugin
+ xbmcplugin.addDirectoryItems(self.handle, items, len(items))
+ for id in sort_method_ids:
+ xbmcplugin.addSortMethod(self.handle, id)
+ print 'added: %d' % id
+ xbmcplugin.endOfDirectory(self.handle, updateListing=is_update)
+ return urls
+
+
+plugin = Plugin_adv('4Players Videos', 'plugin.video.4players', __file__)
@plugin.route('/', default=True)
@@ -44,7 +70,10 @@ def show_videos(category, page):
'url': plugin.url_for('show_videos',
category=category,
page=prev_page)})
- return plugin.add_items(items)
+ is_update = (int(page) != 1) # only update the listing if page is not 1
+ sort_method_ids = (21, 3, 29) # Playlist, date, runtime
+ return plugin.add_items(items, is_update=is_update,
+ sort_method_ids=sort_method_ids)
@plugin.route('/watch/<url>/')
diff --git a/plugin.video.4players/addon.xml b/plugin.video.4players/addon.xml
index f507198..5f31c09 100644
--- a/plugin.video.4players/addon.xml
+++ b/plugin.video.4players/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.4players" name="4Players Videos" version="1.1.1"
provider-name="Tristan Fischer (sphere)">
+<addon id="plugin.video.4players" name="4Players Videos" version="1.1.2"
provider-name="Tristan Fischer (sphere)">
<requires>
<import addon="xbmc.python" version="2.0"/>
<import addon="script.module.beautifulsoup" version="3.0.8"/>
diff --git a/plugin.video.4players/changelog.txt
b/plugin.video.4players/changelog.txt
index 88c2ce6..7b85bbd 100644
--- a/plugin.video.4players/changelog.txt
+++ b/plugin.video.4players/changelog.txt
@@ -1,3 +1,9 @@
+1.1.2
+ Fixed scraper (Website changes)
+ Now using 160x90px thumbnails
+ added sort methods (playlist, date and runtime)
+ added is_update function (pagination is better now)
+
1.1.1
Fixed Video Playback
diff --git a/plugin.video.4players/resources/lib/scraper.py
b/plugin.video.4players/resources/lib/scraper.py
index a9011a6..a20e5ba 100644
--- a/plugin.video.4players/resources/lib/scraper.py
+++ b/plugin.video.4players/resources/lib/scraper.py
@@ -8,23 +8,23 @@ IPAD_USERAGENT = (u'Mozilla/5.0 (iPad; U; CPU OS OS 3_2 like '
u'HTML, like Gecko) Version/4.0.4 Mobile/7B'
u'367 Safari/531.21.10')
-CATEGORIES = ('Alle', 'TopViews', 'TopRated', 'CDROM',
+CATEGORIES = ('Alle', 'TopViews', 'TopRated', 'PC-CDROM',
'PlayStation2', 'PlayStation3', 'Wii', '360', 'NDS',
'PSP', 'Video-Fazit')
-URL_PREFIX = 'http://www.4players.de/4players.php/tvplayer/4PlayersTV/'
+URL_PREFIX = 'http://www.4players.de/4players.php/tvplayer/'
def getVideos(filter=None, page=1):
if filter not in CATEGORIES:
filter = CATEGORIES[0]
post = {'currentpage': str(int(page) - 1),
- 'filter': filter,
+ 'singlefilter': filter,
'funcname': 'aktuellevideos',
'numcols': 5,
- 'numshown': 20,
+ 'numshown': 50,
'refreshskims': 1}
- url = 'http://www.4players.de/ajax/paginatecontent.php'
+ url = 'http://www.4players.de/paginatecontent.php'
html = __getAjaxContent(url, post)
tree = BeautifulSoup(html)
# last_page_num
@@ -32,41 +32,42 @@ def getVideos(filter=None, page=1):
last_page_num = max([page_num.contents[0] for page_num in page_links \
if page_num.contents[0].isdigit()])
# videos
- video_frames = tree.findAll('div', {'class':
- re.compile('^videoitemframe')})
+ section = tree.find('div', {'class': re.compile('tv-weitere-container')})
+ video_frames = section.findAll('li')
videos = list()
for frame in video_frames:
- video_item, video_info = frame.findAll('div', recursive=False)
- link = video_info.find('div', {'class': re.compile('^title')}).a
+ link = frame.find('a', {'class': 'tv-weiter-link'})
# title
- title = link['title'].replace('[Video] ', '')
+ title = link['title']
# url
video_page = link['href']
url = video_page.replace(URL_PREFIX, '').replace('.html', '')
# rating
- rating_div = video_info.find('div', {'class':
- re.compile('^rating stars')})
- if rating_div['class'][-1:] in str(range(1, 6)):
- rating = int(rating_div['class'][-1:])
+ rating_div = frame.find('div', {'class':
+ re.compile('^tv-weitere-rating')})
+ if rating_div['class'][-7:-6] in str(range(1, 6)):
+ rating = int(rating_div['class'][-7:-6])
else:
rating = 0
# views
+ views_div = frame.find('div', {'class':
+ re.compile('^tv-weitere-views')})
r = 'Views: (?P<views>[0-9]+)'
- m = re.search(r, unicode(rating_div))
+ m = re.search(r, unicode(views_div))
if m:
views = int(m.groupdict()['views'])
else:
views = 0
- # image
- r = 'skimimageurl="(?P<img_url>[^"]+)"'
- m = re.search(r, unicode(video_item))
- if m:
- image = m.groupdict()['img_url']
- else:
- image = None
+ # image
+ skim_div = frame.find('div', {'class': 'skim'})
+ if skim_div:
+ image = skim_div['data-skimimageurl'].replace('skimimage',
'thumb160x90')
+ # try to guess the thumb
# date
+ date_div = frame.find('div', {'class':
+ re.compile('^tv-weitere-datum')})
r = '(?P<day>[0-9]+)\.(?P<month>[0-9]+)\.(?P<year>20[0-9]+)'
- m = re.search(r, unicode(rating_div))
+ m = re.search(r, unicode(date_div))
if m:
date_dict = m.groupdict()
date = '%s.%s.%s' % (date_dict['day'],
@@ -75,8 +76,10 @@ def getVideos(filter=None, page=1):
else:
date = ''
# length
+ len_div = frame.find('div', {'class':
+ re.compile('^tv-weitere-laufzeit')})
r = '(?P<min>[0-9]+):(?P<sec>[0-9]+) (Min\.|min|MIn\.)'
- m = re.search(r, unicode(rating_div))
+ m = re.search(r, unicode(len_div))
if m:
length_dict = m.groupdict()
length = '%s:%s' % (length_dict['min'], length_dict['sec'])
@@ -111,10 +114,10 @@ def __getAjaxContent(url, data_dict=None):
def getVideoFile(page_url):
video_page = URL_PREFIX + page_url + '.html'
html = __getAjaxContent(video_page)
- tree = BeautifulSoup(html)
- link = tree.find('script', text=re.compile('video src'))
+ #tree = BeautifulSoup(html)
+ #link = tree.find('script', text=re.compile('video src'))
r = '<video src="(?P<url>[^"]+)"'
- m = re.search(r, unicode(link))
+ m = re.search(r,html)
url = m.groupdict()['url']
return url
-----------------------------------------------------------------------
Summary of changes:
plugin.video.4players/addon.py | 33 +++++++++++++-
plugin.video.4players/addon.xml | 2 +-
plugin.video.4players/changelog.txt | 6 +++
plugin.video.4players/resources/lib/scraper.py | 57 ++++++++++++-----------
4 files changed, 68 insertions(+), 30 deletions(-)
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
Cloud Services Checklist: Pricing and Packaging Optimization
This white paper is intended to serve as a reference, checklist and point of
discussion for anyone considering optimizing the pricing and packaging model
of a cloud services business. Read Now!
http://www.accelacomm.com/jaw/sfnl/114/51491232/
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons