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

Reply via email to