aboutsummaryrefslogtreecommitdiffstats
path: root/resolve/sc.php
diff options
context:
space:
mode:
authorlolcat <will@lolcat.ca>2025-12-14 17:18:58 -0500
committerlolcat <will@lolcat.ca>2025-12-14 17:18:58 -0500
commit4f587e32e1f53b75d71037082341b7acf554a45d (patch)
tree03f1857ff29e8bdd6c53fcd3cdd3e7caaddc8ae4 /resolve/sc.php
parent0243e4edf21e7cdf09cfce9035bbca8ee3dd0076 (diff)
unfuck yourself
Diffstat (limited to 'resolve/sc.php')
-rw-r--r--resolve/sc.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/resolve/sc.php b/resolve/sc.php
new file mode 100644
index 0000000..3606274
--- /dev/null
+++ b/resolve/sc.php
@@ -0,0 +1,117 @@
+<?php
+
+class sc{
+
+ public function __construct(){
+
+ include "lib/backend.php";
+ $this->backend = new backend("sc");
+
+ include "lib/fuckhtml.php";
+ $this->fuckhtml = new fuckhtml();
+ }
+
+ private function get($proxy, $url, $get = []){
+
+ $curlproc = curl_init();
+
+ if($get !== []){
+ $get = http_build_query($get);
+ $url .= "?" . $get;
+ }
+
+ curl_setopt($curlproc, CURLOPT_URL, $url);
+
+ // http2 bypass
+ curl_setopt($curlproc, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+
+ $headers =
+ ["User-Agent: " . config::USER_AGENT,
+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
+ "Accept-Language: en-US,en;q=0.5",
+ "Accept-Encoding: gzip",
+ "DNT: 1",
+ "Sec-GPC: 1",
+ "Connection: keep-alive",
+ "Upgrade-Insecure-Requests: 1",
+ "Sec-Fetch-Dest: document",
+ "Sec-Fetch-Mode: navigate",
+ "Sec-Fetch-Site: none",
+ "Sec-Fetch-User: ?1",
+ "Priority: u=0, i"];
+
+ $this->backend->assign_proxy($curlproc, $proxy);
+
+ curl_setopt($curlproc, CURLOPT_ENCODING, ""); // default encoding
+ curl_setopt($curlproc, CURLOPT_HTTPHEADER, $headers);
+
+ curl_setopt($curlproc, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curlproc, CURLOPT_SSL_VERIFYHOST, 2);
+ curl_setopt($curlproc, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($curlproc, CURLOPT_CONNECTTIMEOUT, 30);
+ curl_setopt($curlproc, CURLOPT_TIMEOUT, 30);
+
+ $data = curl_exec($curlproc);
+
+ if(curl_errno($curlproc)){
+ throw new Exception(curl_error($curlproc));
+ }
+
+ curl_close($curlproc);
+ return $data;
+ }
+
+ function resolve($id){
+
+ if(
+ !preg_match(
+ '/^(t|p)[0-9]+$/',
+ $id
+ )
+ ){
+
+ throw new Exception("ID is invalid");
+ }
+
+ $type = $id[0] == "t" ? "track" : "playlist";
+ $id = substr($id, 1);
+
+ try{
+ $html =
+ $this->get(
+ $this->backend->get_ip(),
+ "https://w.soundcloud.com/player/",
+ [
+ "url" => "http://api.soundcloud.com/{$type}s/{$id}",
+ "show_artwork" => "true"
+ ]
+ );
+ }catch(Exception $error){
+
+ throw new Exception("Failed to fetch song embed page");
+ }
+
+ $this->fuckhtml->load($html);
+
+ $link =
+ $this->fuckhtml
+ ->getElementsByAttributeValue(
+ "rel",
+ "canonical",
+ "link"
+ );
+
+ if(count($link) === 0){
+
+ throw new Exception("Soundcloud could not resolve the song ID to an URL");
+ }
+
+ return
+ $this->fuckhtml
+ ->getTextContent(
+ $link[0]
+ ["attributes"]
+ ["href"]
+ );
+ }
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage