[vlc-commits] soundcloud.lua: convert to soundcloud API v2

Pierre Ynard git at videolan.org
Sun Dec 1 09:00:57 CET 2019


vlc/vlc-3.0 | branch: master | Pierre Ynard <linkfanel at yahoo.fr> | Sun Dec  1 08:51:07 2019 +0100| [4e0457a16e6ea8090a325821e445dcf03a92118f] | 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.

(cherry picked from commit c28b846b3574b35753533fd952a41fe02197802e)
Signed-off-by: Pierre Ynard <linkfanel at yahoo.fr>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=4e0457a16e6ea8090a325821e445dcf03a92118f
---

 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