欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    在线音乐API的研究 .docx

    • 资源ID:3380821       资源大小:39.63KB        全文页数:11页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    在线音乐API的研究 .docx

    在线音乐API的研究 在线音乐API的研究 (Part 2.1) 最近,在优化一个自己写的音乐播放器。主要目的是回顾、归纳,并希望能够写出一个属于自己的common lib。今天,主要是关于在线音乐API的一些分析结果。此次,主要分析的是歌词、专辑部分。在线搜索音乐、热门音乐及mp3的下载等,会在PART 2.2进行补充。 原始API来源于网络资料,部分是后面使用个人补充的。主要包括百度API、腾讯API及歌词迷API,其中只有歌词迷的API是官方正式发布的。三个API都有着各自的优点、缺点,如下: (1) 百度API,请求方式稳定,速度快,资源最多,获取歌词比较准确;但是数据结构相对繁杂些,每行的歌词长度差异比较大。 (2) 腾讯API,请求方式相对稳定,速度快,资源较多,准确度高,每行的歌词长度相当;但JSON(Xml相对正常)数据结构并不完全标准,解析麻烦,专辑图片封面(约50KB|500 x 500 像素)较大。 (3)歌词迷API,有官方正式API,使用简单,专辑封面相对小些(约10KB|185 x 160 像素);遗憾的是资源相对少,尤其在最新的资源方面,有点慢。 提醒:以上全是个人开发的总结,并没有完整体系性的验证。 如专辑封面大小问题,视乎个人开发需要而定,如果需要大图片,腾讯的保真度高,如果需要小图片,无疑歌词迷更好些。 本人在歌词方面使用的腾讯API,专辑封面使用的是歌词迷API。 整个实现思路比较明确,大体上的类图设计如下: 直接使用LyricLoader的loadLyric方法进行歌词下载,loadLyric方法封装了具体的处理逻辑,具体实现下载,由子类实现IDownload<Lyric>接口。摘取部分代码: /* * 歌词助手 * * author Osmondy * */ publicabstractclassLyricLoader implements IDownload<Lyric> publicLyricLoader(String name) /* * 获取网络请求歌词地址 * * param music * return */ publicabstract String getServerLyricUrl(Music music); /* * 返回本地存储歌词的路径 * * param music * return */ protected String getLocalLyricPath(String songname, String singername) /* * 返回歌词, Step1: 本地歌词目录加载; Step2: 网络下载. * * param music * return */ public Lyric loadLyric(Music music) if (TextUtils.isEmpty(music.getArtist) | TextUtils.isEmpty(music.getTitle) Log.W(TAG, "Empty aritst or title, can't find lyric."); returnnull; Lyric lyric = null; String localPath = getLocalLyricPath(music.getTitle, music.getArtist); File file = newFile(localPath); if (file.exists) / 本地存在歌词文件, 直接加载此歌词. Log.D(TAG, "Loading lyric from local path."); try lyric = loadLocalLyric(localPath); if (lyric != null) lyric.setSongname(music.getTitle); lyric.setSingername(music.getArtist); Log.I(TAG, "Load local lyric finished. Lyric: " + lyric); catch (IOException e) if (e instanceofFileNotFoundException) Log.W(TAG, "Lyric not found."); else e.printStackTrace; return lyric; String requestUrl = getServerLyricUrl(music); if (!TextUtils.isEmpty(requestUrl) Log.D(TAG, "- Download lyric start -"); try lyric = download(requestUrl, localPath); catch (HttpRequestException e) e.printStackTrace; Log.D(TAG, "- Download lyric end -"); return lyric; Log.W(TAG, "Not found a correct server lyric path."); returnnull; /* * 保存歌曲文件, 默认保存至link AppConfig#DIRECTORY_LYRIC, 子类可自行重写保存至其它路径. 保存时, * 先保存成*.lrc.tmp, 下载及保存成功后, 再重命名为*.lrc. 防止异常或停止下载歌词, 下次无法再次下载. * * param is * param music * return */ protectedbooleansaveLyric(InputStreamis, String savePath) /* * 返回指定地址的歌词文件 * * param path * return * throws IOException */ public Lyric loadLocalLyric(String path) throws IOException 抽象类LyricLoader提供了对歌词保存、加载的默认处理方式,子类可以自行重写saveLyric、loadLocalLyric定义自己的处理方式。子类的实现以百度API为例,它使用的是父类LyricLoader提供的默认实现。 /* * 歌词来源于Baidu * * author Osmondy * */ publicclassBaiduLyricHelper extends LyricLoader privatestatic final String TAG = "BaiduLyricHelper" /* * 歌曲信息请求地址 */ protectedstatic final String SONGINFO_BASE_URL = " /* * 歌词文件请求地址 */ protectedstatic final String LYRIC_BASE_URL = " publicBaiduLyricHelper super("BaiDu"); Override public Lyric download(String requestUrl, String savePath) throws HttpRequestException Override public String getServerLyricUrl(Music music) 原始API如下: (1) 百度API 歌曲信息请求地址: 歌词信息请求地址: /* * 返回请求歌词的地址, 通过 SongInfo生成最终可请求到歌词文件的地址. </br> * * paramsongInfo * return */ protected String getServerLyricUrlBySongInfo(SongInfosongInfo) intlrcid = songInfo.getLrcid; int postfix = lrcid / 100; StringBuffersb = newStringBuffer; sb.append(LYRIC_BASE_URL); sb.append("/"); sb.append(postfix); sb.append("/"); sb.append(lrcid); sb.append(".lrc"); returnsb.toString; Override public String getServerLyricUrl(Music music) if (TextUtils.isEmpty(music.getTitle) | TextUtils.isEmpty(music.getArtist) returnnull; /protected static final String SONGINFO_BASE_URL = " Log.D(TAG, "Songname: " + music.getTitle + ", Singername: " + music.getArtist); StringBuffersb = newStringBuffer; try sb.append(SONGINFO_BASE_URL); sb.append("?"); sb.append("op=12"); sb.append("&"); sb.append("count=1"); sb.append("&"); sb.append("title="); sb.append(URLEncoder.encode(music.getTitle, "utf-8"); sb.append("$"); sb.append(URLEncoder.encode(music.getArtist, "utf-8"); sb.append("$"); catch (UnsupportedEncodingException e) e.printStackTrace; returnsb.toString; (2) 腾讯API 编码并非是UTF-8,而是GBK(gb2312)。 歌曲信息请求地址: 歌词请求地址: 专辑封面请求地址: /* * 返回请求歌词的地址, 通过 SongInfo生成最终可请求到歌词文件的地址. </br> * 请求地址格式: * * paramsongInfo * return */ protected String getServerLyricUrlBySongInfo(SongInfosongInfo) String id = songInfo.getId; if (!StringUtils.isNumeric(id) returnnull; int postfix = Integer.parseInt(id) % 100; StringBuffersb = newStringBuffer; sb.append(LYRIC_BASE_URL); sb.append("/"); sb.append(postfix); sb.append("/"); sb.append(id); sb.append(".xml"); returnsb.toString; /* * 返回请求歌曲信息的地址. * 请求地址格式: */ Override public String getServerLyricUrl(Music music) if (TextUtils.isEmpty(music.getTitle) | TextUtils.isEmpty(music.getArtist) returnnull; Log.D(TAG, "Songname: " + music.getTitle + ", Singername: " + music.getArtist); StringBuffersb = newStringBuffer; try sb.append(SONGINFO_BASE_URL); sb.append("?"); sb.append("name=" + URLEncoder.encode(music.getTitle, "gbk"); sb.append("&"); sb.append("singer=" + URLEncoder.encode(music.getArtist, "gbk"); sb.append("&"); sb.append("from=qqplayer"); catch (UnsupportedEncodingException e) e.printStackTrace; returnsb.toString; (3)歌词迷API 直接提供官方地址:http:/api.geci.me/en/latest/ 歌词请求地址:http:/geci.me/api/lyric/:歌曲名/:歌手名 专辑封面请求地址:http:/geci.me/api/cover/:专辑ID Override public String getServerLyricUrl(Music music) if (TextUtils.isEmpty(music.getTitle) | TextUtils.isEmpty(music.getArtist) returnnull; Log.D(TAG, "Songname: " + music.getTitle + ", Singername: " + music.getArtist); StringBuffersb = newStringBuffer; try sb.append(LYRIC_BASE_PATH); sb.append("/"); sb.append(URLEncoder.encode(music.getTitle, "utf-8"); sb.append("/"); sb.append(URLEncoder.encode(music.getArtist, "utf-8"); catch (UnsupportedEncodingException e) e.printStackTrace; returnsb.toString; /* * 返回歌曲专辑信息请求地址 * * paramalbumId * return */ public String getServerAlbumUrl(String albumId) return ALBUM_BASE_PATH + "/" + albumId;

    注意事项

    本文(在线音乐API的研究 .docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开