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

大家好。

这是网易云音乐的搜索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进行转码,再是真正的请求。你可以试试

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值