From 56c1119443466a9706e134bec230bbdb7b20ac95 Mon Sep 17 00:00:00 2001 From: Ryan Hitchman Date: Sat, 13 Feb 2010 18:11:42 -0700 Subject: [PATCH] rewrite youtube plugin again to use jsonc interface and report more information --- plugins/youtube.py | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/plugins/youtube.py b/plugins/youtube.py index 4e7637b..32c596c 100644 --- a/plugins/youtube.py +++ b/plugins/youtube.py @@ -1,39 +1,48 @@ import json import locale import re +import time import urllib2 from util import hook locale.setlocale(locale.LC_ALL, '') -youtube_re = re.compile(r'.*youtube.*v=([-_a-z0-9]+)', flags=re.I) -url = 'http://gdata.youtube.com/feeds/api/videos/%s?alt=json' +youtube_re = re.compile(r'youtube.*?v=([-_a-z0-9]+)', flags=re.I) +url = 'http://gdata.youtube.com/feeds/api/videos/%s?v=2&alt=jsonc' #@hook.command(hook=r'(.*)', prefix=False) def youtube(inp): - m = youtube_re.match(inp) + m = youtube_re.search(inp) if m: - j = json.load(urllib2.urlopen(url % m.group(1)))['entry'] - - out = '\x02%s\x02' % j['title']['$t'] + j = json.load(urllib2.urlopen(url % m.group(1))) - rating = j.get('gd$rating') - if rating: - out += ' - rated \x02%.2f/%.1f\x02 (%d)' % (rating['average'], - rating['max'], rating['numRaters']) + if j.get('error'): + return - stats = j.get('yt$statistics') - if stats: - view_count = int(stats['viewCount']) - out += ' - views \x02%s\x02' % locale.format('%d', view_count, 1) + j = j['data'] + + out = '\x02%s\x02' % j['title'] out += ' - length \x02' - length = int(j['media$group']['yt$duration']['seconds']) + length = j['duration'] if length / 3600: # > 1 hour out += '%dh ' % (length / 3600) if length / 60: out += '%dm ' % (length / 60 % 60) - out += "%ds" % (length % 60) + out += "%ds\x02" % (length % 60) + + if 'rating' in j: + out += ' - rated \x02%.2f/5.0\x02 (%d)' % (j['rating'], + j['ratingCount']) + + + if 'viewCount' in j: + out += ' - \x02%s\x02 views' % locale.format('%d', + j['viewCount'], 1) + + upload_time = time.strptime(j['uploaded'], "%Y-%m-%dT%H:%M:%S.000Z") + out += ' - \x02%s\x02 on \x02%s\x02' % (j['uploader'], + time.strftime("%Y.%m.%d", upload_time)) return out