网易云歌单转换音乐自己的歌单删掉了还能接收到歌单的信息吗

网易云音乐歌单里面的歌又神秘消失 - V2EX
网易云音乐歌单里面的歌又神秘消失
266 天前 &zjyd
每次听到喜欢的歌都会点下?,放在默认的“我喜欢的音乐”歌单里面,就这么慢慢了攒了一百多首。5 月 5 号的时候突然就消失的剩下几首了,联系云音乐小秘书几天没人回,检查登录记录没什么问题,没辙,就凭回忆再凑上别的歌,凑凑也又几十首,不过英文歌多半没找回。然鹅,就在一小时前,打开网易云音乐,又 TM 剩下几首,我这也是心累,真有写了两年日记,趁我我不在偷偷的撕了,然后给我一摞新本子的感觉。
3860 次点击所在节点 &
weakish265 天前@ 是我的问题。出错信息`FileNotFoundError`显示我漏掉了文件不存在的情形。最新的 commit 修复了这个问题。pull 后把 `~/.fm163`删掉重新跑应该可以正常运行。
weakish265 天前@ 网易云音乐只支持从别人那里导歌单,并不支持将自己的歌单导入导出。
需要根据导出、保存的单曲 id ( songs_id.json ),通过单曲添加的方式变相「导入」。
这里有网易云音乐添加单曲到歌单的 api,不知道好不好用:
这部分代码没有写,涉及到 api 接口请求频率的问题,还要伪装自己的身份的问题。
目前 fm163 并不涉及账户,因此最坏的情况也就是网易把 ip 封掉,
如果要写,必须涉及账号,万一非法请求被网易检测到,可能会封账号,
要把风险降到最低,需要写滴水不漏的代码,包括异常情况下要和网易云音乐的客户端表现一样。
关键是网易云音乐的 api 还老是变来变去。。。
secondwtq265 天前我记得网易云的歌要是直接下架了(搜索都搜不到,不是灰掉),歌单里面的也会悲剧
F0nebula264 天前@ #5
报错
&&& python3.6 -VV
Python 3.6.1 (default, Mar 22 :05)
[GCC 6.3.0 ]
8660 ~/Downloads/fm163
&&& uname -srvpio
Linux 4.10.0-28-generic #32-Ubuntu SMP Fri Jun 30 05:32:18 UTC
x86_64 GNU/Linux
8661 ~/Downloads/fm163
&&& python3.6 fm163.py -D
Error encountered to access file /tmp/tmp7mzj5bzu
errno 18: Invalid cross-device link.
Traceback (most recent call last):
File &fm163.py&, line 365, in main
download(arguments.playlist_id, arguments.D, arguments.H)
File &fm163.py&, line 235, in download
save_meta(meta)
File &fm163.py&, line 172, in save_meta
json_dump(record, meta_db())
File &fm163.py&, line 108, in json_dump
serialize(thing, path, &w&, serialize_with_json)
File &fm163.py&, line 97, in serialize
os.replace(temporary_file_path, path)
OSError: [Errno 18] Invalid cross-device link: '/tmp/tmp7mzj5bzu' -& '/home/f_nebula/.fm163/meta.json'
然后
--- /home/f_nebula/Downloads/fm163/fm163.py~
+++ /home/f_nebula/Downloads/fm163/fm163.py
@@ -78,7 +78,7 @@
# temporary_file_handler: int = handler
# temporary_file_path: str = path
# temporary_file_handler, temporary_file_path = tempfile.mkstemp(dir=Path.cwd(), text=True)
-
handler, p = tempfile.mkstemp(text=True)
+
handler, p = tempfile.mkstemp(dir=&.&, text=True)
temporary_file_handler: int = handler
temporary_file_path: str = p
codefalling264 天前我的也消失了。。。
zjyd264 天前@ 我的已经通过云客服找回了,不过考虑到消失过两次,现在开了个会员,把歌曲全部下载到本地了。
asdwddd263 天前嘿嘿 有人还用着网易的记帐软件...
weakish250 天前@ Fixed in [a577129]. Thanks.
[a577129]:
第 2 页 / 共 2 页 &
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到
上打开本讨论主题的完整版本。
是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
is a community of developers, designers and creative people.网易云音乐自己的创建的歌单被删除后可以找回吗? - 知乎11被浏览<strong class="NumberBoard-itemValue" title="3分享邀请回答import sqlite3
import json
import codecs
import time
cx = sqlite3.connect(os.path.expanduser('~')+"/AppData/Local/Netease/CloudMusic/Library/webdb.dat")
cx.row_factory = sqlite3.Row
cu=cx.cursor()
cu.execute("select * from web_playlist")
file = codecs.open("playlist.txt", "w", "utf-8")
for item in cu.fetchall():
obj = json.loads(item["playlist"])
itemTime=time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(int(obj["createTime"]/1000)))
file.writelines("pid: %11d
创建时间: %s 歌单名: %s\r\n" %(item["pid"], itemTime, obj["name"]))
这里是是直接复制的的代码0x02.方法二:使用可视化工具直接浏览sqlite数据库查看pid@李彤 推荐的火狐浏览器插件SQLiteManager很方便直观,可以通过此插件直接查看webdb.dat去找之前的歌单的pid。安装SQLiteManager插件并重启了浏览器了之后,工具---SQLiteManager---Database---Connect Database 找到对应的文件,然后在左侧区域选中Tables---web_playlist,右侧区域选中 Browse & Search找找就可以了。0x03.方法三:直接通过网页访问这里需要把以下代码另存为一个以html为后缀的文件,比如pid.html,然后在浏览器中打开,点击"浏览"按钮选中webdb.dat文件(网页中有对此文件具体位置的提示,本回答前面也提到过这个文件的位置),然后点击"获取歌单"按钮即可获取之前收藏过以及创建过的歌单的pid,可以直接点击链接访问对应歌单。(以下代码为原创)&!DOCTYPE html&
&meta charset="utf-8"&
&title&数据库文件&/title&
&label&此处输入用户名可得到数据库文件所在目录&/label&&input type="" name="" placeholder="用户名" id=username&&br&
&label id="path" style="height: 24"&&/label&&br&&hr&
&input type="file" id="filelist" name="" onchange="startread()"&
&input type="button" name="" value="获取歌单" onclick="output()"&
&script type="text/javascript"&
username.onkeyup=username.onchange=()=&path.innerText="C:\\Users\\"+username.value+"\\AppData\\Local\\Netease\\CloudMusic\\Library";
var reader=new FileReader();
reader.onloadend=()=&db=new Database(reader.result);
function startread(){
reader.readAsArrayBuffer(filelist.files[0]);
class Database{
constructor(buf){
this.view=new DataView(buf,0,buf.byteLength);
this.ui8=new Uint8Array(buf,0,buf.byteLength);
this.pageSize=this.view.getUint16(16,false);
this.pageSum=this.view.getUint32(28,false);
this.root=new Page(this,1);
this.pages=[];
getPage(number){
if(this.pages[number]==undefined)this.pages[number]=new Page(this,number);
return this.pages[number];
class Page{
constructor(db,number){
//5 table interior, 13 table leaf,2 index intesrior,10 index leaf
let _base=(number-1)*db.pageS
let start=_base,_//页头(对page 1 文件头在start左边)
if(number==1)start=100;
this.pageId=
if(db.view==undefined)console.log(db);
//console.log(start,_base);
this.type=db.view.getUint8(start);
this.cellSum=db.view.getUint16(start+3,false);
this.cells=[];
if(this.type==5)_pstart=12;
else _pstart=8;
for(var i=0;i&this.cellSi++){
let relative=db.view.getUint16(start+_pstart+2*i,false);
this.cells[i]=new Cell(db,this.type,_base+relative,relative);
if(this.pages!=undefined&&this.pages.length&0)
this.pages=[];
if(this.type==5)for(let j=0;j&this.cellSj++)this.pages[j]=new Page(this.db,this.cells[j].pageId);
queryCell(cond){// find the table leaf's cell
let stack=[],result=[];
stack.push(this);
let q=stack.pop();
if(q.type==5){
for(let i=0;i&q.pages.i++)stack.push(q.pages[i]);
}else for(let i=0;i&q.cells.i++)if(testCond(q.cells[i],cond))result.push(q.cells[i]);
}while(stack.length&0);
function testCond(cell,cond){
//console.log("test",cell,cond);
if(cond==null)
for(var i in cond)if(cell.record[i].data!=cond[i])
class Cell{
constructor(db,type,absolute,relative){
if(type==5){
this.pageId=db.view.getUint32(absolute,false);
this.key=varint(db.ui8,absolute+4)[0];
}else if(type==13){
this.absolute=
this.relative=
let start=absolute,
[this.payloadLength,count]=varint(db.ui8,start);
[this.key,count]=varint(db.ui8,start);
let U=db.pageS
let X=U-35;
let P=this.payloadL
if(P&=X)this.payload=db.buf.slice(start,start+this.payloadLength);
let M=Math.floor(((U-12)*32/255))-23;
let K=M+(P-M)%(U-4);
if(K&=X)size=K;
else size=M;
this.overflowPageId=db.view.getUint32(start+size,false);
let bufs=[db.buf.slice(start,start+size)];
let overflowId=this.overflowPageId;
let remain=P-
let times=Math.floor(remain/(U-4));
let reminder=remain-times*(U-4);
for(let i=0;i&i++){
from=(overflowId-1)*U+4;
to=from+U-4;
bufs.push(db.buf.slice(from,to));
overflowId=db.view.getUint32(from-4,false);
from=(overflowId-1)*U+4;
if(reminder&0)bufs.push(db.buf.slice(from,to));
this.payload=concat(...bufs);
this.record=decodeRecord(this.payload);
function decodeRecord(payload){//ArrayBuffer,a row
let ui8=new Uint8Array(payload,0,payload.byteLength);
let result=[];
let hdoff=0,coloff=0;
let [byteSum,count]=varint(ui8,hdoff);
coloff=byteS//正文偏移
hdoff+=//头部偏移
while(hdoff&byteSum){
[len,count]=varint(ui8,hdoff);
let col=new Column(len,payload,coloff);
result.push(col);
coloff+=col.
class Column{
constructor(code,buf=null,offset=-1){
if(code==10||code==11||code&0)
this.type=
this.length=this.calcode(code);
if(this.length&0&&buf!=null&&offset&=0)this.rawdata=buf.slice(offset,offset+this.length);
if(this.rawdata!=null)var view=new DataView(this.rawdata,0,this.length);
switch(code){
case 0:this.data=
case 1:this.data=(new Uint8Array(this.rawdata,0,1))[0];
case 2:this.data=view.getUint16(0,false);
case 4:this.data=view.getUint32(0,false);
case 6:this.data=view.getUint64(0,false);
case 7:this.data=view.getFloat64(0,false);
case 8:this.data=0;
case 9:this.data=1;
case 3:this.data=(view.getUint16(0,false)&&8)+(view.getUint8(2,false));
case 5:this.data=(view.getUint32(0,false)&&16)+(view.getUint16(4,false));
if(code&11){
if(code%2==1)this.data=utf8(this.rawdata);
else this.data=this.
calcode(code){
switch(code){
case 0:;case 8:;case 9:return 0;
case 1:;case 2:;case 3:;case 4:
case 5:return 6;
case 6:;case 7:return 8;
default:return Math.floor((code-12)/2);
function output(){
let p=db.getPage(1);
if(p===false)alert("no page");
let cell=p.queryCell({"0":"table","1":"web_playlist"});
if(cell.length&1)
cell=cell[0];
let page=db.getPage(cell.record[3].data);
let dataCells=page.queryCell(null);
console.log(dataCells);
let result=[];
for(let i =0;i&dataCells.i++)result.push({data:dataCells[i].record[0].data,obj:JSON.parse(dataCells[i].record[1].data)});
makeList(result);
function _p_c_r_d(page,i,j,k){return page.pages[i].cells[j].record[k].}
function makeList(list){
let div=document.createElement("div");
for(let i=0;i&list.i++){
let li=document.createElement("li");
let a=document.createElement("a");
a.href="http://music.163.com/#/playlist?id="+list[i].
a.target="blank";
a.innerText=list[i].data+" "+list[i].obj['name'];
li.appendChild(a);
div.appendChild(li);
document.body.appendChild(div);
&script type="text/javascript"&
function varint(ui8,off){//Uint8Array,offset
let num=0,byte,oldoff=
byte=ui8[off++];
num=(num&&7)+(byte&0x7f);
}while(byte&0x80);
return [num,off-oldoff];
function utf8(ui8){//ArrayBuffer or Uint8Array
if( !(ui8 instanceof Uint8Array))ui8=new Uint8Array(ui8,0,ui8.byteLength);
let codePoints=[];
let codePoint=0,offset=0,byte=0;
let len=ui8.byteL
while(offset&len){
//n1 0 -& n bytes
byte =ui8[offset];
let byteNum=utf8truebits(byte);
if(byteNum&1)codePoint=((byte&&(byteNum+1))&0xff)&&(byteNum+1);
else codePoint=
for(let i=1;i&byteNi++)codePoint=(codePoint&&6)+(0x3f&ui8[offset+i]);
codePoints.push(codePoint);
codePoint=0;
offset+=byteN
try{str= String.fromCodePoint.apply(null,codePoints);}
catch(e){return "";}
function utf8truebits(byte){
if((byte&0xfc)==0xfc)return 6;
if((byte&0xf4)==0xf4)return 5;
if((byte&0xf0)==0xf0)return 4;
if((byte&0xe0)==0xe0)return 3;
if((byte&0xc0)==0xc0)return 2;
if((byte&0x80)==0x00)return 1;
else return 1;
function concat(...bufs){
let num=0;
for(let i=0;i&bufs.i++)num+=bufs[i].byteL
let buf=new ArrayBuffer(num);
let start=0;
for(let i=0;i&bufs.i++){
let ui8new=new Uint8Array(buf,0,buf.byteLength);
let ui8old=new Uint8Array(bufs[i],0,bufs[i].byteLength);
for(let j=0;j&bufs[i].byteLj++)ui8new[start++]=ui8old[j];
0x04.原理网易云音乐没有真正删除用户的歌单,只要还能找到歌单playlist_id,也就是pid,就能从网页上找到它。将里面的歌曲添加到播放列表新建一个歌单收容即可。歌单的页面为 比如现在我们只要找到这些pid就可以了。C:/用户/【当前用户名】/AppData/Local/Netease/CloudMusic/Library目录下有一个webdb.dat文件,这是一个sqlite3数据库文件,其中的web_playlist表有两个字段pid和playlist字段。pid字段为所有你创建过的和收藏的歌单的playlist_id,而playlist字段为对应歌单的一些信息,以json字符串的形式保存。1518 条评论分享收藏感谢收起网易云音乐怎么删除收藏的歌单 网易云音乐删除收藏的歌单方法_电脑百事网
手机扫描二维码
网易云音乐怎么删除收藏的歌单 网易云音乐删除收藏的歌单方法
网易云音乐是一款广受好评的音乐APP,你不仅可以在上面下载高质量的音乐,还能接收到针对你的音乐喜好而推荐的歌单。不过收藏的歌单里的歌听久了也就疲劳了,这时想删除收藏的歌单怎么办呢?如果你还不知道删除收藏的歌单,可以按照下面的操作试试。
1.打开网易云音乐APP,点击顶部【我的】,如下图
2.找到收藏的歌单,点击歌单名后的【更多】标志,如下图
3.选择【删除】,如下图
4.确认删除的话点击【确定】,如下图
5.歌单删除成功。
加载更多内容
关注智能手机、电脑、笔记本、科技资讯, 致力于提供有价值的IT资讯。网易云音乐肿么删除歌单啊啊啊
在我的音乐那块儿,自己创的歌单可以删(联网状态下)在歌单右侧,收藏的歌单只能取消收藏吧。
留言左面,有加号的文件夹图标,需要先登录
我也不想弄了。它没有直接删除的。
手机客户端暂时没有那个功能,只有点电脑端才可以
注意是不是把歌单和播放列表搞混了,我有一次在电脑上把“我喜欢的音乐”歌单从500多删到300多,结果手机上一点变化没有……然后才发现我删的是在播放“我喜欢的音乐”歌单时的播放列表里面的歌……
整体简介:删除自己的评论很简单,三步搞定所需原料、工具:已装网云app手机一部,网络连接正常方法步骤:打开app,找到自己曾经评论的那首歌,找到自己的评论,点击,在弹出的白色四个选项中选择“删除评论”即可。注意事项:此方法只适用于手机版,电脑暂无此功能。
超级简单的,你到设置里的绑定帐号界面,在你之前绑定过的账号右侧,
工具:网易云账号1、首先我们打开网易云音乐客户端并登录自己的账号;2、接着用鼠标左键点击我们头像旁边的“倒三角”按钮,然后在弹出的选项中打开“绑定社交账号”;3、打开绑定社交账号界面后,在这里我们就可以绑定或者解绑各种第三方平台账号了;4、我们想要解绑微博,那就点击新浪微博右边的“已绑定”按钮,然后在弹出的询问框中点击确定就可以了。
时间洪流里的独奏
和搜索音乐在同一个位置,打出你找的id,默认搜索是单曲旁边是歌手,你把那一栏往右边拉,最后面用户那一栏就是了
人的综合分
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将会做出处理感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动?

我要回帖

更多关于 网易云找回删掉的歌单 的文章

 

随机推荐