def addSong( self, artist, album = None, genre = None, title="TestTitle", year=2000, length=100, filename="/path/to/test.mp3" ): # save a song song = Song( Artist=artist, Album=album, Genre=genre, Title=title, Year=year, Length=length, Filename=filename ) song.save() return song
def index(self, path): if not path.endswith("/"): path = path + "/" listing = os.listdir(path) for filename in listing: filename = path + filename if os.path.isdir(filename): self.index(filename + "/") elif filename.endswith(".mp3"): # skip already indexed if self.isIndexed(filename): continue id3 = EasyID3(filename) tags = { "artist": None, "title": None, "album": None, "genre": None, "date": None, "length": None, } for k, v in id3.items(): tags[k] = v[0] if tags["artist"] is None and tags["title"] is None: print "Neither artist nor title set in " + \ filename + " - skipping file" continue if tags["artist"] is not None: tags["artist"], created = Artist.objects.get_or_create( Name=tags["artist"] ) if tags["album"] is not None and tags["artist"] is not None: tags["album"], created = Album.objects.get_or_create( Artist=tags["artist"], Title=tags["album"] ) if tags["genre"] is not None: tags["genre"], created = Genre.objects.get_or_create( Name=tags["genre"] ) if tags["date"] is not None: tags["date"] = int(tags["date"]) try: audio = MP3(filename) tags["length"] = int(audio.info.length) song = Song( Artist=tags["artist"], Album=tags["album"], Genre=tags["genre"], Title=tags["title"], Year=tags["date"], Length=tags["length"], Filename=filename ) song.save() except HeaderNotFoundError: print "File contains invalid header data: " + filename
def index(self, filename): # skip already indexed data = Song.objects.filter(Filename__exact=filename) if data: return try: id3 = EasyID3(filename) tags = { "artist": None, "title": None, "album": None, "genre": None, "date": None, "length": None, } for k, v in id3.items(): tags[k] = v[0].lower() if tags["artist"] is None or tags["title"] is None: print "Artist or title not set in " + \ filename + " - skipping file" return if tags["artist"] is not None: tags["artist"], created = Artist.objects.get_or_create( Name=tags["artist"] ) if tags["album"] is not None and tags["artist"] is not None: tags["album"], created = Album.objects.get_or_create( Artist=tags["artist"], Title=tags["album"] ) if tags["genre"] is not None: tags["genre"], created = Genre.objects.get_or_create( Name=tags["genre"] ) if tags["date"] is not None: try: tags["date"] = int(tags["date"]) except ValueError: tags["date"] = None audio = MP3(filename) tags["length"] = int(audio.info.length) song = Song( Artist=tags["artist"], Album=tags["album"], Genre=tags["genre"], Title=tags["title"], Year=tags["date"], Length=tags["length"], Filename=filename ) song.save() except HeaderNotFoundError: print "File contains invalid header data: " + filename except ID3NoHeaderError: print "File does not contain an id3 header: " + filename