Closed Invictaz closed 4 years ago
Hallo Invictaz,
Het is altijd een vertaalslag van programma-url naar audio/video-url, dus welke programma-url hoort er bij die audio-url (of "endpoint" zoals jij het noemt)?
Ik schuif dit even op de lange termijn.
Ik heb even naar youtube-dl
's mixcloud.py gekeken. Er zijn flink wat ingewikkelde handelingen nodig om de audio-urls (http, dash en hls) te genereren en aangezien ik weinig ervaring heb met Python, heb ik hier tijd voor nodig. Of iemand anders moet een voorzetje willen geven (curl
-commando mag ook).
Ik heb even voor je gezocht @Reino17 het is nog niet zo simpel omdat die troep allemaal werkt tegenwoordig met oauth en tokens.
Soundcloud
https://gist.github.com/ic3y808/96d12b615fa0192ac36d
SUPEROUD VOOR MIXCLOUD IK WEET NIET OF HET NOG WERKT
mixurl=curl -s http://www.mixcloud.com/some/mixcloud/url | sed -rn 's/.*data-preview-url="([^"]+).*/\1/p' | sed -rn 's/previews/cloudcasts\/originals/p'
; for i in {1..20}; do curl -Of echo $mixurl | sed -rn "s/stream([0-9]+)/stream$i/p"
; done
Verder kwam ik dit tegen voor je, wellicht is het interessant om e.e.a. uit te slopen:
https://linoxide.com/linux-how-to/tizonia-command-line-music-player-linux/
Nog een API URL voor Soundcloud: http://api.soundcloud.com/tracks?q=Adventure&limit=5&client_id=7fda73e4303db4146b1b2145944d3e1c
Super oud maar maybe it works https://github.com/nuved/soundcloud-dl/blob/master/soundcloud_curl.sh
https://gist.github.com/ic3y808/96d12b615fa0192ac36d
http://api.soundcloud.com/tracks?q=Adventure&limit=5&client_id=7fda73e4303db4146b1b2145944d3e1c
Om gebruik te maken van de SoundCloud api heb je een account nodig (met een clientid, clientsecret, password, token en weet ik wat meer). Voor gebruik in xivid
moet dat dus op een andere manier. youtube-dl
maakt er ook geen gebruik van.
mixurl=curl -s http://www.mixcloud.com/some/mixcloud/url | sed -rn 's/.*data-preview-url="([^"]+).*/\1/p' | sed -rn 's/previews/cloudcasts\/originals/p' ; for i in {1..20}; do curl -Of echo $mixurl | sed -rn "s/stream([0-9]+)/stream$i/p" ; done
https://github.com/nuved/soundcloud-dl/blob/master/soundcloud_curl.sh
Misschien dat dat in het verleden heeft gewerkt, maar nu valt in de html-bron (van https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/) niks meer terug te vinden.
Trouwens, je kunt je posts ook aanpassen, hè... i.p.v. 4 losse posts.
Ik kan het niet aanpassen in IE11, die browser wordt nog maar zeer beperkt ondersteund door Github. Dat is het gevaar van een oudere Windows machine ;)
Sommige van de code die ik gepost heb is (expres) zo jong mogelijk. Maar blijkbaar is de 2 jaar oude code al achterhaald. Ik heb de Youtube-dl code wel in gebruik in Foobar voor Mixcloud maar nog niet getest op Soundcloud.
Ik kan het niet aanpassen in IE11, die browser wordt nog maar zeer beperkt ondersteund door Github.
Dat is het gevaar van een oudere Windows machine ;)
Ah ja, ik weet er alles van. Mijn Pale Moon (Firefox fork) browser ondersteunt de nieuwste javascript ook niet, waardoor ik posts ook niet kan aanpassen. Dat moet ik op mijn smartphone doen. Daarom probeer ik het ook altijd in één keer goed te doen.
Ok, ik ben in ieder geval nu zo ver dat ik de desbetreffende JSON te pakken heb:
xidel -se '
x:request(
{
"headers":(
"X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB",
"Content-Type: application/json",
"Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/",
"Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x"
),
"post":"{""query"":""{cloudcastLookup(lookup:{username:\""EricVanKleef\"",slug:\""clubbin-12-wildfm-30-mei-2020\""}){name,owner{displayName,url,username},publishDate,audioLength,streamInfo{dashUrl,hlsUrl,url}}}""}",
"url":"https://www.mixcloud.com/graphql"
}
)/json/data/cloudcastLookup
'
{
"name": "CLUBBIN #12 @WILDFM 30 MEI 2020.",
"owner": {
"displayName": "Eric van Kleef",
"url": "https://www.mixcloud.com/EricVanKleef/",
"username": "EricVanKleef"
},
"publishDate": "2020-05-31T10:55:53+00:00",
"audioLength": 5842,
"streamInfo": {
"hlsUrl": "ITItPyZtbmE1ISwsLmNmZz49KzcjKDAwfiImKWs8KywhNip4JiA8bnRpYmB8Yip3dSosNml9dWp6eGMgLzJ5cHZxZ3lxZzFkZHYkJjdhJXBqKXsvYD0qKzI2YiJyMX4=",
"url": "ITItPyZtbmEnIDogID9le305OiwsKyohNG8qKylgPSo3MT0yYS9gLHAnfXl5Ynl3c2N+eidmcD8sNnp1fWdhZXEgMzJka2djYWJ/cTFncXAnJyx/K21qImMvczwoI3sUBX90KjkhJgFlEiUcPBAvMxkfBTc/"
}
}
https://github.com/ytdl-org/youtube-dl/blob/master/youtube_dl/extractor/mixcloud.py#L141-L142:
decrypted = self._decrypt_xor_cipher(
self._DECRYPTION_KEY, compat_b64decode(format_url))
Het Base64 decoderen is niet zo spannend...
xidel -se 'x:request([...])/json//streamInfo/* ! binary-to-string(base64Binary(.))'
!2-?&mna5!,,.cfg>=+7#(00~"&)k<+,!6*x& <ntib`|b*wu*,6i}ujzxc /2ypvqgyqg1ddv$&7a%pj){/`=*+26b"r1~
!2-?&mna' : ?e{}9:,,+*!4o*+)`=*71=2a/`,p'}yybywsc~z'fp?,6zu}gaeq 32dkgcabq1gqp'',+mj"c/s<(#{t*9!&e%</37?
...maar daar komt brabbeltaal uit en ik begrijp niet hoe die _DECRYPTION_KEY
daar op losgelaten wordt.
Ik post het altijd vrij snel aangezien je soms een hele berg getikt hebt en dan is je pagina timed-out ofzo. Overigens is Pale Moon 28 de laatste voor XP, recenter is MyPal: https://github.com/Feodor2/Mypal
Ontopic: Wellicht heeft Xidel geen support voor die decryption key.
Wat is de uiteindelijke url van die json? Je voert dat complete commando in dus van
xidel -se ' tot "url": "ITItPyZtbmEnIDogID9le305OiwsKyohNG8qKylgPSo3MT0yYS9gLHAnfXl5Ynl3c2N+eidmcD8sNnp1fWdhZXEgMzJka2djYWJ/cTFncXAnJyx/K21qImMvczwoI3sUBX90KjkhJgFlEiUcPBAvMxkfBTc/" } }
En dan krijg je een url?
ik wist niet dat je regels onder elkaar kon invoeren in de commandline / terminal?
Palemoon 27.9.7 hier. Vanwege mijn oude pc kan ik Palemoon 28 niet gebruiken.
De preview-knop bij het maken van m'n posts werkt niet, dus bereid ik mijn posts voor, met opmaak en al, op https://jbt.github.io/markdown-editor/.
Wellicht heeft Xidel geen support voor die decryption key.
Je zult versteld staan van wat xidel
allemaal kan!
Wat is de uiteindelijke url van die json?
Die is er niet. Er wordt een "POST"-request gedaan naar https://www.mixcloud.com/graphql, met die JSON als antwoord.
ik wist niet dat je regels onder elkaar kon invoeren in de commandline / terminal?
Vreemd dat je dat nog niet was opgevallen. In zowel xivid.bat
als xivid.sh
zie je dat bij alle queries. Op die manier is het veel leesbaarder. Alleen in xivid.bat
is het dan weer wat minder leesbaar vanwege de verplichte escape-characters.
Je voert dat complete commando in dus van
xidel -se '
tot
"url": [...]
En dan krijg je een url?
Nee, je voert dit in...
xidel -se '
x:request(
{
"headers":(
"X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB",
"Content-Type: application/json",
"Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/",
"Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x"
),
"post":"{""query"":""{cloudcastLookup(lookup:{username:\""EricVanKleef\"",slug:\""clubbin-12-wildfm-30-mei-2020\""}){name,owner{displayName,url,username},publishDate,audioLength,streamInfo{dashUrl,hlsUrl,url}}}""}",
"url":"https://www.mixcloud.com/graphql"
}
)/json/data/cloudcastLookup
'
...of dit...
xidel -s \
-H "X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB" \
-H "Content-Type: application/json" \
-H "Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/" \
-H "Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x" \
-d '{{"query":"{{cloudcastLookup(lookup:{{username:\"EricVanKleef\",slug:\"clubbin-12-wildfm-30-mei-2020\"}}){{name,owner{{displayName,url,username}},publishDate,audioLength,streamInfo{{hlsUrl,url}}}}}}"}}' \
https://www.mixcloud.com/graphql -e '$json//cloudcastLookup'
...en je krijgt de JSON als antwoord:
{
"name": "CLUBBIN #12 @WILDFM 30 MEI 2020.",
"owner": {
"displayName": "Eric van Kleef",
"url": "https://www.mixcloud.com/EricVanKleef/",
"username": "EricVanKleef"
},
"publishDate": "2020-05-31T10:55:53+00:00",
"audioLength": 5842,
"streamInfo": {
"hlsUrl": "ITItPyZtbmE1ISwsLmNmZz49KzcjKDAwfiImKWs8KywhNip4JiA8bnRpYmB8Yip3dSosNml9dWp6eGMgLzJ5cHZxZ3lxZzFkZHYkJjdhJXBqKXsvYD0qKzI2YiJyMX4=",
"url": "ITItPyZtbmEnIDogID9le305OiwsKyohNG8qKylgPSo3MT0yYS9gLHAnfXl5Ynl3c2N+eidmcD8sNnp1fWdhZXEgMzJka2djYWJ/cTFncXAnJyx/K21qImMvczwoI3sUBX90KjkhJgFlEiUcPBAvMxkfBTc/"
}
}
Deze commando's zijn trouwens voor Linux Bash. Voor Windows CMD is het...
xidel -se ^"^
x:request(^
{^
'headers':(^
'X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB',^
'Content-Type: application/json',^
'Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/',^
'Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x'^
),^
'post':'{\"query\":\"{cloudcastLookup(lookup:{username:\\\"EricVanKleef\\\",slug:\\\"clubbin-12-wildfm-30-mei-2020\\\"}){name,owner{displayName,url,username},publishDate,audioLength,streamInfo{hlsUrl,url}}}\"}',^
'url':'https://www.mixcloud.com/graphql'^
}^
)/json/data/cloudcastLookup^
"
of
xidel -s ^
-H "X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB" ^
-H "Content-Type: application/json" ^
-H "Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/" ^
-H "Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x" ^
-d "{{\"query\":\"{{cloudcastLookup(lookup:{{username:\\\"EricVanKleef\\\",slug:\\\"clubbin-12-wildfm-30-mei-2020\\\"}}){{name,owner{{displayName,url,username}},publishDate,audioLength,streamInfo{{hlsUrl,url}}}}}}\"}}" ^
https://www.mixcloud.com/graphql -e "$json//cloudcastLookup"
@Invictaz Zou je de volgende (Windows) one-liner willen proberen?
xidel -s --module=xivid.xqm --json-mode=deprecated --xquery "declare function local:bin-xor($a,$b){let $bin:=($a,$b) ! x:integer-to-base(.,2),$len:=max($bin ! string-length()),$val:=$bin ! concat(string-join((1 to $len - string-length()) ! 0),.) return x:integer(string-join(for $x in 1 to $len return if (substring($val[1],$x,1) eq substring($val[2],$x,1)) then 0 else 1),2)}; declare variable $key:=x:cps('IFYOUWANTTHEARTISTSTOGETPAIDDONOTDOWNLOADFROMMIXCLOUD'); let $json:=x:request({'headers':('X-CSRFToken: pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB','Content-Type: application/json','Referer: https://www.mixcloud.com/EricVanKleef/clubbin-12-wildfm-30-mei-2020/','Cookie: __cfduid=d20d8c494e1196e16bc2400fdd9f95e871591047116; csrftoken=pXahjuUXJCpVe6ggOlOAy9MwvDqVpK4IrSS5JWwvmPlHeYBiq0pjeLuN7OPfvvBB; mx_t=16190190-b563-43f2-88db-044ed6791790; c=bpb0lwf36mr1o0fbicqxl6dei8a7803x'),'post':'{\"query\":\"{cloudcastLookup(lookup:{username:\\\"EricVanKleef\\\",slug:\\\"clubbin-12-wildfm-30-mei-2020\\\"}){name,owner{displayName,url,username},publishDate,audioLength,streamInfo{hlsUrl,url}}}\"}','url':'https://www.mixcloud.com/graphql'})/json/data/cloudcastLookup,$url:=$json/streamInfo/(url,hlsUrl) ! string-join(x:cps(for $x at $i in x:cps(binary-to-string(base64Binary(.))) return local:bin-xor($x,$key[(($i - 1) mod count($key)) + 1]))) return $json/{'name':concat(owner/displayName,' - ',name),'date':format-date(dateTime(publishDate),'[D01]-[M01]-[Y]'),'duration':format-time(audioLength * duration('PT1S'),'[H01]:[m01]:[s01]'),'formats':[{'id':'pg-1','format':'m4a[aac]','url':$url[1]},xivid:m3u8-to-json($url[2])]}"
(haal --json-mode=deprecated
weg als je xidel
binary ouder is dan 01 feb 2020.)
Als het goed is krijg je dan een JSON met "gedecrypte" audio-urls als output.
Ik ben er vrij zeker van dat het decrypten en creëren van de uiteindelijke JSON goed werkt, maar ik weet niet zeker of de headers statisch zijn. Misschien werken ze wel alleen voor mij.
@Reino17 It works :+1:
Het selecteren van dergelijke groen gekleurde urls kan wellicht slimmer??? Ik doe nu rechtermuisknop in het commandline venster, markeren met shift ingedrukt en dan is het de hele regel selecteren, op enter duwen en in notepad plakken. E.e.a. eraf knippen en dan luisteren maar.
Overigens kwam ik ook vandaag deze tegen: https://github.com/Oros42/mixcloud-dl/ Na heel veel zoeken.
Overigens is de PD stream (de eerste)
En de tweede de HLS-0 best een vreemde codec ADTS
En de tweede de HLS-1 maakt geen verschil. Die pakt ook die codec. Ik zie trouwens dat die Sig elke keer hetzelfde is aan het einde per bestand
In elk geval super bedankt. Misschien dit issue afsplitsen naar Mixcloud en dan een nieuw issue voor Soundcloud.
Dit eerste stuk van de code is echt heel indrukwekkend
--xquery "declare function local:bin-xor($a,$b){let $bin:=($a,$b) ! x:integer-to-base(.,2),$len:=max($bin ! string-length()),$val:=$bin ! concat(string-join((1 to $len - string-length()) ! 0),.) return x:integer(string-join(for $x in 1 to $len return if (substring($val[1],$x,1) eq substring($val[2],$x,1)) then 0 else 1),2)}; declare variable $key:=x:cps
Hmm als ik een andere url probeer werkt het niet, en ik heb het precies volgens het format erin geplakt. Zal wel een andere CSRF token zijn ofzo
Het is mij eindelijk gelukt om met de oneliner aan de slag te gaan en zelf urls te extracten. Het is niet eenvoudig Je CSRFtoken is gekoppeld aan het Cookie, de UID moet custom zijn.
Ik zat eerst te klooien met de manifest.mpd maar daar heb je niks aan, die haalt alle audio op in aparte .m4s bestanden. (MPEG-DASH). Dus het is best knap dat je de directe m4a en de m3u8 gevonden hebt.
De velden die je moet aanpassen in de code om een andere stream te pakken zijn:
X-CSRFToken: BLABLA Referer: https://www.mixcloud.com/BLABLABLA/ __cfduid=BLABLABLA csrftoken=BLABLABALA (deze is hetzelfde als hierboven) mx_t=BLABLABLA slug:\\"BLABLABLA\\
Als je 1 van deze vergeet aan te passen dan krijg je een 403 error in de commandline. Alles moet dus kloppen.
Ik heb deze eruit gehaald met Chrome -> Inspect element -> Zoek op graphql in de Network tab -> Copy request as cmd en dat resultaat in Notepad plakken. Variabelen eruit halen die je nodig hebt en in die oneliner plakken en dat in CMD zetten en uitvoeren. Dit zal overigens wel de absolute noob manier zijn, maarja it works... Mocht je tips hebben hoe dat slimmer kan dan hoor ik het graag.
De Sig is dus per bestand verschillend maar niet per sessie.
Nu hopen dat e.e.a. in Xivid verwerkt gaat worden zodat je niet steeds al die waarden handmatig moet overnemen. En je gewoon Xivid.sh of Xivid.bat MIXCLOUDURL kan doen en dat hij dan de hls-0 weergeeft. Dat is de volgende stap denk ik.
Het selecteren van dergelijke groen gekleurde urls kan wellicht slimmer? [...]
Dat is een nadeel van cmd
. Bij het kopiëren van tekst krijg je alle afgeknotte regels precies zoals je ze ziet.
Je kunt xidel
's output naar clip
pipen, xidel [...] | clip
, waarmee de output naar het klembord wordt gekopiëerd. Uiteraard kun je dit ook met de output van xivid
doen.
Overigens kwam ik ook vandaag deze tegen: https://github.com/Oros42/mixcloud-dl/
Bedankt. Ik had natuurlijk kunnen weten dat met het bezoeken van de programma-url het "csrftoken" wordt aangemaakt.
Die repo is trouwens alweer achterhaald, omdat de audio-urls nu versleuteld zijn. En trouwens,... JSON ontleden met grep
en awk
... dat kan echt niet. Maar dat is een andere discussie.
Misschien dit issue afsplitsen naar Mixcloud en dan een nieuw issue voor Soundcloud.
Werkt die website weer heel anders dan?
Dit eerste stuk van de code [
local:bin-xor()
] is echt heel indrukwekkend
Bedankt. Zie https://github.com/benibela/xidel/issues/54. ;)
Ik zat eerst te klooien met de manifest.mpd maar daar heb je niks aan, die haalt alle audio op in aparte .m4s bestanden.
Met ffmpeg
kun je die gewoon openen, maar ik heb er voor gekozen om voor xivid
het bij de HLS streams te laten.
Dus het is best knap dat je de directe m4a en de m3u8 gevonden hebt.
Met de "POST query" kun je precies aangeven wat je wilt hebben. I.p.v. streamInfo{hlsUrl,url}
krijg je met streamInfo{dashUrl}
bijv. alleen de MPEG-DASH url.
Dit vraagt youtube-dl
allemaal op. Ik heb daar een selectie uit gemaakt.
X-CSRFToken: BLABLA
[...]
slug:\"BLABLABLA\Als je 1 van deze vergeet aan te passen dan krijg je een 403 error in de commandline. Alles moet dus kloppen.
Voor zover ik heb ondervonden zijn de volgende headers het minimale noodzakelijke:
"headers":(
"Content-Type: application/json",
"Referer: <url>",
"X-CSRFToken: <csrftoken>",
"Cookie: csrftoken=<csrftoken>"
)
Ik vind het vreemd dat ik in youtube-dl
's mixcloud.py daar niks over heb kunnen vinden.
Nu hopen dat e.e.a. in Xivid verwerkt gaat worden [...] en je gewoon Xivid.sh of Xivid.bat MIXCLOUDURL kan doen
Ik heb een werkende extractor, dus ja, dat kan dan. :)
Ik denk dat ik 'm vandaag nog wel zal doorvoeren.
Die link naar Benito's site gaat heel heel ver boven mijn pet. Ik weet wat een string en wat een integer is en dat base64 is maar de rest????
Voor het ontsleutelen van de Mixcloud audio-urls heb ik een "bitwise exclusive or"-functie nodig, maar xidel
heeft die vooralsnog niet, dus moet ik 'm zelf maken.
Zie verder https://nl.wikipedia.org/wiki/Exclusieve_disjunctie en mijn notities.
Als ik het naar de clip pipe dan slaat hij alles op
Tuurlijk. Met clip
koppiepeest je gehele output. Als je alleen de urls wilt hebben, dan zul je de query moeten veranderen.
Dat klopt niet want ik heb ook die uid noodzakelijk gehad anders kreeg ik alsnog een 403 error.
Bij mij werkt ie zonder uid.
Ik heb net de Mixcloud extractor doorgevoerd. Zou je kunnen testen of ie werkt?
Maar die exclusieve disjunctie (lijkt me trouwens niet helemaal netjes vertaald op Wikipedia) kan toch gewoon met if 1 dan dat,then dit else dat. Waarom moet dat met een XOR? Het is 1-0 wel goed 1-1 niet goed 0-0 niet goed 0-1 wel goed
Helaas werkt hij nog niet
Net als +
, -
, x
en :
is XOR
gewoon de notatie, volgens mij.
Dat is ook precies wat ik doe: if (substring($v1,$x,1) eq substring($v2,$x,1)) then 0 else 1
, oftewel "als \<a> = \<b> dan 0, anders 1".
Och ja, programma-urls met een /
op het eind. Dat ging niet helemaal goed. Fixed.
Trouwens, zou je alsjeblieft codeblocks willen gebruiken i.p.v. plaatjes?! Dan hoef jij niet te "lakken" en hoef ik de programma-url niet over te typen.
Gek eigenlijk he, dat een trailing / zoveel extra code nodig heeft. Plaatjes is vrij simpel. Alt + printscreen en dan kopieren naar MS Paint. Komt omdat die kleurtjes voor mij makkelijker leest. Ben wel van plan om toch codeblokken te proberen ja.
Mixcloud werkt nu, dus ik sluit dit issue en maak er 1 aan voor Soundcloud, om het overzichtelijk te houden. Bedankt nogmaals.
Mediahuman https://www.mediahuman.com/download.html is een van de weinige XP software die nog Mixcloud en Soundcloud download support en vaak geupdate wordt. Helaas closed source en hij installeert deze een hoop troep erbij zoals QT bijvoorbeeld. Aangezien Youtube steeds strikter wordt qua muziek (en Youtube-dl na maanden pas updates krijgt (of niet) voor Mixcloud en Soundcloud) werd het tijd om te kijken naar een alternatief. Ik gebruikte normaal altijd Lacey (the-sz.com) of 4k video downloader (https://www.4kdownload.com/nl/products/product-videodownloader) maar die ondersteunen beiden geen Mixcloud meer. Nu weet ik dat Xivid voornamelijk gefocussed is op video, maargoed wie niet waagt wie niet wint qua verzoekjes :)
De code om Mixcloud en Souncloud te scrapen is er wel, vaak in Python scripts https://github.com/Miserlou/SoundScrape
Of in Chrome en Firefox extensies https://github.com/mixcloud-downloader
Het voordeel van die Mediahuman is dat het bestand niet opgeslagen wordt als
"ae745f33egb32HHff.m4a" maar gelijk de Artiest en Titel ophaalt en de mogelijkheid geeft die vooraf aan het downloaden te bewerken. Plus, direct converteert naar mp3 ipv m4a als het bestand gedownload is. Het temp bestand wordt dan gedelete.
Misschien allemaal teveel werk, met alleen de m4a link + eventuele download optie zou ik ook al blij zijn. Elke keer Chrome opstarten is irritant. Foobar2000 heeft wel input support voor Mixcloud via een plugin. AIMP via foo_youtube met externe youtube-dl en Winamp alleen met de onofficiële WACUP. Alledrie hebben geen download optie. VLC ondersteunt het niet native en ik heb geen plugin kunnen vinden.
Voorbeeldje van een Soundcloud endpoint: https://stream10.mixcloud.com/secure/c/m4a/64/0/0/1/c/6fcc-4335-4aaf-8305-84e709ccc1d9.m4a?sig=FJ29cabjN0VlZe_zdXQQcw
Er zit dus een signature bij en wellicht nog wat andere rommel zoals een token.