content: 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;
      }
  
  }
  