QQ music jsonp

研究了好几天的跨域调用,发现QQ音乐可以支持jsonp,简短代码如下:

<script src="http://code.jquery.com/jquery-latest.js"></script>
	<!--<script src="https://github.com/jaubourg/jquery-jsonp/blob/master/src/jquery.jsonp.js"> </script>-->
	<script type="text/javascript">
     // jQuery(document).ready(function(){
      // $.getJSON("http://box.zhangmen.baidu.com/x?op=12&count=1&title=最炫民族风$$凤凰传奇$$$", function(json)
      // {
      	// alert(json);
      // });
    // });
     $.ajax({
             type: "post",
             async: false,
             // url: "http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?value=记得&artist=林俊杰&type=qry_song&out=json&page_no=1&page_record_num=3",
             url:"http://shopcgi.qqmusic.qq.com/fcgi-bin/shopsearch.fcg?type=qry_song&value=天意&page_no=1&page_record_num=3",
             dataType: "jsonp",
             jsonp: "searchCallBack",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
             jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
             success: function(json){
                 // alert('您查询到航班信息:票价: ' + json.price + ' 元,余票: ' + json.tickets + ' 张。');
                 alert(json);
             },
             error: function(){
                 // alert('fail');
             }
         });
         
         function searchCallBack(json) {
         	alert(json.result);
         	alert(json.totalnum);
         	alert(json.search);
        }
     </script>

具体信息可参见 参数解析

### 如何使用 Java 调用 QQ 音乐 API 以下是基于提供的引用内容以及相关知识构建的一个完整的解决方案。 #### 依赖库引入 为了能够成功调用外部 HTTP 接口,通常会使用 Apache HttpClient 库或其他类似的工具。可以通过 Maven 添加以下依赖项: ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> ``` 此部分未涉及具体引用,因此无需标注引文符号。 --- #### 示例代码:调用 QQ 音乐推荐歌单接口 以下是一个简单的 Java 实现,用于调用 QQ 音乐的推荐歌单接口并解析返回的数据: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class QQMusicApiExample { public static void main(String[] args) { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { String url = "https://c.y.qq.com/rcmusic/fcgi-bin/fcg_iphone_music_rec_songlist?" + "jsonpCallback=musicRecSongListCallback&cid=338&ct=20&songid=5110311" + "&uin=10000&p=0.3702123376466666&g_tk=5381&jsonpCallback=musicRecSongListCallback" + "&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0" + "&platform=yqq&needNewCode=0"; HttpGet request = new HttpGet(url); CloseableHttpResponse response = httpClient.execute(request); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { // 如果请求成功 String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println("响应数据:" + responseBody); // 输出 JSONP 数据 } else { System.err.println("HTTP 请求失败,状态码:" + statusCode); } response.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码实现了向 QQ 音乐推荐歌单接口发起 GET 请求,并打印其返回的内容[^2]。 --- #### 解析 JSONP 响应 QQ 音乐 API 的默认返回格式通常是 JSONPJSON with Padding)。如果需要提取其中的有效 JSON 数据,则可以去掉回调函数名 `musicRecSongListCallback` 并处理剩余的部分。例如: ```java String jsonpData = responseBody.replaceFirst("^\\w*\\(", "").replaceFirst("\\);$", ""); System.out.println("纯 JSON 数据:" + jsonpData); ``` 这样即可获得标准的 JSON 字符串以便进一步解析。 --- #### 注意事项 1. **API 参数说明** 不同的 QQ 音乐接口可能需要不同的参数组合。建议查阅官方文档或逆向工程获取更详细的字段定义[^2]。 2. **合法性与授权** 大多数第三方服务都要求开发者注册应用以获取合法的身份凭证(如 AppKey 或 Token),否则可能会被拒绝访问或者触发频率限制。 3. **错误处理机制** 在实际开发过程中应当加入异常捕获逻辑来增强程序健壮性;同时也要考虑网络超时等问题的发生概率及其应对策略。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值