めうの雑記

備忘録

pythonでCDのタイトルから曲名を取得する 2

やりたかったことについてはこちらを参照。

umesann.hatenablog.com


加えて今回は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()