diff options
author | Jon Bergli Heier <snakebite@jvnv.net> | 2010-06-03 17:40:05 +0200 |
---|---|---|
committer | Jon Bergli Heier <snakebite@jvnv.net> | 2010-06-03 17:40:05 +0200 |
commit | 5393609d04592eade539355de2e68615de4bdc6f (patch) | |
tree | 0f39af21845e380276216b5294a448d0f17cf744 /modules/spotify.py | |
parent | c5f92bde3d0ac8b27ec8861a9269cd84ccd99457 (diff) |
url_titles: Moved spotify code to its own module.
Diffstat (limited to 'modules/spotify.py')
-rw-r--r-- | modules/spotify.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/modules/spotify.py b/modules/spotify.py new file mode 100644 index 0000000..c68022c --- /dev/null +++ b/modules/spotify.py @@ -0,0 +1,59 @@ +info = { + 'author': 'Jon Bergli Heier', + 'title': 'URL Titles', + 'description': 'Fetches the title tags off of URLs.', +} + +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(s) + 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 |