PHP下调用网易云音乐搜索API结果不正确
大家讲道理
大家讲道理 2017-04-10 15:43:06
[PHP讨论组]

大家好。

这是网易云音乐的搜索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;
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
大家讲道理

是不是你用的编码不一样

PHP中文网

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

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

阿神

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号