pythonでCDのタイトルから曲名を取得する 2
やりたかったことについてはこちらを参照。
加えて今回はID3タグも編集してみる。
# -*- coding: utf-8 -*- #曲名を取得 from bs4 import BeautifulSoup import urllib.request as req import re import os from natsort import natsorted from mutagen.id3 import ID3, TPE1, TALB, TIT2, ID3NoHeaderError #収録曲を取得 def getInfo(cdtitle, name_list = []): list = [] artist_list = [] title_list = [] res = req.urlopen("https://www.oricon.co.jp/search/result.php?types=cd&search_string=" + cdtitle) soup = BeautifulSoup(res, "html.parser") links = soup.find_all("a") i = 1 for link in links: if "products" in link["href"]: res = req.urlopen("https://www.oricon.co.jp/" + link["href"]) page = BeautifulSoup(res, "html.parser") #オリコンニュースの部分を消したい page_title = page.title.text[:-13] page_title = page_title.replace("|", "/") list.append(str(i) + " " + page_title) artist = page.find("a", class_="artist-link") artist_list.append(artist) title = page.find_all("div", class_ = "music-title") title_list.append(title) i += 1 print(list) i = input("一致するものの番号を選択>>") name_list = title_list[int(i) - 1] #収録曲リストの末尾にアーティストの名前を追加 name_list.append(artist_list[int(i) - 1]) return name_list #音楽ファイルの曲情報を編集する def set_filename(): inputtitle = input("CDのタイトルを入力。空白がある場合は半角の「-」を入力>>") name_list = getInfo(inputtitle) list = [] musicname = "" for name in name_list: print(name.text) if name != name_list[-1]: for string in name.text[3:]: musicname += string list.append(musicname) musicname = "" else: list.append(name.text) print("同じフォルダに対してこのプログラムを複数回実行すると、データが消える可能性があります。") dirpath = input("フォルダのパスを入力>>") files = os.listdir(dirpath) files = sorted(files) i = 0 for musicfile in files: try: tags = ID3(dirpath + "/" + musicfile, v2_version=3) #TPE1 -> アーティスト tags.add(TPE1(encding = 3, text = list[-1])) #TALB -> アルバムタイトル inputtitle = inputtitle.replace("-", " ") tags.add(TALB(encoding = 3, text = inputtitle)) #TIT2 -> 曲のタイトル tags.add(TIT2(encoding = 3, text = list[i])) except ID3NoHeaderError: tags = ID3(v2_version=3) tags.save(dirpath + "/" + musicfile) print(tags) os.rename(dirpath + "/" + musicfile, dirpath + "/" + list[i]) i += 1 set_filename()