The branch, frodo has been updated
via e4652cda5c8830f80ed5bb07b644e30ff573c4e2 (commit)
via 7f01855dc8583b79dde5232f49920195d8978da5 (commit)
from f2f7f780bb262fecc669e8dfc77a8cf2081fcd78 (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=e4652cda5c8830f80ed5bb07b644e30ff573c4e2
commit e4652cda5c8830f80ed5bb07b644e30ff573c4e2
Author: Martijn Kaijser <[email protected]>
Date: Mon Aug 18 17:18:44 2014 +0200
[plugin.video.filmsforaction] 1.0.4
diff --git a/plugin.video.filmsforaction/addon.xml
b/plugin.video.filmsforaction/addon.xml
index 5a80afe..705f193 100644
--- a/plugin.video.filmsforaction/addon.xml
+++ b/plugin.video.filmsforaction/addon.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<addon id="plugin.video.filmsforaction" name="Films For Action"
version="1.0.3" provider-name="Jose Antonio Montes (jamontes)">
+<addon id="plugin.video.filmsforaction" name="Films For Action"
version="1.0.4" provider-name="Jose Antonio Montes (jamontes)">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="plugin.video.youtube" version="4.4.8"/>
diff --git a/plugin.video.filmsforaction/changelog.txt
b/plugin.video.filmsforaction/changelog.txt
index 7264a51..0ee706f 100644
--- a/plugin.video.filmsforaction/changelog.txt
+++ b/plugin.video.filmsforaction/changelog.txt
@@ -1,3 +1,6 @@
+1.0.4
+- Fixed Next/Previous Page entries due to website changes.
+- Updated Dailymotion scraper to support more video formats.
1.0.3
- Rewriten video list parser to make it more tolerant to website changes.
- Replaced builtin Disclose TV parser on behalf of Disclose TV add-on
(credits: sphere)
diff --git a/plugin.video.filmsforaction/resources/lib/ffa_api.py
b/plugin.video.filmsforaction/resources/lib/ffa_api.py
index dd7c4e8..3f32ca2 100644
--- a/plugin.video.filmsforaction/resources/lib/ffa_api.py
+++ b/plugin.video.filmsforaction/resources/lib/ffa_api.py
@@ -60,57 +60,63 @@ def get_videolist(url, localized=lambda x: x):
video_rating_pattern = '([0-9.]+?[ ]+?[Ss]tars)'
video_views_pattern = '([0-9,]+?[ ]+?[Vv]iews)'
video_author_pattern = '([Aa]dded by).*?<a href=["\']/[^/]*?/["\'][
]*?>([^<]*?)</a>'
- page_count_pattern = '<span
id="C_SR_LabelResultsCount[^"]*?">([0-9]*?)-([0-9]*?) of ([0-9]*?)
[^<]*?</span>'
- prev_page_pattern = '<div style="float:left">[^<]*?<a
href="([^"]*?)"><img id="C_SR_IPrevious"'
- next_page_pattern = '<div style="float:right">[^<]*?<a
href="([^"]*?)"><img id="C_SR_INext"'
+ page_num_pattern = 'href=["\']http[^"\']*?p=([0-9]+?)'
+ page_num_url_pattern = 'href=["\'](http[^"\']*?p=%d[^"\']*?)["\']'
+ page_num_cur_pattern = 'p=([0-9]+?)'
buffer_url = l.carga_web(url)
video_list = []
- first_video, last_video, total_videos = l.find_first(buffer_url,
page_count_pattern) or ('0', '0', '0')
- current_page = (int(first_video) / 50) + 1
- last_page = (int(total_videos) / 50) + 1
- next_page_num = current_page + 1 if current_page < last_page else 0
- prev_page_num = current_page - 1
reset_cache = False
+ current_page_num = int(l.find_first(url, page_num_cur_pattern) or '1')
+ last_page_num = int(max(l.find_multiple(buffer_url, page_num_pattern) or
('1',), key=int))
- if prev_page_num:
- previous_page_url = l.find_first(buffer_url, prev_page_pattern)
+ if current_page_num != 1:
+ prev_page_num = current_page_num - 1
+ previous_page_url = l.find_first(buffer_url, page_num_url_pattern %
prev_page_num)
video_entry = { 'url': previous_page_url, 'title': '<< %s (%d)' %
(localized('Previous page'), prev_page_num), 'IsPlayable': False }
video_list.append(video_entry)
reset_cache = True
- for video_index, video_section in
enumerate(buffer_url.split(video_entry_sep)):
- if video_index:
- category = l.find_first(video_section, video_cat_pattern)
- if category:
- url = l.find_first(video_section, video_url_pattern)
- thumb = l.find_first(video_section,
video_thumb_pattern)
- title = l.find_first(video_section,
video_title_pattern)
- plot = l.find_first(video_section, video_plot_pattern)
- duration = l.find_first(video_section,
video_duration_pattern)
- rating = l.find_first(video_section,
video_rating_pattern)
- views = l.find_first(video_section,
video_views_pattern)
- label, author = l.find_first(video_section,
video_author_pattern) or ('', '')
- l.log('Video info. url: "%s" thumb: "%s" title: "%s" category:
"%s"' % (url, thumb, title, category))
- l.log('Video tags. duration: "%s" rating: "%s" views: "%s"
author: "%s %s"' % (duration, rating, views, label, author))
- video_entry = {
- 'url': root_url + url,
- 'title': title.strip() or '.',
- 'thumbnail': root_url + thumb,
- 'plot': "%s\n%s - %s - %s - %s\n%s %s" % (plot.strip(),
category, duration, views, rating, label, author),
- 'duration': int(duration.split()[0]) if duration else 0,
- 'rating': rating.split()[0] if rating else '',
- 'genre': category,
- 'credits': author,
- 'IsPlayable': True
- }
- video_list.append(video_entry)
-
- if next_page_num:
- next_page_url = l.find_first(buffer_url, next_page_pattern)
- video_entry = { 'url': next_page_url, 'title': '>> %s (%d/%d)' %
(localized('Next page'), next_page_num, last_page), 'IsPlayable': False }
+ for video_section in buffer_url.split(video_entry_sep)[1:]:
+ category = l.find_first(video_section, video_cat_pattern)
+ if category:
+ url = l.find_first(video_section, video_url_pattern)
+ thumb = l.find_first(video_section, video_thumb_pattern)
+ title = l.find_first(video_section, video_title_pattern)
+ plot = l.find_first(video_section, video_plot_pattern)
+ duration = l.find_first(video_section, video_duration_pattern)
+ rating = l.find_first(video_section, video_rating_pattern)
+ views = l.find_first(video_section, video_views_pattern)
+ label, author = l.find_first(video_section, video_author_pattern)
or ('', '')
+ l.log('Video info. url: "%s" thumb: "%s" title: "%s" category:
"%s"' % (url, thumb, title, category))
+ l.log('Video tags. duration: "%s" rating: "%s" views: "%s" author:
"%s %s"' % (duration, rating, views, label, author))
+ video_entry = {
+ 'url' : root_url + url,
+ 'title' : title.strip() or '.',
+ 'thumbnail' : root_url + thumb,
+ 'plot' : "%s\n%s - %s - %s - %s\n%s %s" % (
+ plot.strip(),
+ category,
+ duration,
+ views,
+ rating,
+ label,
+ author,
+ ),
+ 'duration' : int(duration.split()[0]) if duration else 0,
+ 'rating' : rating.split()[0] if rating else '',
+ 'genre' : category,
+ 'credits' : author,
+ 'IsPlayable' : True
+ }
+ video_list.append(video_entry)
+
+ if current_page_num < last_page_num:
+ next_page_num = current_page_num + 1
+ next_page_url = l.find_first(buffer_url, page_num_url_pattern %
next_page_num)
+ video_entry = { 'url': next_page_url, 'title': '>> %s (%d/%d)' %
(localized('Next page'), next_page_num, last_page_num), 'IsPlayable': False }
video_list.append(video_entry)
return { 'video_list': video_list, 'reset_cache': reset_cache }
@@ -170,13 +176,18 @@ def get_playable_youtube_url(video_id):
def get_playable_dailymotion_url(video_id):
"""This function returns the playable URL for the Dalymotion embedded
video from the video_id retrieved."""
- pattern_daily_video = '"stream_h264_hq_url":"(.+?)"'
+ daily_video_patterns = (
+ '"stream_h264_hq_url":"(.+?)"',
+ '"stream_h264_url":"(.+?)"',
+ '"stream_h264_ld_url":"(.+?)"',
+ )
daily_url = 'http://www.dailymotion.com/embed/video/' + video_id
buffer_link = l.carga_web(daily_url)
- video_url = l.find_first(buffer_link, pattern_daily_video)
- if video_url:
- return video_url.replace('\\','')
+ for pattern_daily_video in daily_video_patterns:
+ video_url = l.find_first(buffer_link, pattern_daily_video)
+ if video_url:
+ return video_url.replace('\\', '')
def get_playable_archiveorg_url(archive_url):
diff --git a/plugin.video.filmsforaction/resources/tests/test_api.py
b/plugin.video.filmsforaction/resources/tests/test_api.py
index 32e277e..959162d 100644
--- a/plugin.video.filmsforaction/resources/tests/test_api.py
+++ b/plugin.video.filmsforaction/resources/tests/test_api.py
@@ -43,7 +43,7 @@ class ITTests(unittest.TestCase):
self.assertTrue(len(api.get_playable_url(url)) > 10)
def test_dailymotion_scraper(self):
-
url='http://www.filmsforaction.org/watch/plastic-paradise-the-great-pacific-garbage-patch-2013/'
+
url='http://www.filmsforaction.org/watch/pbs_frontline_is_walmart_good_for_america_2005/'
self.assertTrue(len(api.get_playable_url(url)) > 10)
def test_tagtele_scraper(self):
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/plugins;a=commit;h=7f01855dc8583b79dde5232f49920195d8978da5
-----------------------------------------------------------------------
Summary of changes:
plugin.video.filmsforaction/addon.xml | 2 +-
plugin.video.filmsforaction/changelog.txt | 3 +
.../resources/lib/ffa_api.py | 99 ++--
.../resources/tests/test_api.py | 2 +-
plugin.video.gameone/LICENSE.txt | 621 --------------------
plugin.video.gameone/addon.xml | 20 -
plugin.video.gameone/changelog.txt | 31 -
plugin.video.gameone/default.py | 366 ------------
plugin.video.gameone/icon.png | Bin 75267 -> 0 bytes
.../resources/language/English/strings.xml | 25 -
.../resources/language/German/strings.xml | 26 -
plugin.video.gameone/resources/settings.xml | 8 -
12 files changed, 60 insertions(+), 1143 deletions(-)
delete mode 100644 plugin.video.gameone/LICENSE.txt
delete mode 100644 plugin.video.gameone/addon.xml
delete mode 100644 plugin.video.gameone/changelog.txt
delete mode 100644 plugin.video.gameone/default.py
delete mode 100644 plugin.video.gameone/icon.png
delete mode 100644 plugin.video.gameone/resources/language/English/strings.xml
delete mode 100644 plugin.video.gameone/resources/language/German/strings.xml
delete mode 100644 plugin.video.gameone/resources/settings.xml
hooks/post-receive
--
Plugins
------------------------------------------------------------------------------
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons