【问题标题】:Getting lyrics from Musixmatch从 Musixmatch 获取歌词
【发布时间】:2018-12-24 16:27:23
【问题描述】:

很遗憾,我没有任何 PHP 编码经验。只是 HTML。
我正在尝试从 Musixmatch 中检索歌词但没有成功。
下面的这段代码用于从 Last.fm 成功检索 Bios,并与 Musixmatch 一起使用,我更改了值(url、api_key)。
你能给我一点帮助吗?
非常感谢。
圣诞快乐。

   <?php
   $fields = array(    
         'q_track' => $track,    
         'q_artist' => $artist,    
         'api_key' => 'xxxxxecab2a0072c88ee31b50a4225b');    
$fields_string = '';    
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }    
rtrim($fields_string,'&');    
$ch = curl_init();    
curl_setopt($ch, CURLOPT_TIMEOUT, 10);    
curl_setopt($ch, CURLOPT_URL,  
'http://api.musixmatch.com/ws/1.1/matcher.lyrics.get');    
curl_setopt($ch, CURLOPT_POST, true);    
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);    
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; 
Windows NT 5.0)");    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
$response = curl_exec($ch);    
curl_close($ch);    
$soap = simplexml_load_string($response);    ?>


<div>
<div  />
<h3><?php echo $track; ?></h3>
</div>
<br><div><p><?php print nl2br(strip_tags($soap->body->lyrics- 
>lyrics_body)); ?></p><br></div> 

【问题讨论】:

  • 您收到什么错误?您使用的用户代理已经很老了。
  • 感谢您的回答。我收到一个空的回复,没有错误。这是我测试代码的页面:companyfm.com/lyrics4.php
  • ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); 放在您的开头&lt;?php 标签的正下方;它是否显示任何错误? @克劳迪奥马蒂诺
  • 这些是错误:警告:simplexml_load_string():实体:第 1 行:解析器错误:需要开始标记,在第 59 行的 /home/i6mjtazilgjm/public_html/lyrics4.php 中找不到“
  • 和:注意:尝试在第 65 行的 /home/i6mjtazilgjm/public_html/lyrics4.php 中获取非对象的属性“正文”注意:尝试获取非对象的属性“歌词”在第 65 行的 /home/i6mjtazilgjm/public_html/lyrics4.php 注意:尝试在第 65 行的 /home/i6mjtazilgjm/public_html/lyrics4.php 中获取非对象的属性“lyrics_body”

标签: php arrays curl


【解决方案1】:

1/ 您正在使用 API 不支持的 POST 方法发送请求。 尝试用这个替换 CURL 请求:

$ch = curl_init();    
curl_setopt($ch, CURLOPT_URL,  
'http://api.musixmatch.com/ws/1.1/matcher.lyrics.get?'.$fields_string);       
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
$response = curl_exec($ch);    
curl_close($ch);  

2/ API 的响应类型为JSON,因此请尝试使用json_decode() 而不是simplexml_load_string()

另外,我建议使用 HTTPS。

【讨论】:

  • 感谢您的回答。我已经替换了 CURL,不显示错误,但是响应是空的。
  • 尝试在curl_close($ch);之后添加print_r($response);,看看API的响应是什么
  • 感谢您的回答。响应只是刷新页面时更改的数字。示例:5010.00019621849060059
【解决方案2】:

我是 Musixmatch api 的新手。您需要将查询输入参数 (q_*) 与以“search”结尾的 api 命令一起使用,而不是 get。如果您使用“get”,则需要对象的 ID(例如 track_id=#####)。问候。

示例适用于“搜索”和“q_”的输入: 卷曲: curl --url "http://api.musixmatch.com/ws/1.1/track.search?q_artist=Toto&q_track=Rosanna&apikey=########"


部分卷曲输出: {"message":{"header":{"status_code":200,"execute_time":0.020166873931885,"available":26},"body":{"track_list":[{"track":{"track_id": 88430107

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 2020-10-08
    • 2016-03-27
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    相关资源
    最近更新 更多