PHP下调用网易云音乐搜索API结果不正确

发布于 2022-09-01 12:34:06 字数 1456 浏览 19 评论 0

大家好。

这是网易云音乐的搜索API。

当调用下面一段function,$word是英文时搜索结果正常,但中文的时候返回结果不正确。

为什么呢,请指教?

function music_search($word, $type=1)
{
    $url = "http://music.163.com/api/search/pc";
    $post_data = array(
        's' => $word,
        'offset' => '0',
        'limit' => '20',
        'type' => $type,
    );
    $referrer = "http://music.163.com/";
    $URL_Info = parse_url($url);
    $values = [];
    $result = '';
    $request = '';
    foreach ($post_data as $key => $value) {
        $values[] = "$key=" . urlencode($value);
    }
    $data_string = implode("&", $values);
    if (!isset($URL_Info["port"])) {
        $URL_Info["port"] = 80;
    }
    $request .= "POST " . $URL_Info["path"] . " HTTP/1.1\n";
    $request .= "Host: " . $URL_Info["host"] . "\n";
    $request .= "Referer: $referrer\n";
    $request .= "Content-type: application/x-www-form-urlencoded\n";
    $request .= "Content-length: " . strlen($data_string) . "\n";
    $request .= "Connection: close\n";
    $request .= "Cookie: " . "appver=1.5.0.75771;\n";
    $request .= "\n";
    $request .= $data_string . "\n";
    $fp = fsockopen($URL_Info["host"], $URL_Info["port"]);
    fputs($fp, $request);
    $i = 1;
    while (!feof($fp)) {
        if ($i >= 15) {
            $result .= fgets($fp);
        } else {
            fgets($fp);
            $i++;
        }
    }
    fclose($fp);
    return $result;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

远昼 2022-09-08 12:34:06

是不是你用的编码不一样

赴月观长安 2022-09-08 12:34:06

不正确是什么意思?我测试了下没问题

phpprint_r(json_decode(music_search('十年'),1));
Array
(
    [result] => Array
        (
            [songCount] => 300
            [songs] => Array
                (
                    [0] => Array
                        (
                            [starred] => 
                            [popularity] => 100
                            [starredNum] => 0
                            [playedNum] => 0
                            [dayPlays] => 0
                            [hearTime] => 0
                            [mp3Url] => http://m1.music.126.net/V6G5ER-inEZ_Oufxq9tmfA==/1153387697546241.mp3
                            [rtUrls] => Array
                                (
                                )

                            [name] => 十年
                            [id] => 66842
                            [position] => 4
                            [duration] => 206000
                            [status] => 1
                            [alias] => Array
                                (
                                )

                            [commentThreadId] => R_SO_4_66842
                            [copyFrom] => 
                            [album] => Array
                                (
                                    [songs] => Array
                                        (
                                        )

                                    [name] => 黑白灰
                                    [id] => 6548
                                    [type] => 专辑
                                    [size] => 10
                                    [status] => 1
                                    [description] => 
                                    [tags] => 
                                    [alias] => Array
                                        (
                                        )

                                    [company] => 英皇娱乐
                                    [artist] => Array
                                        (
                                            [img1v1Id] => 0
                                            [name] => 
                                            [id] => 0

花开浅夏 2022-09-08 12:34:06

估计人家的接口不能接受原生的中文字符的编码。建议在post传入的参数当中,利用urlencode进行转码,再是真正的请求。你可以试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文