def filter(self,vquery,user_search,direct_link=None): if not vquery : self.num_start = 1 self.current_page = 1 values = {'name': self.name, 'query': user_search} self.print_info(_("%(name)s: No results for %(query)s ...") % values) time.sleep(5) self.thread_stop=True if direct_link is not None: #gobject.idle_add(self.gui.model.clear) self.thread_stop=True self.make_youtube_entry(vquery, True, direct_link) try: if len(vquery) == 0: values = {'name': self.name, 'query': user_search} self.print_info(_("%(name)s: No results for %(query)s ...") % values) time.sleep(5) self.thread_stop=True return except: self.thread_stop=True return for entry in vquery: if not self.thread_stop: self.make_youtube_entry(entry) else: return self.thread_stop=True
def __init__(self,gui): self.gui = gui self.current_page = 1 self.main_start_page = 1 self.engine_type = "video" self.num_start = 1 self.results_by_page = 25 self.name="Youtube" self.client = yt_service.YouTubeService() self.youtube_max_res = "320x240" self.media_codec = None self.thread_stop= False self.has_browser_mode = False self.vp8 = False self.updateBrowser=True self.qlist_checked=False self.elarrId=0 ## the gui box to show custom filters/options self.opt_box = self.gui.gladeGui.get_widget("search_options_box") ## options labels self.order_label = _("Order by: ") self.category_label = _("Category: ") self.filtersLabel = _("Filters: ") self.searchTypeLabel=_('Search for:') self.selected_searchType='' ## video quality combobox self.youtube_quality_box = self.gui.gladeGui.get_widget("quality_box") self.youtube_quality_model = gtk.ListStore(str) self.youtube_video_rate = gtk.ComboBox(self.youtube_quality_model) cell = gtk.CellRendererText() self.youtube_video_rate.pack_start(cell, True) self.youtube_video_rate.add_attribute(cell, 'text', 0) self.youtube_quality_box.add(self.youtube_video_rate) new_iter = self.youtube_quality_model.append() self.youtube_quality_model.set(new_iter, 0, _("Quality"), ) self.youtube_video_rate.connect('changed', self.on_youtube_video_rate_changed) ## youtube video quality choices self.res320 = self.gui.gladeGui.get_widget("res1") self.res640 = self.gui.gladeGui.get_widget("res2") self.res854 = self.gui.gladeGui.get_widget("res3") self.res1280 = self.gui.gladeGui.get_widget("res4") self.res1920 = self.gui.gladeGui.get_widget("res5") ## SIGNALS dic = { "on_res1_toggled" : self.set_max_youtube_res, "on_res2_toggled" : self.set_max_youtube_res, "on_res3_toggled" : self.set_max_youtube_res, "on_res4_toggled" : self.set_max_youtube_res, "on_res5_toggled" : self.set_max_youtube_res, } self.gui.gladeGui.signal_autoconnect(dic) ## start self.start_engine()
def make_youtube_entry(self,video,read=None, select=False): if self.selected_searchType == 'playlist': title=video['summary']['$t'] thumb = video['media$group']['media$thumbnail'][0]['url'] video_num= video['yt$countHint']['$t'] playlist_id=video['yt$playlistId']['$t'] playlist_link='https://gdata.youtube.com/feeds/api/playlists/%s?alt=json&v=2' % playlist_id try: vid_pic = download_photo(thumb) except: return values = {'name': title, 'count': video_num} markup = _("\n\n<small><b>videos in the playlist:</b> %(count)s</small>") % values if not title or not playlist_link or not vid_pic: return gobject.idle_add(self.gui.add_sound,title, playlist_link, vid_pic,None,self.name,markup,None,select) else: try: duration = video['media$group']['yt$duration']['seconds'] calc = divmod(int(duration),60) seconds = int(calc[1]) if seconds < 10: seconds = "0%d" % seconds duration = "%d:%s" % (calc[0],seconds) url = video['link'][0]['href'] thumb = video['media$group']['media$thumbnail'][0]['url'] count = 0 try: count = video['yt$statistics']['viewCount'] except: pass vid_id=video['media$group']['yt$videoid']['$t'] if vid_id == '': return try: vid_pic = download_photo(thumb) except: return title = video['title']['$t'] if not count: count = 0 values = {'name': title, 'count': count, 'duration': duration} markup = _("\n<small><b>view:</b> %(count)s <b>Duration:</b> %(duration)s</small>") % values if not title or not url or not vid_pic: return gobject.idle_add(self.gui.add_sound,title,vid_id, vid_pic,None,self.name,markup,None,select) except: print "can t get video informations..."
def on_paste(self,widget=None,url=None): text = '' gobject.idle_add(self.gui.search_entry.set_text,"") update=True if not url: clipboard = gtk.Clipboard(gtk.gdk.display_get_default(), "CLIPBOARD") data = clipboard.wait_for_contents('UTF8_STRING') try: text = data.get_text() except: gobject.idle_add(error_dialog,_("There's no link to paste...")) return else: text = url if text != '': vid=self.get_videoId(text) if vid == '': return link =r'http://gdata.youtube.com/feeds/api/videos/%s?alt=json&v=2' % vid inp = urllib.urlopen(link) resp = json.load(inp) inp.close() entry = resp['entry'] self.filter(entry, '', update) else: return
def make_youtube_entry(self,video,read=None, select=False): duration = video['media$group']['yt$duration']['seconds'] calc = divmod(int(duration),60) seconds = int(calc[1]) if seconds < 10: seconds = "0%d" % seconds duration = "%d:%s" % (calc[0],seconds) url = video['link'][0]['href'] thumb = video['media$group']['media$thumbnail'][0]['url'] count = 0 try: count = video['yt$statistics']['viewCount'] except: pass vid_id=video['id'].values()[0].split(':')[-1] if vid_id == '': return try: vid_pic = download_photo(thumb) except: return title = video['title']['$t'] if not count: count = 0 values = {'name': title, 'count': count, 'duration': duration} markup = _("\n<small><b>view:</b> %(count)s <b>Duration:</b> %(duration)s</small>") % values if not title or not url or not vid_pic: return GObject.idle_add(self.gui.add_sound,title, vid_id, vid_pic,None,self.name,markup,None,select)
def get_videoId(self,text): vid=None try: vid = re.search('watch\?v=(.*?)&',text).group(1) except: try: vid = re.search('watch\?v=(.*)',text).group(1) except: try: vid = os.path.basename(os.path.dirname(text)) except: error_dialog(_('Your link:\n\n%s\n\nis not a valid youtube link...' % text)) return if vid=='': error_dialog(_('Your link:\n\n%s\n\nis not a valid youtube link...' % text)) return return vid
def load_gui(self): ## paste entry image = gtk.Image() image.set_from_stock(gtk.STOCK_PASTE,24) button = gtk.Button() button.set_image(image) button.connect("clicked", self.on_paste) button.set_tooltip_text(_('Paste youtube link')) button.props.relief = gtk.RELIEF_NONE self.gui.search_opt_box.pack_start(button,False,False,10) ## search type combobox cb = create_comboBox() self.searchType = ComboBox(cb) self.searchTypeList = {self.searchTypeLabel:{"":"",_("Videos"):('videos'),_("Playlist"):("playlist"), }, } self.searchType = create_comboBox(self.gui, self.searchTypeList) self.searchType.setIndexFromString(_("Videos")) ## create orderby combobox self.orderbyOpt = {self.order_label:{_("Most relevant"):"relevance", _("Most recent"):"published",_("Most viewed"):"viewCount", _("Most rated"):"rating", }, } self.orderby = create_comboBox(self.gui, self.orderbyOpt) ## create categories combobox self.category = ComboBox(cb) self.catlist = {self.category_label:{"":"",_("Sport"):"Sports", _("Films"):"Film",_("Cars"):"Autos", _("Music"):"Music",_("Technology"):"Tech",_("Animals"):"Animals", _("Travel"):"Travel",_("Games"):"Games",_("Comedy"):"Comedy", _("Peoples"):"People",_("News"):"News", _("Entertainement"):"Entertainment",_("Trailers"):"Trailers", }, } self.category = create_comboBox(self.gui, self.catlist) self.orderby.setIndexFromString(_("Most relevant")) ## filter combobox self.filters = ComboBox(cb) self.filtersList = {self.filtersLabel:{"":"",_("HD"):"hd",_("3D"):"3d", }, } self.filters = create_comboBox(self.gui, self.filtersList) gobject.idle_add(self.gui.search_opt_box.show_all) ## vp8 check if not sys.platform == 'win32': out,err = Popen('/usr/bin/gst-inspect-0.10| grep vp8',shell=True,stdout=PIPE,stderr=STDOUT).communicate() if 'vp8' in str(out): self.vp8 = True else: out,err = Popen('/usr/bin/gst-inspect | grep vp8',shell=True,stdout=PIPE,stderr=STDOUT).communicate() if 'vp8' in str(out): self.vp8 = True else: self.vp8 = True