虾米音乐信源对接小记

有过了解的都知道,虾米被阿里收购了,其所有的对外开放的API都在淘宝开放平台可以看到,看到这里,你如果直接就上淘宝开放平台上注册个应用然后开始测试信源,你会发现行不通!为什么呢?

虾米的对外API并不是对所有人都开放的,他需要以公司的身份进行申请审核,通过后方才可以开通虾米音乐模块的API给你,所以第一步该怎么做!走商务流程,当然这不是我们程序员该做的事情,等你们公司的商务人员沟通好后,那么有权限了就可以开始开发了。
首先你得先申请一个Appkey

如果出现了这个界面,说明商务流程已经走好了,接下来就是你的事了!

这个是接口文档 http://open.taobao.com//doc/api_cat_detail.htm?scope_id=11421&category_id=102

接下来会说明如果使用虾米的接口,请求获取数据!当然你也可以直接看官方的文档,我分享的是经过我改造过后的,废话不多说上代码:

    /**
     * 虾米AppKey
     */
    private static final String APPKEY = "XXXXXXX";
    /**
     * 虾米AppappSecret
     */
    private static final String APPSECRET = "XXXXXX";
    /**
     * 虾米基础url
     */
    private static final String XIAMI_BASE_URL = "http://gw.api.taobao.com/router/rest";
    /**
     * 虾米音乐歌曲搜索接口(搜索整个曲库)
     */
    private static final String M_XIAMI_SEARCH_SONG = "alibaba.xiami.api.search.songs.get";
    /**
     * 虾米榜单歌曲搜索接口
     */
    private static final String M_XIAMI_BANGDAN_SONG = "alibaba.xiami.api.rank.songs.get";
    /**
     * 虾米音乐歌曲详情接口
     */
    private static final String M_XIAMI_DETAIL_SONG = "alibaba.xiami.api.song.detail.get";
   //参数分别对应上面的常量及接口所需的参数params,这个需要根据不同接口传不同的参数,具体看文档
   //这个方法只是辅助方法不会直接调用到,
   public static String getXiaMiUrl(String xiamiUrl, String methodName,
            String appkey, String secret, TreeMap<String, String> params) {

        TreeMap<String, String> apiparamsMap = new TreeMap<String, String>();

        if (params != null) {
            apiparamsMap.putAll(params);
        }

        apiparamsMap.put("format", "json");

        apiparamsMap.put("method", methodName);

        apiparamsMap.put("sign_method", "md5");

        apiparamsMap.put("app_key", appkey);

        apiparamsMap.put("v", "2.0");

        String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                .format(new Date());

        apiparamsMap.put("timestamp", timestamp);

        // 生成签名

        String sign = md5Signature(apiparamsMap, secret);

        apiparamsMap.put("sign", sign);

        StringBuilder param = new StringBuilder();

        for (Iterator<Map.Entry<String, String>> it = apiparamsMap.entrySet()

        .iterator(); it.hasNext();) {

            Map.Entry<String, String> e = it.next();

            param.append("&").append(e.getKey()).append("=").append(
                    e.getValue());

        }

        return param.toString().substring(1);

    }
    /**
     * 
     * 新的md5签名,首尾放secret。
     * 
     * @param secret
     *            分配给您的APP_SECRET
     */

    public static String md5Signature(TreeMap<String, String> params,
            String secret) {

        String result = null;

        StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));

        if (orgin == null)

            return result;

        orgin.append(secret);

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));

        } catch (Exception e) {

            throw new java.lang.RuntimeException("sign error !");

        }

        return result;

    }
    /**
     * 
     * 添加参数的封装方法
     */

    private static StringBuffer getBeforeSign(TreeMap<String, String> params,
            StringBuffer orgin) {

        if (params == null)

            return null;

        Map<String, String> treeMap = new TreeMap<String, String>();

        treeMap.putAll(params);

        Iterator<String> iter = treeMap.keySet().iterator();

        while (iter.hasNext()) {

            String name = (String) iter.next();

            orgin.append(name).append(params.get(name));

        }

        return orgin;

    }
    /**
     * 
     * 二行制转字符串
     */

    private static String byte2hex(byte[] b) {

        StringBuffer hs = new StringBuffer();

        String stmp = "";

        for (int n = 0; n < b.length; n++) {

            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

            if (stmp.length() == 1)

                hs.append("0").append(stmp);

            else

                hs.append(stmp);

        }

        return hs.toString().toUpperCase();

    }
    /** 连接到TOP服务器并获取数据 */
    /**
     * 这个方法就是你自己调用的方法其他的方法都是辅助方法,urlStr是基础路径
     */
    public static String getXiaMiResult(String urlStr, String methodName,
            TreeMap<String, String> params) {

        String content = getXiaMiUrl(urlStr, methodName, APPKEY,APPSECRET, params);

        /** 连接到TOP服务器并获取数据 */
        URL url = null;

        HttpURLConnection connection = null;
        try {

            url = new URL(urlStr);

            connection = (HttpURLConnection) url.openConnection();

            connection.setDoOutput(true);

            connection.setDoInput(true);

            connection.setRequestMethod("POST");

            connection.setUseCaches(false);

            connection.connect();

            DataOutputStream out = new DataOutputStream(connection
                    .getOutputStream());

            out.write(content.getBytes("utf-8"));

            out.flush();

            out.close();

            BufferedReader reader =

            new BufferedReader(new InputStreamReader(connection
                    .getInputStream(), "utf-8"));

            StringBuffer buffer = new StringBuffer();

            String line = "";

            while ((line = reader.readLine()) != null) {

                buffer.append(line);

            }

            reader.close();

            return buffer.toString();

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            if (connection != null) {

                connection.disconnect();

            }

        }

        return null;
    }

