[vlc-commits] youtube.lua: parse signature parameter
Pierre Ynard
git at videolan.org
Fri Sep 28 04:31:04 CEST 2012
vlc/vlc-2.0 | branch: master | Pierre Ynard <linkfanel at yahoo.fr> | Fri Sep 28 04:15:49 2012 +0200| [51047a67bfcaad3b4bc05e4acb4f82729094b94c] | committer: Pierre Ynard
youtube.lua: parse signature parameter
It was in fact still there, but as a separate parameter. We keep the
alternate API as a fallback for the next time things break, maybe.
Ref #7471
(cherry picked from commit 3a4021cfde854da79675fa67df47fc4f463f264b)
Signed-off-by: Pierre Ynard <linkfanel at yahoo.fr>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=51047a67bfcaad3b4bc05e4acb4f82729094b94c
---
share/lua/playlist/youtube.lua | 57 ++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 29 deletions(-)
diff --git a/share/lua/playlist/youtube.lua b/share/lua/playlist/youtube.lua
index 3562b82..aef5d28 100644
--- a/share/lua/playlist/youtube.lua
+++ b/share/lua/playlist/youtube.lua
@@ -70,22 +70,22 @@ end
-- Parse and pick our video URL
function pick_url( url_map, fmt )
local path = nil
- -- Handle both orderings, as unfortunately both may appear
- if string.match( url_map, "^url" ) then
- for url,itag in string.gmatch( url_map, "url=([^&,]+)[^,]*&itag=(%d+)" ) do
- -- Apparently formats are listed in quality order,
- -- so we can afford to simply take the first one
- if not fmt or tonumber( itag ) == tonumber( fmt ) then
+ for stream in string.gmatch( url_map, "[^,]+" ) do
+ -- Apparently formats are listed in quality order,
+ -- so we can afford to simply take the first one
+ local itag = string.match( stream, "itag=(%d+)" )
+ if not fmt or not itag or tonumber( itag ) == tonumber( fmt ) then
+ local url = string.match( stream, "url=([^&,]+)" )
+ if url then
url = vlc.strings.decode_uri( url )
- path = url
- break
- end
- end
- else
- for itag,url in string.gmatch( url_map, "itag=(%d+)&[^,]*url=([^&,]+)" ) do
- if not fmt or tonumber( itag ) == tonumber( fmt ) then
- url = vlc.strings.decode_uri( url )
- path = url
+
+ local sig = string.match( stream, "sig=([^&,]+)" )
+ local signature = ""
+ if sig then
+ signature = "&signature="..sig
+ end
+
+ path = url..signature
break
end
end
@@ -120,9 +120,6 @@ function parse()
-- fmt is the format of the video
-- (cf. http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs)
fmt = get_url_param( vlc.path, "fmt" )
- -- URLs in the web page are no good since
- -- they miss the "signature" parameter :/
---[[
while true do
-- Try to find the video's title
line = vlc.readline()
@@ -166,19 +163,21 @@ function parse()
-- tag; but we don't need it now
end
end
---]]
- local video_id = get_url_param( vlc.path, "v" )
- if video_id then
- if fmt then
- format = "&fmt=" .. fmt
- else
- format = ""
+ if not path then
+ local video_id = get_url_param( vlc.path, "v" )
+ if video_id then
+ if fmt then
+ format = "&fmt=" .. fmt
+ else
+ format = ""
+ end
+ -- Without "el=detailpage", /get_video_info fails for many
+ -- music videos with errors about copyrighted content being
+ -- "restricted from playback on certain sites"
+ path = "http://www.youtube.com/get_video_info?video_id="..video_id..format.."&el=detailpage"
+ vlc.msg.warn( "Couldn't extract video URL, falling back to alternate youtube API" )
end
- -- Without "el=detailpage", /get_video_info fails for many
- -- music videos with errors about copyrighted content being
- -- "restricted from playback on certain sites"
- path = "http://www.youtube.com/get_video_info?video_id="..video_id..format.."&el=detailpage"
end
if not path then
More information about the vlc-commits
mailing list