需求与研究:
1.IOS的酷我音乐软件,还是不错滴,可以直接下载APE或是320K的MP3音乐,但是我发现PC上的酷我反而没这个功能,而且其他的音乐软件一般只能下载中低品质的音乐。所以能够从IOS中找到一个方法把它下载的东西导出来还是很有必要的。
2.在手机上下载一些无损音乐后将手机联机到PC,用PP助手或是itools等辅助工具能够打开酷我的文件目录。发现里面有一个music目录,里面的文件名都是纯数字地。我想iphone下载来马上转码肯定没那个速度,就算能转,估计现在也没有更好的格式可以保存音乐,尝试把这些文件直接拉倒PC上改名,恩,果然可以使用。但是问题是你不知道那个文件是什么音乐,那个应该是MP3那个应该是ape?这一个听过来肯定不是办法。
3.网上搜索了一下,真有个哥们捣鼓出一个工具,不过每次使用还要访问一下他的博客,他用vb写的,编译成了一个EXE放在网上供大家下载,估计得到了不少的认可,至少访问量已经上去了。但是他没公布是如何做到的。
4.对于IT宅来说,我猜应该不会很难,那个软件提示一定要把cloud.db文件也复制到pc,我用一文本编辑器打开看看是什么东西。哦,有戏,原来是sqlite数据文件啊。如果不是看到他写cloud.db那么我还是要做些分析工作,比如一个个打开每一个文件之类的,肯定能找到,但是他写了我就容易些,也要致敬一下。
5.打开来看看就非常容易了,这个数据库中有一个MusicResource表,其中存放了歌曲的全部信息,类型、封面地址、试听地址、存放的文件名啥的都有,这就非常easy了,读出来,把Music目录里的文件的文件名改名到数据库里的名称就可以了。
技术:
1.sqlite访问方法。
2.python基本的文件操作,主要是目录列表文件和改文件名,都是比较简单的。
 
实现:
1.用PP助手把cloud.db和music目录复制到硬盘的某个目录。
2.在跟cloud.db平级的目录里编写一个小程序,算上空行和注释一共才32行。源代码如下:
# encoding: utf-8
__author__ = 'jy@cjlu.edu.cn'
import sqlite3
import os
conn=sqlite3.connect("cloud.db")
def GetNewFilename(filename):
cu=conn.cursor()
cu.execute("select artist,title,album,file,format from musicResource where file='%s'"%filename)
r=cu.fetchone()
if r is not None:
artist,title,album,filename,format=r
newfilename= "[%s-%s]-%s.%s"%(artist,album,title,format)
return newfilename.replace("&","").replace(":","").replace("/","")
def ConvertFiles(path): if not os.path.exists(path):
exit()
pl=os.listdir(path)
for file in pl:
#如果不是目录就移动
#计算新文件名
if os.path.isfile(os.path.join(path,file)):
newfilename=GetNewFilename(file)
print os.path.join(path,file),"-->",os.path.join(path,newfilename)
os.rename(os.path.join(path,file),os.path.join(path,newfilename)) if __name__=="__main__": ConvertFiles("D:\projecting\Kuwo\Music")
conn.close()

  

运行效果:
1.KAKA,估计有版权风险,我就不放图片了;
2.速度超级快,一下子就好了,技术上成本接近与0,会python的都能写出来,娱乐一下。

[有料组每日学习分享计划--00087]32行代码帮你导出IOS酷我音乐下载的无损音乐的更多相关文章

  1. 学习资料分享(Java第一行代码视频)<susmote.com>

    17年买了一本书,第一行代码(JAVA),李兴华编写的. 一开始我是按照书本一页一页的啃,一个点一个点的去学,虽然当时学的有些枯燥,但里面的知识点大部分还是弄的懂,只是一次偶然,因为有点质疑书上写的( ...

  2. 安卓开发学习历程1——《第一行代码》coolweather项目setOnItemClickListener函数,Sql语句修改对模拟app程序机影响

    今天,将<第一行代码>最后实战的coolweather项目,认真做了一遍. 今晚,在书中第一阶段开发代码认眞在Android studio敲完,发现setOnItemClickListen ...

  3. 陈云pytorch学习笔记_用50行代码搭建ResNet

    import torch as t import torch.nn as nn import torch.nn.functional as F from torchvision import mode ...

  4. 干货分享:用一百行代码做一个C/C++表白小程序,程序员的浪漫!

    前言:很多时候,当别人听到你是程序员的时候.第一印象就是,格子衫.不浪漫.直男.但是程序员一旦浪漫起来,真的没其他人什么事了.什么纪念日,生日,情人节,礼物怎么送? 做一个浪漫的程序给她,放上你们照片 ...

  5. 【课程学习】课程2:十行代码高效完成深度学习POC

    本文用户记录黄埔学院学习的心得,并补充一些内容. 课程2:十行代码高效完成深度学习POC,主讲人为百度深度学习技术平台部:陈泽裕老师. 因为我是CV方向的,所以内容会往CV方向调整一下,有所筛检. 课 ...

  6. 每日学习与工作计划移至日事清APP

    今天今天开始,每日学习与工作计划移至日事清APP. 博客园依然是我写文字的主战场.日事清APP仅限于做计划.

  7. poptest分享计划以及提供的服务

    poptest分享计划以及提供的服务 POPTEST致力于测试开发工程师的培养,能让学员经过系统培训后从事自动化测试工作,包括功能自动化.性能自动化.接口自动化以及移动端系统的自动化测试等,由于移动端 ...

  8. ML学习分享系列(2)_计算广告小窥[中]

    原作:面包包包包包包 改动:寒小阳 && 龙心尘 时间:2016年2月 出处:http://blog.csdn.net/Breada/article/details/50697030 ...

  9. ML学习分享系列(1)_计算广告小窥[上]

    原作:面包包包包包包 修改:寒小阳 && 龙心尘 时间:2016年1月 出处: http://blog.csdn.net/breada/article/details/50572914 ...

随机推荐

  1. ASP.NET MVC中设置跨域

    ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我 ...

  2. application/force-download 不生效

    不管用什么方式都无法下载txt 设置application/force-download也不生效 很无奈 胡搞瞎搞 最终解决方案:但是没搞明白什么原理 问题解决 @RequestMapping(val ...

  3. item style edit in sharepoint 2013

    标题头添加属性:(如果需要使用ddwrt)xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime&quo ...

  4. Service的使用

    一.Service的适用范围 1.本地服务(Local Service): 应用程序的内部(单个APP) startServcie  stopService  stopSelf  stopSelfRe ...

  5. “全栈2019”Java多线程第十八章:同步代码块双重判断详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. Reservoir Sampling-382. Linked List Random Node

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  7. 转载:不定义JQuery插件,不要说会JQuery

    转载:http://www.cnblogs.com/xcj26/p/3345556.html 一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#") ...

  8. 修正eth0,解决虚拟机桥接问题

    centos 中没有 ifcfg-eth0 配置文件的解决办法 1.也就是说是centos6改用NetworkManager方式管理网络了,可以运行如下命令进行确认: chkconfig --list ...

  9. Python小白学习之路(二十二)—【生成器】

    一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协 ...

  10. rabbitmq系列二 之工作队列

    ---恢复内容开始--- 1.工作队列的简介 在上一篇中,我们已经写了一个从已知队列中发送和获取消息的程序,在这里,我们创建一个工作队列(work queue), 会发送一些耗时的任务给多个工作者.模 ...