示例#1
0
 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)
示例#2
0
 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
示例#3
0
 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
示例#4
0
 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
示例#5
0
 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)
示例#6
0
 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
示例#7
0
 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
示例#8
0
 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
示例#9
0
 def _get_clips_details(self, clips_id):
     data = jak.sendRPC('playlist.getClipsDetail', clips_id)
     return data['clip']
示例#10
0
 def _get_clips_details(self, clips_id):
     data = jak.sendRPC('playlist.getClipsDetail', clips_id)
     return data['clip']