info = { 'author': 'Jon Bergli Heier', 'title': 'Spotify metadata', 'description': 'Fetches metadata from spotify links.', } import re, spotimeta class Module: re_spotify = re.compile(r'(?:http://open.spotify.com/|spotify:)(?:track|artist|album)[:/][\w]{22}') metadata = spotimeta.Metadata(cache = {}) def __init__(self, bot): self.irc = bot if bot: self.irc.register_callback(self) def spotify(self, s): try: data = self.metadata.lookup(s) except: return 'Failed to fetch metadata from spotify.' if data['type'] == 'artist': return 'Spotify artist: %s' % data['result']['name'] elif data['type'] == 'track': return 'Spotify track: %s - %s (%s)' % (data['result']['artist']['name'], data['result']['name'], data['result']['album']['name']) elif data['type'] == 'album': return u'Spotify album: %s (%d) by %s' % (data['result']['name'], data['result']['released'], ', '.join([x['name'] for x in data['result']['artists']])) def get_spotify_data(self, msg): titles = [] spotify_links = self.re_spotify.findall(msg) for sp in spotify_links: s = self.spotify(sp) if s: titles.append(s.encode('utf8')) if len(titles) == 0: return elif len(titles) == 1: s = titles[0] else: s = '' for i in range(len(titles)): s += '\002[%d]\002 %s ' % (i+1, titles[i]) return s def privmsg(self, nick, channel, msg): titles = self.get_spotify_data(msg) if titles: self.irc.msg(channel if not channel == self.irc.nickname else nick.split('!')[0], titles) if __name__ == '__main__': import sys s = Module(None).get_spotify_data(' '.join(sys.argv[1:])) if s: print s