package com.wm.remusic.net; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class BMA { public static final String FORMATE = "json"; public static final String BASE = "http://tingapi.ting.baidu.com/v1/restserver/ting?from=android&version=5.6.5.6&format=" + FORMATE; /** * 轮播音乐封面 * * @param num 数量 * @return */ public static String focusPic(int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.plaza.getFocusPic") .append("&num=").append(num); return sb.toString(); } /** * 唱片专辑 * * @author Sanron */ public static class Album { /** * 推荐唱片 * * @param offset 偏移量 * @param limmit 获取数量 * @return */ public static String recommendAlbum(int offset, int limmit) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.plaza.getRecommendAlbum") .append("&offset=").append(offset) .append("&limit=").append(limmit); return sb.toString(); } /** * 唱片信息 * * @param albumid 唱片id * @return */ public static String albumInfo(String albumid) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.album.getAlbumInfo") .append("&album_id=").append(albumid); return sb.toString(); } } /** * 音乐场景 * * @author Sanron */ public static class Scene { /** * 推荐音乐场景(需要cuid,暂时关闭) * @return */ // public static String sugestionScene(){ // StringBuffer sb = new StringBuffer(BASE); // sb.append("&method=").append("baidu.ting.scene.getSugScene"); // return sb.toString(); // } /** * 固定场景 * * @return */ public static String constantScene() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.scene.getConstantScene"); return sb.toString(); } /** * 所有场景类别 * * @return */ public static String sceneCategories() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.scene.getCategoryList"); return sb.toString(); } /** * 场景类别下的所有场景 * * @param categoreid 类别id * @return */ public static String categoryScenes(String categoreid) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.scene.getCategoryScene") .append("&category_id=").append(categoreid); return sb.toString(); } } /** * 音乐标签 * * @author Sanron */ public static class Tag { /** * 所有音乐标签 * * @return */ public static String allSongTags() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.tag.getAllTag"); return sb.toString(); } /** * 热门音乐标签 * * @param num 数量 * @return */ public static String hotSongTags(int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.tag.getHotTag") .append("&nums=").append(num); return sb.toString(); } /** * 标签为tagname的歌曲 * * @param tagname 标签名 * @param limit 数量 * @return */ public static String tagSongs(String tagname, int limit) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.tag.songlist") .append("&tagname=").append(encode(tagname)) .append("&limit=").append(limit); return sb.toString(); } } public static class Song { /** * 歌曲基本信息 * * @param songid 歌曲id * @return */ public static String songBaseInfo(String songid) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.song.baseInfos") .append("&song_id=").append(songid); return sb.toString(); } /** * 编辑推荐歌曲 * * @param num 数量 * @return */ public static String recommendSong(int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.song.getEditorRecommend") .append("&num=").append(num); return sb.toString(); } /** * 歌曲信息和下载地址 * * @param songid * @return */ public static String songInfo(String songid) { StringBuffer sb = new StringBuffer(BASE); String str = "songid=" + songid + "&ts=" + System.currentTimeMillis(); String e = AESTools.encrpty(str); sb.append("&method=").append("baidu.ting.song.getInfos") .append("&").append(str) .append("&e=").append(e); return sb.toString(); } /** * 歌曲伴奏信息 * * @param songid * @return */ public static String accompanyInfo(String songid) { StringBuffer sb = new StringBuffer(BASE); String str = "song_id=" + songid + "&ts=" + System.currentTimeMillis(); String e = AESTools.encrpty(str); sb.append("&method=").append("baidu.ting.learn.down") .append("&").append(str) .append("&e=").append(e); return sb.toString(); } /** * 相似歌曲 * * @param songid * @return */ public static String recommendSongList(String songid, int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.song.getRecommandSongList") .append("&song_id=").append(songid) .append("&num=").append(num); return sb.toString(); } } /** * 艺术家 * * @author Sanron */ public static class Artist { /** * 全部地区 */ public static final int AREA_ALL = 0; /** * 华语 */ public static final int AREA_CHINIESE = 6; /** * 欧美 */ public static final int AREA_EU = 3; /** * 韩国 */ public static final int AREA_KOREA = 7; /** * 日本 */ public static final int AREA_JAPAN = 60; /** * 其他 */ public static final int AREA_OTHER = 5; /** * 无选择 */ public static final int SEX_NONE = 0; /** * 男性 */ public static final int SEX_MALE = 1; /** * 女性 */ public static final int SEX_FEMALE = 2; /** * 组合 */ public static final int SEX_GROUP = 3; /** * 获取艺术家列表 * * @param offset 偏移 * @param limit 数量 * @param area 地区:0不分,6华语,3欧美,7韩国,60日本,5其他 * @param sex 性别:0不分,1男,2女,3组合 * @param order 排序:1按热门,2按艺术家id * @param abc 艺术家名首字母:a-z,other其他 * @return */ public static String artistList(int offset, int limit, int area, int sex, int order, String abc) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.artist.getList"); sb.append("&offset=").append(offset); sb.append("&limit=").append(limit); sb.append("&area=").append(area); sb.append("&sex=").append(sex); sb.append("&order=").append(order);//暂时不清楚order排序 if (abc != null && !abc.trim().equals("")) { sb.append("&abc=").append(abc); } return sb.toString(); } /** * 热门艺术家 * * @param offset 偏移量 * @param limit 获取数量 * @return */ public static String hotArtist(int offset, int limit) { return artistList(offset, limit, 0, 0, 1, null); } /** * 艺术家歌曲 * * @param tinguid tinguid * @param artistid 艺术家id * @param offset 偏移量 * @param limit 获取数量 * @return */ public static String artistSongList(String tinguid, String artistid, int offset, int limit) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.artist.getSongList") .append("&order=2") .append("&tinguid=").append(tinguid) .append("&artistid=").append(artistid) .append("&offset=").append(offset) .append("&limits=").append(limit); return sb.toString(); } /** * 艺术家信息 * * @param tinguid tinguid * @param artistid 艺术家id * @return */ public static String artistInfo(String tinguid, String artistid) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.artist.getinfo") .append("&tinguid=").append(tinguid) .append("&artistid=").append(artistid); return sb.toString(); } } /** * 音乐榜 */ public static class Billboard { /** * 所有音乐榜类别 * * @return */ public static String billCategory() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.billboard.billCategory") .append("&kflag=1"); return sb.toString(); } /** * 音乐榜歌曲 * * @param type 类型 * @param offset 偏移 * @param size 获取数量 * @return */ public static String billSongList(int type, int offset, int size) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.billboard.billList") .append("&type=").append(type) .append("&offset=").append(offset) .append("&size=").append(size) .append("&fields=").append(encode("song_id,title,author,album_title,pic_big,pic_small,havehigh,all_rate,charge,has_mv_mobile,learn,song_source,korean_bb_song")); return sb.toString(); } } /** * 歌单 * * @author Sanron */ public static class GeDan { /** * 歌单分类 * * @return */ public static String geDanCategory() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.diy.gedanCategory"); return sb.toString(); } /** * 热门歌单 * * @param num * @return */ public static String hotGeDan(int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.diy.getHotGeDanAndOfficial") .append("&num=").append(num); return sb.toString(); } /** * 歌单 * * @param pageNo 页码 * @param pageSize 每页数量 * @return */ public static String geDan(int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.diy.gedan") .append("&page_size=").append(pageSize) .append("&page_no=").append(pageNo); return sb.toString(); } /** * 包含标签的歌单 * * @param tag 标签名 * @param pageNo 页码 * @param pageSize 每页数量 * @return */ public static String geDanByTag(String tag, int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.diy.search") .append("&page_size=").append(pageSize) .append("&page_no=").append(pageNo) .append("&query=").append(encode(tag)); return sb.toString(); } /** * 歌单信息和歌曲 * * @param listid 歌单id * @return */ public static String geDanInfo(String listid) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.diy.gedanInfo") .append("&listid=").append(listid); return sb.toString(); } } /** * 电台 * * @author Sanron */ public static class Radio { /** * 录制电台 * * @param pageNo 页数 * @param pageSize 每页数量,也是返回数量 * @return */ public static String recChannel(int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.radio.getRecChannel") .append("&page_no=").append(pageNo) .append("&page_size=").append(pageSize); return sb.toString(); } /** * 推荐电台(注意返回的都是乐播节目) * * @param num * @return */ public static String recommendRadioList(int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.radio.getRecommendRadioList") .append("&num=").append(num); return sb.toString(); } /** * 频道歌曲 * * @param channelname 频道名,注意返回的json数据频道有num+1个,但是最后一个是空的 * @return */ public static String channelSong(String channelname, int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.radio.getChannelSong") .append("&channelname=").append(encode(channelname)) .append("&pn=0") .append("&rn=").append(num); return sb.toString(); } } /** * 乐播节目 * 节目相当于一个专辑 * 每一期相当于专辑里的每首歌 * * @author Sanron */ public static class Lebo { /** * 频道 * * @param pageNo 页码(暂时无用) * @param pageSize 每页数量,也是返回数量(暂时无用) * @return */ public static String channelTag(int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.lebo.getChannelTag") .append("&page_no=").append(pageNo) .append("&page_size=0").append(pageSize); return sb.toString(); } /** * 返回频道下的不同节目的几期 * 包含几个节目,每个节目有一期或多期 * 比如返回 节目1第1期,节目1第2期,节目2第1期,节目3第6期 * * @param tagId 频道id * @param num 数量 * @return */ public static String channelSongList(String tagId, int num) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.lebo.channelSongList") .append("&tag_id=").append(tagId) .append("&num=").append(num); return sb.toString(); } /** * 节目信息 * * @param albumid 节目id * @param lastestSongNum 返回最近几期 * @return */ public static String albumInfo(String albumid, int lastestSongNum) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.lebo.albumInfo") .append("&album_id=").append(albumid) .append("&num=").append(lastestSongNum); return sb.toString(); } } /** * 搜索 * * @author Sanron */ public static class Search { /** * 热门关键字 * * @return */ public static String hotWord() { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.search.hot"); return sb.toString(); } /** * 搜索建议 * * @param * @return */ public static String searchSugestion(String query) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.search.catalogSug") .append("&query=").append(encode(query)); return sb.toString(); } /** * 搜歌词 * * @param songname 歌名 * @param artist 艺术家 * @return */ public static String searchLrcPic(String songname, String artist) { StringBuffer sb = new StringBuffer(BASE); String ts = Long.toString(System.currentTimeMillis()); String query = encode(songname) + "$$" + encode(artist); String e = AESTools.encrpty("query=" + songname + "$$" + artist + "&ts=" + ts); sb.append("&method=").append("baidu.ting.search.lrcpic") .append("&query=").append(query) .append("&ts=").append(ts) .append("&type=2") .append("&e=").append(e); return sb.toString(); } /** * 合并搜索结果,用于搜索建议中的歌曲 * * @param query * @return */ public static String searchMerge(String query, int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.search.merge") .append("&query=").append(encode(query)) .append("&page_no=").append(pageNo) .append("&page_size=").append(pageSize) .append("&type=-1&data_source=0"); return sb.toString(); } /** * 搜索伴奏 * * @param query 关键词 * @param pageNo 页码 * @param pageSize 每页数量,也是返回数量 * @return */ public static String searchAccompany(String query, int pageNo, int pageSize) { StringBuffer sb = new StringBuffer(BASE); sb.append("&method=").append("baidu.ting.learn.search") .append("&query=").append(encode(query)) .append("&page_no=").append(pageNo) .append("&page_size=").append(pageSize); return sb.toString(); } } public static String encode(String str) { if (str == null) return ""; try { return URLEncoder.encode(str, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return str; } }