· 8 years ago · Mar 03, 2018, 07:34 AM
1"""Performs YouTube searches using the gdata API."""
2import time
3
4import gdata.youtube.service
5from minitaur.callbacks import NoArgsError, Plugin, require_args
6
7
8class Youtube(Plugin):
9
10 def initialize(self):
11 self.register_public(self.youtube, ('yt', 'youtube'),
12 ('n:t', ['num-results=', 'title']))
13
14 @require_args
15 def youtube(self, event, opts, args):
16 """Searches YouTube."""
17 show_title = False
18 num_results = 1
19 for opt, arg in opts:
20 if opt in ('-t', '--title'):
21 show_title = True
22 elif opt in ('-n', '--num-results'):
23 arg = int(arg)
24 if arg <= 3 and arg > 0:
25 num_results = arg
26 else:
27 self.respond('Maximum number of results is 3.')
28 svc = gdata.youtube.service.YouTubeService()
29 qry = gdata.youtube.service.YouTubeVideoQuery()
30 qry.vq = ' '.join(args)
31 results = svc.YouTubeQuery(qry).entry
32 if not results:
33 return self.respond('No results found for your query.')
34 _get_r = lambda r: (
35 (self.shorten_str(r.title.text, 60) + ' -- '
36 if show_title else '') + r.link[0].href)
37 if num_results == 1:
38 self.respond(_get_r(results[0]))
39 else:
40 if num_results > len(results):
41 return self.respond(event, 'There are only %d results.' %
42 len(results))
43 for result in results[:num_results]:
44 self.respond(_get_r(result))
45 time.sleep(1)
46
47META = {
48 'author': 'mini-man',
49 'email': 'mini.mcmidget AT gmail.com'
50}