[vlc-commits] soundcloud.lua: convert to soundcloud API v2
Pierre Ynard
git at videolan.org
Sun Dec 1 08:55:07 CET 2019
vlc | branch: master | Pierre Ynard <linkfanel at yahoo.fr> | Sun Dec 1 08:51:07 2019 +0100| [c28b846b3574b35753533fd952a41fe02197802e] | committer: Pierre Ynard
soundcloud.lua: convert to soundcloud API v2
The classic API seems to have been discontinued, as it now returns
access errors even after updating the API magic.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c28b846b3574b35753533fd952a41fe02197802e
---
share/lua/playlist/soundcloud.lua | 33 ++++++++++++---------------------
1 file changed, 12 insertions(+), 21 deletions(-)
diff --git a/share/lua/playlist/soundcloud.lua b/share/lua/playlist/soundcloud.lua
index f20c80dd89..cc9b17c19e 100644
--- a/share/lua/playlist/soundcloud.lua
+++ b/share/lua/playlist/soundcloud.lua
@@ -1,7 +1,7 @@
--[[
$Id$
- Copyright © 2012, 2015 the VideoLAN team
+ Copyright © 2012, 2015, 2019 the VideoLAN team
Authors: Cheng Sun <chengsun9atgmail.com>
Pierre Ynard
@@ -44,14 +44,12 @@ function parse()
line = vlc.readline()
if not line then break end
- -- Parameters for API call
- if not track then
- track = string.match( line, "soundcloud:tracks:(%d+)" )
- end
-
- -- For private tracks
- if not secret then
- secret = string.match( line, "[\"']secret_token[\"'] *: *[\"'](.-)[\"']" )
+ -- API endpoint for audio stream URL
+ if not stream then
+ -- The URL may feature an optional query string: for private
+ -- tracks in particular it contains a secret token, e.g.
+ -- https://api-v2.soundcloud.com/media/soundcloud:tracks:123456789/986421ee-f9ba-42b2-a642-df8e9761a49b/stream/progressive?secret_token=s-ABCDE
+ stream = string.match( line, '"url":"([^"]-/stream/progressive[^"]-)"' )
end
-- Metadata
@@ -81,23 +79,16 @@ function parse()
end
end
- if track then
+ if stream then
-- API magic
- local client_id = "NxDq1GKZ5tLDRohQGfJ7lYVKiephsF3G"
- -- app_version is not required by the API but we send it anyway
- -- to remain unconspicuous
- local app_version = "1553518929"
+ local client_id = "1XduoqV99lROqCMpijtDo5WnJmpaLuYm"
- local api = vlc.stream( vlc.access.."://api.soundcloud.com/i1/tracks/"..track.."/streams?client_id="..client_id.."&app_version="..app_version..( secret and "&secret_token="..secret or "" ) )
+ local api = vlc.stream( stream..( string.match( stream, "?" ) and "&" or "?" ).."client_id="..client_id )
if api then
local streams = api:readline() -- data is on one line only
- -- For now only quality available is 128 kbps (http_mp3_128_url)
- path = string.match( streams, "[\"']http_mp3_%d+_url[\"'] *: *[\"'](.-)[\"']" )
- if path then
- -- FIXME: do this properly
- path = string.gsub( path, "\\u0026", "&" )
- end
+ -- This API seems to return a single JSON field
+ path = string.match( streams, '"url":"(.-)"' )
end
end
More information about the vlc-commits
mailing list