def listid3v2(filename): id3v2 = id3.ID3v2() if not os.path.isfile(filename): print "%s: %s is not a file." % (sys.argv[0], filename) return id3v2 = id3.ID3v2(filename) for frame in id3v2.frames: print "%r" % frame id3v2.filename = "test.tag" id3v2.save()
def listid3v2(filename): id3v2 = id3.ID3v2() if not os.path.isfile(filename): print "%s: %s is not a file." % (sys.argv[0], filename) return track = None artist = '' album = '' title = '' id3v1 = id3.ID3v1(filename) id3v2 = id3.ID3v2(filename) if id3v1.title: title = id3v1.title if id3v1.artist: artist = id3v1.artist if id3v1.album: album = id3v1.album if id3v1.track: track = int(id3v1.track) for frame in id3v2.frames: # print "%s" % frame if frame.id == 'TPE1': artist = frame.value elif frame.id == 'TIT2': title = frame.value elif frame.id == 'TALB': album = frame.value elif frame.id == 'TRCK': if frame.value.find('/') != -1: track = int(frame.value.split('/')[0]) else: track = int(str(frame.value).strip()) if not track: numbers = re.findall(r'[^0-9]([0-9][0-9])[^0-9]', filename) if not numbers: numbers = re.findall(r'([0-9][0-9])[^0-9]', filename) if numbers: track = int(numbers[0]) print "File : %s" % filename print "\tArtist: %s" % artist print "\tAlbum : %s" % album print "\tTrack : %s" % track print "\tTitle : %s" % title
def __init__(self): image = None wxInitAllImageHandlers() wxFrame.__init__(self, NULL, -1, "Test") panel = wxPanel(self, -1) filename = sys.argv[1] if not os.path.isfile(filename): print "%s: %s is not a file." % (sys.argv[0], filename) return tag = id3.ID3v2(filename) for frame in tag.frames: if isinstance(frame, id3.ID3v2Frames.AttachedPicture): print len(frame.image) source = Image.open(StringIO.StringIO(frame.image)) image = apply(wxEmptyImage, source.size) image.SetData(source.convert("RGB").tostring()) image.ConvertToBitmap() if image: bm = wxStaticBitmap(panel, -1, image.ConvertToBitmap()) else: raise SystemExit, "id3v2 tag has no image" self.SetSize(bm.GetSize()) self.Layout()
def disable_testRead(self): tag_list = os.listdir('sample-tags') tag_list.sort() for tag_file in tag_list: tag_file = os.path.join('sample-tags', tag_file) try: tag = id3.ID3v2(tag_file) except id3.Error, err: print "file was: %s, %s" % ( tag_file, err.__str__(), ) except:
def test_apic(self): FILESIZE = 1024 DATA = 'monkey monkey, monkey' tfn = tempfile.mktemp('id3v2.tag') fh = file(tfn, 'wb+') fh.write('\xff' * FILESIZE) fh.close() id3v2 = id3.ID3v2(tfn) frame = id3v2.get_text_frame('XSOP') frame.value = DATA id3v2.save() del id3v2 id3v2 = id3.ID3v2(tfn) frame = id3v2.get_text_frame('XSOP', create=False) assert frame.value == DATA os.unlink(tfn)
def testRead(self): """ Try reading tags with broken frames, and see if we survive """ mydir = os.path.join('sample-tags', 'broken-frames') if not os.path.isdir(mydir): raise RuntimeError, "No samples to look over" tag_list = os.listdir(mydir) tag_list.sort() for tag_file in tag_list: tag_file = os.path.join(mydir, tag_file) tag = id3.ID3v2(tag_file, broken_frames='drop')
def extractapic(filename): print "Extracting pictures from %r" % filename imagenum = 1 if not os.path.isfile(filename): print "%s: %s is not a file." % (sys.argv[0], filename) return id3v2 = id3.ID3v2( filename ) for frame in id3v2.frames: if frame.id == 'APIC': imgf = file("image-%0i.jpg" % imagenum, 'w') imgf.write(frame.image) imgf.close()
def helper_tagcmp(self, tagfile1, tagfile2): """ Compare the two files """ tag = id3.ID3v2(tagfile1) size = tag.tag_size - tag.padding_size fdata1 = file(tagfile1).read(size) fdata2 = file(tagfile2).read(size) if fdata1 != fdata2: print "%r" % fdata1 print "%r" % fdata2 return fdata1 == fdata2
def listid3v2(filename): if not os.path.isfile(filename): print "%s: %s is not a file." % (sys.argv[0], filename) return id3v2 = id3.ID3v2( filename ) print "Tag size: ", id3v2.tag_size maxsize = 0 for frame in id3v2.frames: if len(frame.name) > maxsize: maxsize = len(frame.name) for frame in id3v2.frames: out = u"%s (%s): %s" % (frame.name.rjust(maxsize), frame.id, unicode(frame),) print out.encode('utf-8')
def disable_testRead(self): """ Not needed as the other covers this as well """ mydir = os.path.join('sample-tags', '2.3.0') tag_list = os.listdir(mydir) tag_list.sort() for tag_file in tag_list: tag_file = os.path.join(mydir, tag_file) try: tag = id3.ID3v2(tag_file) except id3.Error, err: print "file was: %s, %s" % ( tag_file, err.__str__(), ) except:
def testReadNWrite(self): """ Open the tag, read, then save and see if we have the same thing """ mydir = os.path.join('sample-tags', '2.3.0') brokendir = os.path.join('sample-tags', 'broken-frames') if not os.path.isdir(mydir): raise RuntimeError, "No samples to look over" tag_list = os.listdir(mydir) tag_list.sort() for fn in tag_list: tag_file = os.path.join(mydir, fn) tfn = tempfile.mktemp('id3v2.tag') shutil.copyfile(tag_file, tfn) try: tag = id3.ID3v2(tfn) except: print "%r" % (tag_file, ) raise try: tag.save() except: print "%r" % (tag_file, ) raise # EVIL HACK # don't check files that have a TXXX 'CT_GAPLESS_DATA' frame # these were written by some buggy software that didn't put the # unicode BOM on the COMM comment if tag.get_usertext_frame('CT_GAPLESS_DATA', create=False): print "Skipping known broken file... %r" % tag_file os.rename(tag_file, os.path.join(brokendir, fn)) os.unlink(tfn) continue self.failUnless( self.helper_tagcmp(tag_file, tfn), "rewriting %r failed. output at %r " % ( tag_file, tfn, )) os.unlink(tfn)
def testReadNWrite(self): """ Open the tag, read, then save and see if we have the same thing """ mydir = os.path.join('sample-tags', '2.4.0') tag_list = os.listdir(mydir) tag_list.sort() for tag_file in tag_list: print tag_file tag_file = os.path.join(mydir, tag_file) tfn = tempfile.mktemp('id3v2.tag') shutil.copyfile(tag_file, tfn) try: tag = id3.ID3v2(tfn) except id3.Error, err: print "read failure. file was: %s, %s" % ( tag_file, err.__str__(), ) raise except:
#!/usr/bin/env python import os import sys import id3 # # Main program starts here # if __name__ == "__main__": if not os.path.isfile(sys.argv[3]): print "not such file \"%s\"" % sys.argv[3] if not os.path.isfile(sys.argv[2]): print "not such file \"%s\"" % sys.argv[2] id3v2 = id3.ID3v2(sys.argv[3]) image = file(sys.argv[2], 'r').read() newframe = id3v2.new_frame('APIC') newframe.image = image if sys.argv[1] == '0': newframe.picturetype = '\x00' else: newframe.picturetype = '\x03' newframe.mimetype = "image/jpeg" id3v2.unsync = 0 id3v2.save()