summaryrefslogtreecommitdiff
path: root/modules/spotify.py
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2010-06-03 17:40:05 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2010-06-03 17:40:05 +0200
commit5393609d04592eade539355de2e68615de4bdc6f (patch)
tree0f39af21845e380276216b5294a448d0f17cf744 /modules/spotify.py
parentc5f92bde3d0ac8b27ec8861a9269cd84ccd99457 (diff)
url_titles: Moved spotify code to its own module.
Diffstat (limited to 'modules/spotify.py')
-rw-r--r--modules/spotify.py59
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