PHP API возвращает URL-адрес с дополнительными «/» в URL-адресе

#php

#php

Вопрос:

У меня есть API YouTube, который я использую (очевидно, приписанный владельцу), который возвращает ссылку на него в формате MP4. (например: r5—sn.googlevideo или любую другую ссылку Google). Мне пришлось отредактировать код, потому что создатель даже сказал «Этот код не работает». Итак, я заставил это работать, но когда он возвращается, я получаю ссылку, которая выглядит как https://link.com вместо https://link.com . Я перешел по ссылке с дополнительными косыми чертами, и я получаю https:////link.com , просто чтобы быть уверенным.

Это небольшой инструмент для извлечения ссылок на Youtube, потому что я терпеть не могу видеть всплывающую рекламу веб-сайтов и другие раздражающие ссылки, поэтому я подумал, что размещу его на своем собственном веб-сайте.

Это код API.

 <?php

function YT_IN_DX($url){
    $cookie_file_path = "cookies.txt";
    $ch               = curl_init();
    $headers[]        = "Connection: Keep-Alive";
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    curl_setopt($ch, CURLOPT_URL, $url);
    $res = curl_exec($ch);
    curl_close($ch);
    return $res;
}
function YT_V_INFO($v){
    $url         = "https://www.youtube.com/get_video_info?video_id=$v";
    $html        = urldecode(YT_IN_DX($url));
    $video_links = Explode_Content('playabilityStatus', 'adSafetyReason', $html);
    $json        = str_replace("u0026", "amp;", $video_links);
    $json        = '{"playabilityStatus' . $json . 'adSafetyReason":{"isEmbed":true}}';
    $array       = json_decode($json, true);
    if (isset($array["playabilityStatus"]["status"]) amp;amp; $array["playabilityStatus"]["status"] == "UNPLAYABLE") {
        $data = array("error" => $array["playabilityStatus"]["status"]);
    }else{
        $formats = $array["streamingData"]["formats"];
        for ($a = 0; $a <= (count($formats) - 1); $a  ){
            $data[] = array(
                "url" => $array["streamingData"]["formats"][$a]["url"],
                "mimeType" => $array["streamingData"]["formats"][$a]["mimeType"],
                "quality" => $array["streamingData"]["formats"][$a]["quality"],
                "qualityLabel" => $array["streamingData"]["formats"][$a]["qualityLabel"],
                "width" => $array["streamingData"]["formats"][$a]["width"],
                "height" => $array["streamingData"]["formats"][$a]["height"],
                "audioQuality" => $array["streamingData"]["formats"][$a]["audioQuality"],
                "approxDurationMs" => $array["streamingData"]["formats"][0]["approxDurationMs"]
            );
        }
    }
    return $data;
}
function Explode_Content($first, $last, $string)
{
    $exp = explode($first, $string);
    $exp = explode($last, $exp[1]);
    return $exp[0];
}
if(isset($_GET['url']) amp;amp; $_GET['url'] != ""){
    parse_str( parse_url( $_GET['url'], PHP_URL_QUERY ), $vars );


    $id=$vars['v'];

    echo json_encode(YT_V_INFO($id),JSON_PRETTY_PRINT);

}else{
    @$myObj->error = true;
    $myObj->msg = "there is no youtube link";

    $myObj->madeBy = "El-zahaby";
    $myObj->instagram = "egy.js";
    $myJSON = json_encode($myObj,JSON_PRETTY_PRINT);

    echo $myJSON;

    echo "credit to el3zahaby!";

}

?>
  

Я ожидал, что результатом будет хороший URL, но я получаю вывод с дополнительными косыми чертами.

Ответ №1:

Возможно, вам нужно избежать обратной косой черты

 echo json_encode(YT_V_INFO($id),JSON_UNESCAPED_SLASHES);
  

или вы также можете удалить обратную косую черту вручную, заменив эту часть следующим кодом

 if(isset($_GET['url']) amp;amp; $_GET['url'] != ""){
parse_str( parse_url( $_GET['url'], PHP_URL_QUERY ), $vars );
$id=$vars['v'];
$str = json_encode(YT_V_INFO($id),JSON_PRETTY_PRINT);
$str = str_replace('\', '', $str);
echo $str;