#!/usr/bin/env python # cgpytunes.py # by: Andrew Burton (tuglyraisin@aol.com) ##### # Libraries import BaseHTTPServer import re import win32com.client # iTunes controled by GET URI class class GetTunes: iTunes = win32com.client.gencache.EnsureDispatch("iTunes.Application") uriPath = '' def __init__ (self, path): self.uriPath = path.strip().split('/') def ParseCmd (self): if (self.uriPath[1] == "First"): return self.PlayFirst() elif (self.uriPath[1] == "Pause"): return self.Pause() elif (self.uriPath[1] == "Play"): return self.Play() elif (self.uriPath[1] == "Next"): return self.Next() elif (self.uriPath[1] == "Prev"): return self.Previous() elif (self.uriPath[1] == "Stop"): return self.StopPlay() elif (self.uriPath[1] == "Volume"): return self.AdjustVolume() else: return self.BuildReply('Ready') def PlayFirst (self): self.iTunes.LibrarySource.Playlists.ItemByName('Library').PlayFirstTrack() return self.BuildReply('First') def Pause (self): self.iTunes.PreviousTrack() return self.BuildReply('Pause') def Play (self): self.iTunes.Play() return self.BuildReply('Playing') def Next (self): self.iTunes.NextTrack() return self.BuildReply('Next') def Previous (self): self.iTunes.PreviousTrack() return self.BuildReply('Previous') def StopPlay (self): self.iTunes.Stop() return self.BuildReply('Stopped') def AdjustVolume (self): volume = self.iTunes.SoundVolume if (len(self.uriPath) > 2): if (self.uriPath[2] == 'Up'): self.iTunes.SoundVolume = volume + 10 return self.BuildReply('Volume Up') elif (self.uriPath[2] == 'Down'): if (volume > 0): self.iTunes.SoundVolume = volume - 10 return self.BuildReply('Volume Down') else: return self.BuildReply('Volume') def BuildReply (self, status): current = self.iTunes.CurrentTrack returnreply = u'\n\t\n' returnreply = returnreply + u'\t\n' if (current): returnreply = returnreply + u"\t\n\t\t" + current.Name + u"\n" returnreply = returnreply + u"\t\t" + current.Artist + u"\n" returnreply = returnreply + u"\t\t" + current.Album + u"\n\t\n" returnreply = returnreply + u"" return returnreply.encode('ascii', 'replace') # Basic handler thing class Serv (BaseHTTPServer.BaseHTTPRequestHandler): def do_GET (self): self.send_response (200) self.send_header (u'Content-type', 'text/xml') self.end_headers() g = GetTunes(self.path) self.wfile.write(u'\n') self.wfile.write(g.ParseCmd()) # Global Variables domain = 'roxy' port = 17005 server = BaseHTTPServer.HTTPServer((domain, port), Serv) server.serve_forever()