
Interessante! Ora però sembra abbiano sistemato!
import sys
import win32com.client
import httplib
import urllib
import xml.dom.minidom
dic = dict()
def artistGetTopOfTags(artista):
artist_url = u"http://ws.audioscrobbler.com/2.0/?method=artist.gettoptags&artist=%s&api_key=b25b959554ed76058ac220b7b2e0a026"
url = artist_url % urllib.quote(artista.encode('utf8'))
dom=xml.dom.minidom.parse(urllib.urlopen(url))
genre=""
for tag in dom.getElementsByTagName('tag'):
name = ""
count = ""
for child in tag.childNodes:
if child.nodeName == "name":
name = child.firstChild.nodeValue
if child.nodeName == "count":
count = child.firstChild.nodeValue
if count=="100":
genre = name
return genre.title()
def genere(artista):
if not artista in dic:
dic[artista]=artistGetTopOfTags(artista)
print artista
return dic[artista]
def main(*args):
itunes = win32com.client.Dispatch("iTunes.Application")
mainLibrary = itunes.LibraryPlaylist
tracks = mainLibrary.Tracks
numTracks = tracks.Count
n = 1;
while n <= numTracks:
currTrack = tracks.Item(n)
if genere(currTrack.Artist) != "":
try:
currTrack.Genre = genere(currTrack.Artist)
except:
print "eccezione!"
n+=1
if __name__ == '__main__':
sys.exit(main(*sys.argv))
va bene, le eccezioni dovranno essere gestite meglio, e va bene, il genere musicale non è sempre corretto. Però i portali Web che mettono a disposizione delle funzioni tramite Web Services sono sempre più numerosi (es. Google, Yahoo Weather, etc...) e mi pareva interessante porre le basi per iniziare ad utilizzarli. Sembra che il metodo più pythoniano di parserizzare un file XML consiste nell'utilizzare la libreria ElemenTree, e non la libreria DOM standard... bene vedremo di approfondire anche questo!
import win32com.client
from mutagen.mp3 import MP3
from mutagen.easyid3 import EasyID3
import mutagen.id3
itunes = win32com.client.Dispatch("iTunes.Application")
mainLibrary = itunes.LibraryPlaylist
tracks = mainLibrary.Tracks
numTracks = tracks.Count
n = 1
v = 0
while n <= numTracks:
currTrack = tracks.Item(n)
location = win32com.client.CastTo(currTrack,'IITFileOrCDTrack').Location
if ((currTrack.Artist == "") or (currTrack.Name == "")):
try:
m = MP3(location, ID3=EasyID3)
if m.has_key('artist'):
currTrack.Artist = m['artist'][0]
if m.has_key('album'):
currTrack.Album = m['album'][0]
if m.has_key('title'):
currTrack.Name = m['title'][0]
if m.has_key('tracknumber'):
currTrack.TrackNumber = m['tracknumber'][0]
if m.has_key('date'):
currTrack.Year = m['date'][0]
if m.has_key('genre'):
currTrack.Genre = m['genre'][0]
v += 1
except mutagen.id3.error:
print "Error"
continue
n+=1
print "Brani aggiornati: " + str(v)