好了就到此结束了,仅供参考,希望可以帮到你!

时间: 2024-10-12 14:11:14

虾米音乐信源对接小记的相关文章

虾米音乐腾讯视频争好声音版权 阿里数娱音乐布局浮水

进入2014年以来,阿里数娱一直没闲着,刘春宁到处串场为阿里在文化产业的布局摇旗呐喊.过去半年,阿里数娱已经先后完成了在游戏.动漫.影视等领域的布局,这两日在音乐领域的布局也正式浮出水面. 相隔一天时间,阿里巴巴接连拿下<中国好声音>和<中国好歌曲>两档热播音乐节目,借此机会阿里数娱在音乐领域的布局正式浮水.阿里数娱旗下虾米音乐将独家享有第三季<中国好音乐>的音乐版权,同时虾米还将参与到上海灿星旗下另一档音乐节目<中国好歌曲>的筹备工作. 而此前,腾讯以2.

将 QQ 音乐、网易云音乐和虾米音乐资源「整合」一起的Chrome 扩展Listen 1

原文地址:http://whosmall.com/?post=418 本文标签: Chrome扩展 Chrome浏览器 Chrome扩展Listen1 音乐资源整合 Listen1安装方法 在 Chrome 上安装了这款名为 Listen 1 的插件,妈妈可是再也不用担心你找不到想听的歌了.它将 QQ 音乐.网易云音乐以及虾米音乐的音乐资源「整合」在了一起,你只需要输入音乐关键词,就可以方便地三大曲库中跳转搜索. 安装方法 Listen 1 的安装方法与一般的 Chrome Extension

Asp.net 两个链接实现虾米音乐搜索

起因 暑假刚结束,又要回到学校写代码了,本人写代码的时候特别喜欢听歌,一直使用的是虾米音乐,出于好奇,想给自己的网站集成虾米音乐搜索功能,但是一直找不到虾米开放api,所以只能自己找办法了,之后发现一位大神写的一篇文章,里面介绍了如何用js实现虾米音乐搜索,不过我并没有太多的接触过js语言,所以我打算用c#语言来实现虾米音乐搜索,拾取文中两个重要的json接口,开始我的音乐搜索之旅. 准备 要实现功能,首先要准备好思路,首先我要掌握json最基础的用法,如果提取网页中的json,json本人接触

腾讯微信封杀虾米音乐和网易云音乐

继微信封杀支付宝新春红包服务后,从昨日开始,微信的封杀行为进一步升级.不少用户发现,包括虾米音乐.天天动听.网易云音乐也无法分享至微信朋友圈. 腾讯回应:版权问题 当用户在虾米或天天动听APP上进行分享至微信的操作时,页面显示“由于你当前分享的内容存在安全隐患,无法分享到微信”.同样,与虾米音乐和天天动听分享失败的理由也一致. 虾米音乐和天天动听方面均表示,未进行技术改动操作.网易云音乐则回应称,腾讯单方面禁止了网易云音乐等主流音乐App在微信朋友圈的分享,欢迎大家继续与好友在网易云音乐平台分享

python 下载虾米音乐

#!/usr/bin/env python2 # coding:utf-8 import urllib import re import sys import urllib2 # xml => http://www.xiami.com/widget/xml-single/sid/1769215777 # string = "5h3%..i%2323F27%_3ueb5cc554e525-ntA2fx.2%9F211_5l%ty5d227E4-E8E%ut%FiicF2532759E.3h%

下载虾米音乐的歌词

这个方法比较笨,需要一个个的操作,你也可以试着使用脚本实现自动下载 1. 使用chrome浏览器打开虾米音乐播放界面 2. 右键点开审查元素 3. 点开network标签 4. 点下过滤 5. 如果是静态歌词填入txt,如果是动态歌词,就填入lrc,不过有时候静态歌词也会保存为lrc扩展名 6. 右键最底下的那个txt或者lrc 7. 点击open link in new tab 8. 自己修改下文件名就可以保存了 来自为知笔记(Wiz)

[源码]随机获取虾米音乐song_id API文件

[源码]随机获取虾米音乐song_id API文件 January 11, 2015 注意:此API请放置于国内主机使用,如香港.北京等等,否则会提示:虾米音乐在您所处的国家或地区暂时无法使用 <?php $url = file_get_contents('http://www.xiami.com/search/song/page/'.rand(1,636).'?key=%E5%8A%A8%E6%BC%AB&is_pub=y'); preg_match_all("/\?sid=(\

【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜

实验网站:虾米音乐排行榜 网站地址:http://www.xiami.com/chart 难度系数:★☆☆☆☆ 依赖库:request.lxml的etree (安装lxml:pip install lxml) IDEA开发工具:PyCharm_2017.3 Python版本:Python3 期望结果:爬取出排行版歌名以及对应歌手 运行效果图: 音乐排行榜: 爬取数据结果图: 像这种简单的爬取就没必要使用Scrapy框架进行处理,是在有点大材小用,不过如果你刚开始学Scrapy的话,拿这些简单的练

虾米音乐pc端数据库直接可以查看大量账户信息

在虾米音乐pc端有一个问题,就是数据库采用的sqlite,并未进行加密 它将很多账户信息暴露在外,虽然不知道这些信息暴露出来会发生什么,也许什么也不会发生,但是,基本的加密我觉得是必要的. 数据库位置 X:\音乐\虾米音乐\system\xm_data.db 通过管理工具链接,我们将得到5个表 api_cache,global_config,local_music,play_history,xm_user. 1. api_cache 拥有 三个字段 id,apiName,apiData apiN