示例#1
0
文件: api.py 项目: McVasant/jukebox
 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
示例#2
0
    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
示例#3
0
    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