我想使用免费的 YouTube 到 mp3 API,但我只有字符串作为响应。我如何在对象/json/数组中传输响应? PHP

Posted

技术标签:

【中文标题】我想使用免费的 YouTube 到 mp3 API,但我只有字符串作为响应。我如何在对象/json/数组中传输响应? PHP【英文标题】:I want to use a free YouTube to mp3 API but i got only string as response. How i can transfer the response in an object/json/array? PHP 【发布时间】:2021-10-07 15:29:06 【问题描述】:

我尝试转换每个 json_encode($response) 的 ARRAY,但它仍然是一个字符串。我剪断了字符串,所以我得到了它的正确部分,但它只在这个视频中工作,所以我必须使用 $response[position_I_want]。我该如何解决这个问题? 感谢大家的帮助!

$response = $YouTubeLink->loader($_GET["ID"]);        //my class with the curl function loader

function loader($ID)
    


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL => "https://youtube-to-mp32.p.rapidapi.com/api/yt_to_mp3?video_id=$ID", // hier wird die Video ID übergeben
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "x-rapidapi-host: youtube-to-mp32.p.rapidapi.com",
                "x-rapidapi-key: a3ab095a57msh2d08de201b482cbp1559dcjsnaa6636261faa"
            ],
        ]);

        // speichert die api antwort in die Variable response
        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) 
            echo "cURL Error #:" . $err;
         else 
            return json_encode($response); // <---This dosent work it gives only string back
        


    

here is the original response
string(377) ""Status":"Success","Status_Code":404,"Title":"2Pac, Pop Smoke - Write This Down ft. Biggie, DMX, Eazy E, Ice Cube, Dr Dre, NWA, Nipsey, Snoop Dogg","Download_Size":5161074,"Video_Duration":798,"Video_Thumbnail":"https://img.youtube.com/vi/HI6gMkfRjE0/hqdefault.jpg","Full_Video_Link":"https://www.youtube.com/watch?v=HI6gMkfRjE0","Download_url":"<here is the download link>"" 

【问题讨论】:

您可能不应该在此处包含您的 API 密钥 - 现在任何人都可以使用它并耗尽您的配额,如果他们愿意的话。您应该尽快使该密钥无效,并且知道即使您现在编辑该密钥,它也可能被 Google 和其他搜索引擎缓存,并且将始终在这篇文章的编辑历史记录中可用。 @esqew 好点。 Marsel111 您需要更改您的 API 密钥。 【参考方案1】:

json_decode 用于 解码 JSON 字符串格式。 https://www.php.net/json_decode

您使用 json_encode() 以 JSON 字符串格式进行编码。 https://www.php.net/json_encode

<?php
/***************************************
* How to read data from json_decode
***************************************/
$response = $YouTubeLink->loader($_GET["ID"]);        //my class with the curl function loader
echo $response->Status."<br />\n"; // should output 'Success'
echo $response->Title."<br />\n"; // should output '2Pac, Pop Smoke - Write This Down ft. Biggie, DMX, Eazy E, Ice Cube, Dr Dre, NWA, Nipsey, Snoop Dogg'


function loader($ID)
    


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL => "https://youtube-to-mp32.p.rapidapi.com/api/yt_to_mp3?video_id=$ID", // hier wird die Video ID übergeben
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "x-rapidapi-host: youtube-to-mp32.p.rapidapi.com",
                "x-rapidapi-key: YOUR_KEY"
            ],
        ]);

        // speichert die api antwort in die Variable response
        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) 
            echo "cURL Error #:" . $err;
         else 
            //return json_decode($response, true); // If you want an array instead of object
            return json_decode($response); // <---Use the good function
        


    


【讨论】:

是的,我试过了,我得到了这个-> string(363) ""\"Status\":\"Success\",\"Status_Code\":404,\"Title\":\"50 Cent - 许多男人 (Wish死亡)(脏版)\",\"Download_Size\":1898696,\"Video_Duration\":297,\"Video_Thumbnail\":\"https:\/\/img.youtube.com\/vi\/5D3crqpClPY \/hqdefault.jpg\",\"Full_Video_Link\":\"https:\/\/www.youtube.com\/watch?v=5D3crqpClPY\",\"Download_url\":\"https:\/\ /tinyurl.com\/yhnem9k9\""" 也是一个字符串 我在您的示例中看不到您如何阅读$response = $YouTubeLink-&gt;loader($_GET["ID"]); 您能否仅输出来自curl_exec$response 怀疑你需要在json_decode它之前做点什么。 哇超级棒!非常感谢....你帮助了我

以上是关于我想使用免费的 YouTube 到 mp3 API,但我只有字符串作为响应。我如何在对象/json/数组中传输响应? PHP的主要内容,如果未能解决你的问题,请参考以下文章

尝试下载通过 YouTube-to-MP3 API 生成的 MP3,但我得到的只是一个 0 字节的 MP3 文件

如何使用 Xamarin.Forms/C# 将 mp3 从 youtube 下载到 android?

ruby youtube视频到mp3文件(红宝石)

Youtube-dl 订阅 mp3

如何使用 YouTube API (V3) 将缩略图上传到 YouTube 频道

如何上传到同一帐户的特定 YouTube 频道? (YouTube 数据 API)