PHP下調用網易雲音樂搜尋API結果不正確

來源:互聯網
上載者:User
大家好。

這是網易雲音樂的搜尋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;}

回複內容:

大家好。

這是網易雲音樂的搜尋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;}

是不是你用的編碼不一樣

不正確是什麼意思?我測試了下沒問題

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進行轉碼,再是真正的請求。你可以試試

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.