From 5393609d04592eade539355de2e68615de4bdc6f Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Thu, 3 Jun 2010 17:40:05 +0200 Subject: url_titles: Moved spotify code to its own module. --- modules/spotify.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ modules/url_titles.py | 25 ++++------------------ 2 files changed, 63 insertions(+), 21 deletions(-) create mode 100644 modules/spotify.py (limited to 'modules') 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 diff --git a/modules/url_titles.py b/modules/url_titles.py index 60cc16f..c4f89f4 100644 --- a/modules/url_titles.py +++ b/modules/url_titles.py @@ -4,31 +4,17 @@ info = { 'description': 'Fetches the title tags off of URLs.', } -import re, urllib2, htmlentitydefs, gzip, cStringIO, spotimeta, time +import re, urllib2, htmlentitydefs, gzip, cStringIO, time from PIL import ImageFile class Module: re_http = re.compile(r'(https?://[^\ ]+)') - re_spotify = re.compile(r'spotify:(?:track|artist|album):[\w]{22}') re_title = re.compile(r']*?>(.*?)', re.S | re.I) - metadata = spotimeta.Metadata(cache = {}) def __init__(self, bot): self.irc = 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']])) + if bot: + self.irc.register_callback(self) def get_titles(self, s): def parse_url(url): @@ -68,8 +54,8 @@ class Module: m = self.re_http.findall(s) titles = [] for url in m: + # ignore spotify URLs if 'open.spotify.com' in url: - titles.append(self.spotify(url).encode('utf8')) continue t = time.time() try: @@ -125,9 +111,6 @@ class Module: finally: del im u.close() - spotify_links = self.re_spotify.findall(s) - for sp in spotify_links: - titles.append(self.spotify(sp).encode('utf8')) if len(titles) == 0: return elif len(titles) == 1: -- cgit v1.2.3