def resolve(self, item, captcha_cb=None, select_cb=None): resolved = [] item = item.copy() # interpreter playlist if item['url'].startswith("#interpreter#"): interpreter_id = int(item['url'].split('#')[-1]) data = jak.sendRPC('playlist.getClipsByInterpreter', interpreter_id) clips_id = [clip['id'] for clip in data['clip']] # playlist elif item['url'].startswith('#playlist#'): playlist_id = int(item['url'].split('#')[-2]) clips_id = self._get_clips_id(playlist_id)[:self.paging] else: # one video clips_id = [int(item['url'])] try: data = jak.sendRPC('playlist.getClipsDetail', clips_id) except Exception as e: self.error(str(e)) else: for clip in data['clip']: for video in clip['cdn_qualities']: item = self.video_item() ips = u", ".join([ip['name'] for ip in clip['interpreters']]) item['title'] = self.cptitle.format(ips, clip['title']) item['surl'] = unicode(clip['id']) item['url'] = self.vurl.format(video['cdn_id']) item['quality'] = video['quality'] resolved.append(item) resolved = sorted(resolved, key=lambda i:i['quality']) resolved = sorted(resolved, key=lambda i:len(i['quality'])) resolved.reverse() if len(resolved) == 1: return resolved[0] return select_cb(resolved)
def list_interpreter(self, interpreter_id): result = [] data = jak.sendRPC('playlist.getClipsByInterpreter', interpreter_id) clips_id = [clip['id'] for clip in data['clip']] clips = self._get_clips_details(clips_id) for cp in clips: self._filter(result, self._create_clip_item(cp)) return result
def _get_clips_id(self, playlist_id): try: with open(self.clips_path, 'r') as f: clips_id = util.json.loads(f.read())[str(playlist_id)] except IOError: data = jak.sendRPC('playlist.getClips', playlist_id) clips_id = [clip['id'] for clip in data['clip']] random.shuffle(clips_id) with open(self.clips_path, 'w') as f: dump = util.json.dumps({playlist_id:clips_id}, ensure_ascii=True) f.write(dump) except KeyError: data = jak.sendRPC('playlist.getClips', playlist_id) clips_id = [clip['id'] for clip in data['clip']] random.shuffle(clips_id) with open (self.clips_path, 'r+') as f: o = util.json.loads(f.read()) o[playlist_id] = clips_id dump = util.json.dumps(o, ensure_ascii=True) f.seek(0) f.write(dump) return clips_id
def resolve(self, item, captcha_cb=None, select_cb=None): resolved = [] item = item.copy() # interpreter playlist if item['url'].startswith("#interpreter#"): interpreter_id = int(item['url'].split('#')[-1]) data = jak.sendRPC('playlist.getClipsByInterpreter', interpreter_id) clips_id = [clip['id'] for clip in data['clip']] # playlist elif item['url'].startswith('#playlist#'): playlist_id = int(item['url'].split('#')[-2]) clips_id = self._get_clips_id(playlist_id)[:self.paging] else: # one video clips_id = [int(item['url'])] try: data = jak.sendRPC('playlist.getClipsDetail', clips_id) except Exception as e: self.error(str(e)) else: for clip in data['clip']: for video in clip['cdn2']: if video['format'] == "webm": continue item = self.video_item() ips = u", ".join( [ip['name'] for ip in clip['interpreters']]) item['title'] = self.cptitle.format(ips, clip['title']) item['surl'] = unicode(clip['id']) item['url'] = video['url'] item['quality'] = video['quality'] resolved.append(item) resolved = sorted(resolved, key=lambda i: i['quality']) resolved = sorted(resolved, key=lambda i: len(i['quality'])) resolved.reverse() if len(resolved) == 1: return resolved[0] return select_cb(resolved)
def _get_clips_id(self, playlist_id): try: with open(self.clips_path, 'r') as f: clips_id = util.json.loads(f.read())[str(playlist_id)] except IOError: data = jak.sendRPC('playlist.getClips', playlist_id) clips_id = [clip['id'] for clip in data['clip']] random.shuffle(clips_id) with open(self.clips_path, 'w') as f: dump = util.json.dumps({playlist_id: clips_id}, ensure_ascii=True) f.write(dump) except KeyError: data = jak.sendRPC('playlist.getClips', playlist_id) clips_id = [clip['id'] for clip in data['clip']] random.shuffle(clips_id) with open(self.clips_path, 'r+') as f: o = util.json.loads(f.read()) o[playlist_id] = clips_id dump = util.json.dumps(o, ensure_ascii=True) f.seek(0) f.write(dump) return clips_id
def search(self, keyword): result = [] data = jak.sendRPC('clip.search', keyword) for ip in data['interpreters']: item = self.dir_item() item['title'] = self.iptitle.format(ip['interpreter_name'], ip['interpreter_clips']) item['url'] = self.ipurl.format(ip['interpreter_id']) self._filter(result, item) for cp in data['clips']: item = self.video_item() ips = u", ".join([ip['name'] for ip in cp['interpreters']]) item['title'] = self.cptitle.format(ips, cp['text']) item['url'] = self.cpurl.format(cp['clip_id']) item['menu'] = {} for ip in cp['interpreters']: item['menu'].update(self._create_interpreter_ctxitem(ip)) self._filter(result, item) return result
def _get_clips_details(self, clips_id): data = jak.sendRPC('playlist.getClipsDetail', clips_id) return data['clip']