亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

使用Python下載歌詞并嵌入歌曲文件中的實現代碼

2020-01-04 17:57:41
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了使用Python下載歌詞并嵌入歌曲文件中的實現代碼,需要借助eyed3模塊,需要的朋友可以參考下

使用python掃描本地音樂并下載歌詞

這次這個真的是干貨哦,昨晚弄了半晚上,,,,從8點吃完飯就開始寫,一直到了快12點才弄好,,,新手,傷不起呀。。。。

先簡單的說下吧,百度提供了一個音樂搜索的api,你想百度請求類似于

 

 
  1. http://box.zhangmen.baidu.com/x?op=12&count=1&title=最佳損友$陳奕迅$$ 

的地址,百度會給你返回一段xml,如下所示

 

 
  1. This XML file does not appear to have any style information associated with it. The document tree is shown below. 
  2. <result> 
  3. <count>1</count> 
  4. <url> 
  5. <encode> 
  6. <![CDATA[ 
  7. http://zhangmenshiting.baidu.com/data2/music/12762845/YmRqamdua21fn6NndK6ap5WXcJlrmG1xlJhobWibmGpjk5ZtmWiZcWRjZ5lqbGyelGKWlZtubGljZ5lka2uanWSXY1qin5t1YWBmZW5ocGlhaWdnbGtqbzE$ 
  8. ]]> 
  9. </encode> 
  10. <decode> 
  11. <![CDATA[ 
  12. 12762845.mp3?xcode=e6b69cf593ea22ac9d2b9314e565fc0caf85125f065ce3e0&mid=0.31929107437537 
  13. ]]> 
  14. </decode> 
  15. <type>8</type> 
  16. <lrcid>2829</lrcid> 
  17. <flag>1</flag> 
  18. </url> 
  19. <durl> 
  20. <encode> 
  21. <![CDATA[ 
  22. http://zhangmenshiting2.baidu.com/data2/music/7345405/aGVnaWlmbGaeomZzrZmmnJZvmGqXbHCbl2dsZ5qXaWqSlWpsmmdrb2mXamxpbXCclGNsmW2ba25mYmxtapmZcWqTWaGemnRoX2VkbWdvaGhoZmZramluOA$ 
  23. ]]> 
  24. </encode> 
  25. <decode> 
  26. <![CDATA[ 
  27. 7345405.mp3?xcode=e6b69cf593ea22ac78e1478e78479dc19e8e4650995cb99a&mid=0.31929107437537 
  28. ]]> 
  29. </decode> 
  30. <type>8</type> 
  31. <lrcid>2829</lrcid> 
  32. <flag>1</flag> 
  33. </durl> 
  34. <p2p> 
  35. <hash>f98b6772aa97966550ec80617879becee0233bf4</hash> 
  36. <url> 
  37. <![CDATA[ ]]> 
  38. </url> 
  39. <type>mp3</type> 
  40. <size>3778335</size> 
  41. <bitrate>128</bitrate> 
  42. </p2p> 
  43. </result> 

簡單的說明下,由于我們要做的只是獲取到歌曲的lrc歌詞地址,所以有用的只有2829這個標簽。

而encode和decode里面的拼接起來就是mp3的下載地址,如本例的

 

 
  1. http://zhangmenshiting.baidu.com/data2/music/12762845/YmRqamdua21fn6NndK6ap5WXcJlrmG1xlJhobWibmGpjk5ZtmWiZcWRjZ5lqbGyelGKWlZtubGljZ5lka2uanWSXY1qin5t1YWBmZW5ocGlhaWdnbGtqbzE$12762845.mp3?xcode=e6b69cf593ea22ac9d2b9314e565fc0caf85125f065ce3e0&mid=0.31929107437537 

就是下載地址,不過音質太差,有時間在研究下這個。

繼續說歌詞,注意lrcid標簽里面的2829

http://box.zhangmen.baidu.com/bdlrc/ 這個是百度lrc歌詞存放地址,

然后本例的歌詞地址是http://box.zhangmen.baidu.com/bdlrc/28/2829.lrc

看到了吧,歌詞地址后面的兩個數字的計算方法是在lrcid除以100所獲得的整數,就是第一個數字,然后第二個數字就是lrcid,然后后面加上后綴.lrc就搞定了

獲得lrc地址之后就簡單了,只要請求該地址,然后將獲取到的內容寫入文件就ok了。

