Skip to content

Commit

Permalink
xivid: Voeg extractor toe voor Mixcloud
Browse files Browse the repository at this point in the history
  • Loading branch information
Reino17 committed Jul 12, 2020
1 parent a1d6313 commit 8f4efbd
Show file tree
Hide file tree
Showing 4 changed files with 484 additions and 12 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ Deze websites worden op dit moment ondersteund:
dumpert.nl vimeo.com
autojunk.nl dailymotion.com
telegraaf.nl twitch.tv
ad.nl facebook.com
lc.nl twitter.com
youtube.com pornhub.com
youtu.be
ad.nl mixcloud.com
lc.nl facebook.com
youtube.com twitter.com
youtu.be pornhub.com
```
Xivid is een hobbyproject en is constant in ontwikkeling. Houd er daarom rekening mee dat per website niet alle type urls altijd ondersteund worden.
De video-urls van beveiligde video's (met DRM (Digital Rights Manangement), of anderzijds) worden niet weergegeven.
Expand Down
72 changes: 68 additions & 4 deletions xivid.bat
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ ECHO.
ECHO dumpert.nl vimeo.com
ECHO autojunk.nl dailymotion.com
ECHO telegraaf.nl twitch.tv
ECHO ad.nl facebook.com
ECHO lc.nl twitter.com
ECHO youtube.com pornhub.com
ECHO youtu.be
ECHO ad.nl mixcloud.com
ECHO lc.nl facebook.com
ECHO youtube.com twitter.com
ECHO youtu.be pornhub.com
ECHO.
ECHO Voorbeelden:
ECHO xivid.bat https://www.npostart.nl/nos-journaal/28-02-2017/POW_03375558
Expand Down Expand Up @@ -917,6 +917,68 @@ FOR /F "delims=" %%A IN ('xidel "%~1" --xquery ^"
^" --output-format^=cmd') DO %%A
EXIT /B

:mixcloud
FOR /F "delims=" %%A IN ('xidel "%~1" -e ^"
declare variable $decryption_key:^='IFYOUWANTTHEARTISTSTOGETPAIDDONOTDOWNLOADFROMMIXCLOUD'^;
declare function local:decrypt^($a as base64Binary^) as string {
let $url:^=x:cps^(binary-to-string^($a^)^)^,
$key:^=x:cps^(
substring^(
string-join^(^(1 to ceiling^(count^($url^) div string-length^($decryption_key^)^)^) ! $decryption_key^)^,
1^,count^($url^)
^)
^)
return
string-join^(
x:cps^(
for $x at $i in $url return
xivid:bin-xor^($x^,$key[$i]^)
^)
^)
}^;
let $csrf:^=substring-before^(substring-after^($headers[contains^(.^,'csrftoken'^)]^,'^='^)^,'^;'^)^,
$us:^=tokenize^('%~1'^,'/'^)[position^(^) gt last^(^) - 2]
return
json:^=x:request^(
{
'headers':^(
'Content-Type: application/json'^,
'Referer: %~1'^,
'X-CSRFToken: '^|^|$csrf^,
'Cookie: csrftoken^='^|^|$csrf
^)^,
'post':concat^(
'{\^"query\^":\"{cloudcastLookup^(lookup:{username:\\\^"'^,
$us[1]^,
'\\\^"^,slug:\\\^"'^,
$us[2]^,
'\\\^"}^){name^,owner{displayName^,url^,username}^,publishDate^,audioLength^,streamInfo{hlsUrl^,url}}}\^"}'
^)^,
'url':'https://www.mixcloud.com/graphql'
}
^)/json//cloudcastLookup/{
'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':local:decrypt^(base64Binary^(streamInfo/url^)^)
}^,
xivid:m3u8-to-json^(
local:decrypt^(
base64Binary^(streamInfo/hlsUrl^)
^)
^)
]
}
^" --output-format^=cmd') DO %%A
EXIT /B

:facebook
CALL :timezone
FOR /F "delims=" %%A IN ('xidel --user-agent="%XIDEL_UA%" -H "Accept-Language: en-us" "%~1" --xquery ^"
Expand Down Expand Up @@ -1212,6 +1274,8 @@ IF NOT "%url:npostart.nl=%"=="%url%" (
FOR /F "delims=" %%A IN ('xidel -e "extract('%url%','.+/(.+)',1)"') DO CALL :dailymotion %%A
) ELSE IF NOT "%url:twitch.tv=%"=="%url%" (
CALL :twitch "%url%"
) ELSE IF NOT "%url:mixcloud.com=%"=="%url%" (
CALL :mixcloud "%url%"
) ELSE IF NOT "%url:facebook.com=%"=="%url%" (
CALL :facebook "%url%"
) ELSE IF NOT "%url:twitter.com=%"=="%url%" (
Expand Down
72 changes: 68 additions & 4 deletions xivid.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ Ondersteunde websites:
dumpert.nl vimeo.com
autojunk.nl dailymotion.com
telegraaf.nl twitch.tv
ad.nl facebook.com
lc.nl twitter.com
youtube.com pornhub.com
youtu.be
ad.nl mixcloud.com
lc.nl facebook.com
youtube.com twitter.com
youtu.be pornhub.com
Voorbeelden:
./xivid.sh https://www.npostart.nl/nos-journaal/28-02-2017/POW_03375558
Expand Down Expand Up @@ -896,6 +896,68 @@ twitch() {
' --output-format=bash)"
}

mixcloud() {
eval "$(xidel "$1" -e '
declare variable $decryption_key:="IFYOUWANTTHEARTISTSTOGETPAIDDONOTDOWNLOADFROMMIXCLOUD";
declare function local:decrypt($a as base64Binary) as string {
let $url:=x:cps(binary-to-string($a)),
$key:=x:cps(
substring(
string-join((1 to ceiling(count($url) div string-length($decryption_key))) ! $decryption_key),
1,count($url)
)
)
return
string-join(
x:cps(
for $x at $i in $url return
xivid:bin-xor($x,$key[$i])
)
)
};
let $csrf:=substring-before(substring-after($headers[contains(.,"csrftoken")],"="),";"),
$us:=tokenize("'$url'","/")[position() gt last() - 2]
return
json:=x:request(
{
"headers":(
"Content-Type: application/json",
"Referer: '$1'",
"X-CSRFToken: "||$csrf,
"Cookie: csrftoken="||$csrf
),
"post":concat(
"{""query"":""{cloudcastLookup(lookup:{username:\""",
$us[1],
"\"",slug:\""",
$us[2],
"\""}){name,owner{displayName,url,username},publishDate,audioLength,streamInfo{hlsUrl,url}}}""}"
),
"url":"https://www.mixcloud.com/graphql"
}
)/json//cloudcastLookup/{
"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":local:decrypt(base64Binary(streamInfo/url))
},
xivid:m3u8-to-json(
local:decrypt(
base64Binary(streamInfo/hlsUrl)
)
)
]
}
' --output-format=bash)"
}

facebook() {
eval "$(xidel --user-agent="$XIDEL_UA" -H "Accept-Language: en-us" "$1" --xquery '
let $a:=//script/extract(.,"\((\{bootloadable.+?)\);",1)[.] ! json(
Expand Down Expand Up @@ -1169,6 +1231,8 @@ elif [[ $url =~ dailymotion.com ]]; then
dailymotion "$(xidel -e 'extract("'$url'",".+/(.+)",1)')"
elif [[ $url =~ twitch.tv ]]; then
twitch "$url"
elif [[ $url =~ mixcloud.com ]]; then
mixcloud "$url"
elif [[ $url =~ facebook.com ]]; then
facebook "$url"
elif [[ $url =~ twitter.com ]]; then
Expand Down
Loading

0 comments on commit 8f4efbd

Please sign in to comment.