I need to extract ID3 tags and meta-data of remote mp3 files.
I wrote few lines that could get ID3 tags of local file:
from mutagen.mp3 import MP3
import urllib2
audio = MP3("Whistle.mp3")
songtitle = audio["TIT2"]
artist = audio["TPE1"]
print "Title: " + str(songtitle)
print "Artist: "+str(artist)
I need to achieve this for url links for mp3 files. I tried to get partial download of files using urllib2.
import urllib2
from mutagen.mp3 import MP3
req = urllib2.Request('http://www.1songday.com/wp-content/uploads/2013/08/Lorde-Royals.mp3')
req.headers['Range'] = 'bytes=%s-%s' % (0, 100)
response = urllib2.urlopen(req)
headers = response.info()
print headers.type
print headers.maintype
data = response.read()
print len(data)
How can I extract ID3 tags of the MP3 url without completly downloading the file?
The id3 tags are stored in the ID3 metadata which is usually in front of the mp3 frames (containing the audio), but the mp3 standard allows them also to "follow the mp3 frames".
To download the minimum number of bytes you need to:
size
bytes of the mp3Here's a script (python 2 or 3) which extracts album art with a minimal amount of download size:
try:
import urllib2 as request # python 2
except ImportError:
from urllib import request # python 3
from functools import reduce
import sys
from io import BytesIO
from mutagen.mp3 import MP3
url = sys.argv[1]
def get_n_bytes(url, size):
req = request.Request(url)
req.headers['Range'] = 'bytes=%s-%s' % (0, size-1)
response = request.urlopen(req)
return response.read()
data = get_n_bytes(url, 10)
if data[0:3] != 'ID3':
raise Exception('ID3 not in front of mp3 file')
size_encoded = bytearray(data[-4:])
size = reduce(lambda a,b: a*128+b, size_encoded, 0)
header = BytesIO()
# mutagen needs one full frame in order to function. Add max frame size
data = get_n_bytes(url, size+2881)
header.write(data)
header.seek(0)
f = MP3(header)
if f.tags and 'APIC:' in f.tags.keys():
artwork = f.tags['APIC:'].data
with open('image.jpg', 'wb') as img:
img.write(artwork)
A few remarks:
python url.py http://www.fuelfriendsblog.com/listenup/01%20America.mp3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With