好了,大概就是這樣,下面是代碼

 

 
  1. import os 
  2. import os.path 
  3. import re 
  4. import eyed3 
  5. import urllib2 
  6. import urllib 
  7. from urllib import urlencode 
  8. import sys  
  9.  
  10. import os 
  11. reload(sys)  
  12. sys.setdefaultencoding('utf8'
  13.  
  14. music_path = r"E:/music" 
  15. lrc_path = r"e:/lrc" 
  16.  
  17. os.remove('nolrc.txt'
  18. os.remove('lrcxml.txt'
  19.  
  20. the_file = open('lrcxml.txt','a'
  21. nolrc_file = open('nolrc.txt','a'
  22.  
  23. for root,dirs,files in os.walk(music_path): 
  24. for filepath in files: 
  25. the_path = os.path.join(root,filepath) 
  26. if (the_path.find("mp3") != -1): 
  27. print the_path 
  28. the_music = eyed3.load(the_path) 
  29. the_teg = the_music.tag._getAlbum() 
  30. the_artist = the_music.tag._getArtist() 
  31. the_title = the_music.tag._getTitle() 
  32. # print the_teg 
  33. # print the_title 
  34. # print the_artist 
  35. b = the_title.replace(' ','+'
  36. # print b 
  37. a = the_artist.replace(' ','+'
  38. #print urlencode(str(b)) 
  39. if isinstance(a,unicode): 
  40. a = a.encode('utf8'
  41. song_url = "http://box.zhangmen.baidu.com/x?op=12&count=1&title="+b+"$"+a+"$$ " 
  42.  
  43. the_file.write(song_url+'/n'
  44. page = urllib2.urlopen(song_url).read() 
  45. print page 
  46. theid = 0 
  47.  
  48. lrcid = re.compile('<lrcid>(.*?)</lrcid>',re.S).findall(page) 
  49. have_lrc = True 
  50. if lrcid != []: 
  51. theid = lrcid[0] 
  52.  
  53. else
  54. nolrc_file.write(the_title+'/n'
  55. have_lrc = False 
  56. print theid 
  57.  
  58.  
  59. if have_lrc: 
  60. firstid = int(theid)/100 
  61. lrcurl = "http://box.zhangmen.baidu.com/bdlrc/"+str(firstid)+"/"+theid+".lrc" 
  62. print lrcurl 
  63. lrc = urllib2.urlopen(lrcurl).read() 
  64. if(lrc.find('html')== -1): 
  65. lrcfile = open(lrc_path+"//"+the_title+".lrc",'w'
  66. lrcfile.writelines(lrc) 
  67. lrcfile.close() 
  68. else
  69. nolrc_file.write(the_title+'/n'
  70.  
  71. the_file.close() 
  72. nolrc_file.close() 
  73. print "end!" 

有用第一步請求所獲取到底是xml格式的,所以本來想著解析xml來獲取lrcid,但是在實現過程中遇到了各種問題,別的還容易,就在這一塊兒浪費的時間最長,糾結未果之后,只能改用正則表達式來獲取了。。。

使用python將歌詞嵌入歌曲中

以前一直用的是Google Play Music來作為手機的音樂播放器,可是現在谷歌被墻的這么厲害的,從PC上傳到Google Play的音樂在手機上面同步下來的話特麻煩,索性放棄之買了大名鼎鼎的Poweramp播放器,開始使用之后瞬間就被Poweramp強大的功能所吸引住了,不愧是安卓端的音樂播放器的王者!唯美的鎖屏界面,強大的均衡器功能等等。唯一美中不足的就是歌詞.如果要顯示歌詞的話必須安裝第三方軟件,或者是把歌詞嵌入到音樂中。所以昨天下班之后就開始研究,所幸最后終于搞定了,先上下效果圖

使用Python下載歌詞并嵌入歌曲文件中的實現代碼

可以看到,效果還是很不錯的呢。

好了,廢話不多說,下面上程序

首先,必須安裝eyed3模塊,還有,我所有的歌詞都在E:/lrc這個路徑中的

 

 
  1. import threading 
  2. import time 
  3. import datetime 
  4. import re 
  5. import os 
  6. import eyed3 
  7. import sys 
  8. reload(sys) 
  9. sys.setdefaultencoding('utf8'
  10.  
  11.  
  12. def getstr(i): 
  13. if i <10: 
  14. return "0"+str(i) 
  15. else
  16. return str(i) 
  17.  
  18. musicpath=r'I:/music' 
  19.  
  20. lrcpath=r'E:/lrc' 
  21.  
  22.  
  23.  
  24. def deallrc(str): 
  25. mystr=re.sub(r'/[/d/d:/d/d./d/d/]','',str) 
  26. mystr.replace('/n',''
  27. return mystr 
  28.  
  29.  
  30.  
  31. def checklrcfile(path,timespan): 
  32. file=open(path,'r'
  33. mylrcstr='' 
  34. #print timespan 
  35. for line in file.readlines(100): 
  36. #errorlog(line) 
  37. if line.find(timespan)>0: 
  38. return deallrc(line) 
  39. else
  40. continue 
  41. return '' 
  42.  
  43.  
  44. def getlrcstr(lrc): 
  45. mylrcstr='' 
  46. #print lrc 
  47. for i in range(00,05): 
  48. for j in range(00,59): 
  49. for k in range(00,99): 
  50. timespan=getstr(i)+":"+getstr(j)+"."+getstr(k) 
  51. mylrcstr+=checklrcfile(lrc, timespan)  
  52. #print timespan 
  53. return mylrcstr 
  54.  
  55.  
  56. def getlrc(musicname): 
  57. musicname=u''.join(musicname) 
  58. musicname=musicname.encode('gb2312'
  59. for root,dirs,files in os.walk(lrcpath): 
  60. for filepath in files: 
  61. the_path = os.path.join(root,filepath) 
  62. if (the_path.find(musicname) != -1): 
  63. print the_path 
  64. return the_path 
  65.  
  66. def errorlog(path): 
  67. file=open(r'e:/nolrc.txt','a'
  68. if path is None: 
  69. path='' 
  70. path=path+'/n' 
  71. file.write(path) 
  72. file.close() 
  73.  
  74. def writetag(themusic,lrcstr): 
  75. music=eyed3.load(themusic) 
  76. lrcstr=lrcstr.decode('utf8'
  77. lrcstr=u''.join(lrcstr) 
  78. #lrcstr=unicode(lrcstr) 
  79. music.tag.lyrics.set(lrcstr) 
  80. music.tag.save() 
  81.  
  82.  
  83.  
  84.  
  85. def dealmusic(path): 
  86. print path 
  87. the_music = eyed3.load(path) 
  88. the_teg = the_music.tag._getAlbum() 
  89. the_artist = the_music.tag._getArtist() 
  90. the_title = the_music.tag._getTitle() 
  91. #print the_title 
  92.  
  93. try
  94. lrc=getlrc(the_title) 
  95. lrcstr=getlrcstr(lrc) 
  96. writetag(path, lrcstr)  
  97. except: 
  98. errorlog(path) 
  99.  
  100.  
  101.  
  102. class writelrc(threading.Thread): 
  103. def __init__(self,the_path): 
  104. threading.Thread.__init__(self) 
  105. self.thepath=the_path 
  106. def run(self): 
  107. dealmusic(self.thepath) 
  108.  
  109.  
  110. if __name__=='__main__'
  111. count=0 
  112. threads=[] 
  113. for root,dirs,files in os.walk(musicpath): 
  114. for filepath in files: 
  115. the_path = os.path.join(root,filepath) 
  116. if (the_path.find("mp3") != -1): 
  117. count+=1 
  118. threads.append(writelrc(the_path)) 
  119. if count%10==0: 
  120. for t in threads: 
  121. t.start() 
  122. for t in threads: 
  123. t.join() 
  124. threads=[]  

好了,大概就是這樣,大家有什么問題可以直接提出來,我會盡快回復的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美怡红院视频一区二区三区| 精品国产乱码久久久久久天美| 成人乱色短篇合集| 国产69精品久久久久9999| 欧美黑人一级爽快片淫片高清| 曰本色欧美视频在线| 亚洲国产又黄又爽女人高潮的| 欧美精品videossex性护士| 亚洲精品xxx| 欧美日韩国产在线| 国产一区在线播放| 激情久久av一区av二区av三区| 色婷婷久久一区二区| 亚洲韩国日本中文字幕| 国产精品一区二区三| 欧美激情亚洲精品| www.xxxx精品| 久久久久久久久国产精品| 国产亚洲综合久久| 国产视频久久久久| 热re99久久精品国产66热| 国产激情999| 美女扒开尿口让男人操亚洲视频网站| 亚洲成年人在线播放| 欧美激情亚洲精品| 国产不卡av在线免费观看| 国产精品日日摸夜夜添夜夜av| 亚洲精品国精品久久99热| 亚洲精品视频播放| 国产午夜精品麻豆| 国内精品久久久久影院优| xxxxx91麻豆| 一本色道久久综合狠狠躁篇的优点| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩爱爱视频| 久久久久久久久久久91| 92裸体在线视频网站| 欧美亚洲国产成人精品| 国产91色在线|免| 亚洲另类欧美自拍| …久久精品99久久香蕉国产| 亚洲欧美国产精品专区久久| 中文字幕亚洲一区| 美女福利视频一区| 亚洲视屏在线播放| 国产精品福利在线观看网址| 91精品国产九九九久久久亚洲| 国产极品jizzhd欧美| 亚洲国产精品久久| 国产精品h在线观看| 亚洲综合视频1区| 国产欧美一区二区| 亚洲色图13p| 欧美日韩人人澡狠狠躁视频| 中文字幕精品国产| 欧美猛男性生活免费| 日韩国产欧美精品一区二区三区| 国产成人精品免高潮在线观看| 97国产精品视频人人做人人爱| 91av在线精品| 精品视频在线播放色网色视频| 国产91ⅴ在线精品免费观看| 国产欧美日韩中文字幕在线| 在线成人激情黄色| 亚洲精品第一页| 亚洲最大激情中文字幕| 亚洲视频一区二区三区| 中文字幕在线成人| 色偷偷噜噜噜亚洲男人的天堂| www.日韩av.com| 色综合久久精品亚洲国产| 亚洲欧洲第一视频| 日韩精品中文在线观看| 亚洲色在线视频| 亚洲欧美视频在线| 欧洲成人免费aa| 97婷婷大伊香蕉精品视频| 久久精品中文字幕一区| 91精品国产高清自在线看超| 欧美日韩亚洲91| 亚洲精品视频免费在线观看| 欧美一级免费视频| 精品久久香蕉国产线看观看gif| 亚洲欧洲日韩国产| 亚洲精品在线看| 麻豆成人在线看| 性欧美激情精品| 亚洲精选在线观看| 欧美激情精品在线| 成人免费视频97| 俺去啦;欧美日韩| 国产精品视频一区二区三区四| 这里只有精品视频| 日韩大片免费观看视频播放| 欧美亚洲另类视频| 欧美日韩国产中文精品字幕自在自线| 青青久久av北条麻妃海外网| 国产精品视频在线观看| 91av在线免费观看| 成人精品一区二区三区| 97在线精品视频| 国产一区二区激情| 亚洲一区二区三区在线视频| 最新日韩中文字幕| 欧美色videos| 中文字幕亚洲欧美在线| 久久好看免费视频| 亚洲第一精品夜夜躁人人爽| 97视频在线观看免费| 久久男人资源视频| 亚洲美女在线观看| 国产精品视频男人的天堂| 亚洲电影av在线| www.99久久热国产日韩欧美.com| 最近2019年好看中文字幕视频| 国产精品国产自产拍高清av水多| 91精品国产91久久久久久不卡| 日韩成人中文字幕在线观看| 国产综合久久久久| 日韩av色综合| 91亚洲精品一区二区| 国产精品∨欧美精品v日韩精品| 欧美电影免费看| 国产精品99久久久久久白浆小说| 国产精品视频一| 久久久久久久久综合| 午夜精品一区二区三区在线视| 最好看的2019的中文字幕视频| 97精品在线视频| 国产91精品久久久久久| 亚洲视频在线免费观看| 欧美电影在线观看高清| 国产视频丨精品|在线观看| 久久久精品中文字幕| 久久久免费精品视频| 久久精品国产精品| 97视频国产在线| 亚洲最大av在线| 狠狠做深爱婷婷久久综合一区| 国产亚洲精品日韩| 亚洲最大av网| 国产精品最新在线观看| 国产一区二区黑人欧美xxxx| 91九色国产视频| 国产裸体写真av一区二区| 亚洲欧美日韩综合| 国产成人jvid在线播放| 欧洲成人免费aa| 国产福利视频一区| 久久精品国产欧美激情| 日韩成人在线播放| 国产脚交av在线一区二区| 乱亲女秽乱长久久久| 欧美激情在线观看视频| 欧美在线视频一区二区| 亚洲精品日韩欧美| 一色桃子一区二区| 亚洲人成电影在线播放| 日韩美女免费线视频| 欧美日韩aaaa| 国产精品福利在线观看网址| 欧美久久久精品| 色综合久久88色综合天天看泰| 亚洲午夜未满十八勿入免费观看全集|