Playlog Displayer
Posted by they4kman on Sunday, February 15, 2009 at 7:46 p.m. (1 year ago)
I never did show you the full source code for the playlog page, so here you go! One day I'll comment it for you :D
from mod_python import apache, util
from PIL import Image
import eyeD3 as id3
import MySQLdb, time, cStringIO
def handler(req):
args = util.parse_qs(req.args or "")
if args.has_key("pic"):
return pic(req, args["pic"])
return main(req)
def main(req):
req.content_type = "text/html"
req.write("""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>theY4Kman's Playlog</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>""")
db = MySQLdb.connect(host="localhost", user="root", passwd="fooledu", db="amarok")
crs = db.cursor()
crs.execute("""SELECT playlog.play_time, song_paths.song_path, song_paths.song_id
FROM playlog, song_paths
WHERE playlog.song_id = song_paths.song_id
ORDER BY playlog.play_time DESC
LIMIT 0,20""")
grey = False
res = crs.fetchone()
while res:
title = artist = album = "<none>"
year = ""
tag = id3.Tag()
try:
tag.link(res[1])
title = tag.getTitle()
artist = tag.getArtist()
album = tag.getAlbum()
year = tag.getYear()
except:
res = crs.fetchone()
continue
req.write("""
<div class="track %s">
<div class="basicinfo">
<div class="extendedinfo">
<br />
</div>
<em class="time">%s</em>
<div class="cover">
<img class="coverimg" src="music.py?pic=%s" />
</div>
<div class="trackinfo">
<strong>%s</strong>%s%s
</div>
</div>
</div>
"""
% ( ( grey != False and "bg1" or "bg2" ),
time.strftime( "%Z %I:%M%p %A, %B %d", time.localtime(res[0]) ),
res[2],
title,
artist != "" and ("<br /> by <strong>%s</strong>" % artist) or "",
album != "" and ("<br /> on <strong>%s</strong>" % album) or "" ) )
grey = not grey # Toggle between grey and white backgrounds.
res = crs.fetchone()
req.write("</none></body>n</html>")
return apache.OK
def pic(req, id):
req.content_type = "text/html"
db = MySQLdb.connect(host="localhost", user="root", passwd="fooledu", db="playlog")
crs = db.cursor()
crs.execute("SELECT song_path FROM songs WHERE song_id = %s LIMIT 1", id)
res = crs.fetchone()
if not res: return defaultpic(req)
tag = id3.Tag()
try:
tag.link(res[0])
imgs = tag.getImages()
if not tag or len(imgs) < 1: return defaultpic(req)
req.content_type = imgs[0].mimeType
im_str = cStringIO.StringIO(imgs[0].imageData)
im = Image.open(im_str)
if im.size[0] > 130:
im = im.resize( (130, 130), Image.ANTIALIAS )
im_str.close()
im_str = cStringIO.StringIO()
im.save(im_str, "JPEG")
req.write("%s" % im_str.getvalue())
im_str.close()
except:
return defaultpic(req)
return apache.OK
def defaultpic(req):
img = open("/home/they4kman/site/music/covers/__default.png", "rb")
if not img: return apache.OK
req.content_type = "image/png"
req.write(img.read())
img.close()
return apache.OK
