Beispiel #1
0
 def check_stream(self):
     try:
         self.get_sinfo()
         return True
     except youtube_dl.utils.DownloadError:
         logger.debug('%s未开播或读取下载信息失败' % self.fname)
         return False
Beispiel #2
0
 def rename(file_name):
     try:
         os.rename(file_name + '.part', file_name)
         logger.debug('更名{0}为{1}'.format(file_name + '.part', file_name))
     except FileNotFoundError:
         logger.info('FileNotFoundError:' + file_name)
     except FileExistsError:
         os.rename(file_name + '.part', file_name)
         logger.info('FileExistsError:更名{0}为{1}'.format(
             file_name + '.part', file_name))
Beispiel #3
0
 def check_stream(self):
     logger.debug(self.fname)
     res = requests.get(self.url, timeout=5, headers=fake_headers)
     res.close()
     huya = match1(res.text, '"stream": "([a-zA-Z0-9+=/]+)"')
     if huya:
         huyajson = json.loads(base64.b64decode(huya).decode())['data'][0]['gameStreamInfoList'][0]
         absurl = u'{}/{}.{}?{}'.format(
             huyajson["sFlvUrl"], huyajson["sStreamName"], huyajson["sFlvUrlSuffix"], huyajson["sFlvAntiCode"])
         self.raw_stream_url = html.unescape(absurl)
         return True
Beispiel #4
0
 def get_sinfo(self):
     info_list = []
     with youtube_dl.YoutubeDL() as ydl:
         if self.url:
             info = ydl.extract_info(self.url, download=False)
         else:
             logger.debug('%s不存在' % self.__class__.__name__)
             return
         for i in info['formats']:
             info_list.append(i['format_id'])
         logger.debug(info_list)
     return info_list
Beispiel #5
0
 def check_stream(self):
     logger.debug(self.fname)
     try:
         streams = streamlink.streams(self.url)
         if streams:
             self.stream = streams["best"]
             fd = self.stream.open()
             fd.close()
             streams.close()
             return True
     except streamlink.StreamlinkError:
         return
Beispiel #6
0
 def check_stream(self):
     logger.debug(self.fname)
     site, url = url_to_module(self.url)
     try:
         info = site.parser(url)
     except AssertionError:
         return
     stream_id = info.stream_types[0]
     urls = info.streams[stream_id]['src']
     self.raw_stream_url = urls[0]
     # print(info.title)
     return True
Beispiel #7
0
 def start(self):
     file_name = self.file_name
     if self.check_stream():
         file_name += "." + self.suffix
         pid = os.getpid()
         monitor = Monitoring(pid, file_name)
         self.flag = monitor.flag
         monitor.start()
         retval = self.download(file_name)
         self.rename(file_name)
         monitor.stop()
         if retval != 0:
             logger.debug('准备递归下载')
             self.start()
         else:
             logger.info('下载完成' + self.fname)
Beispiel #8
0
 def check_stream(self):
     logger.debug(self.fname)
     if platform.system() == 'Linux':
         if not chakra_available and not quickjs_available and external_interpreter is None:
             logger.error('''
     Please install at least one of the following Javascript interpreter.'
     python packages: PyChakra, quickjs
     applications: Gjs, CJS, QuickJS, JavaScriptCore, Node.js, etc.''')
     site, url = url_to_module(self.url)
     try:
         info = site.parser(url)
     except AssertionError:
         return
     stream_id = info.stream_types[0]
     urls = info.streams[stream_id]['src']
     self.raw_stream_url = urls[0]
     # print(info.title)
     return True
Beispiel #9
0
 def __init__(self, urls):
     BatchCheckBase.__init__(self, pattern_id=VALID_URL_BASE, urls=urls)
     self.use_id = {}
     if self.usr_list:
         login = requests.get(_API_USER,
                              headers=headers,
                              params={'login': self.usr_list},
                              timeout=5)
         login.close()
     else:
         logger.debug('无twitch主播')
         return
     try:
         for pair in login.json()['data']:
             self.use_id[pair['id']] = pair['login']
     except KeyError:
         logger.info(login.json())
         return
Beispiel #10
0
    def check_stream(self):
        logger.debug(self.fname)
        streamlink = StreamLink(self.fname, self.url, FallbackHandler())
        youtube_dl = YoutubeDl(self.fname, self.url, streamlink)
        try:
            site, url = url_to_module(self.url)
            info = site.parser(url)
            # except AssertionError:
            #     self.handler = youtube_dl.handle()
            #     return self.handler != FallbackHandler()

            stream_id = info.stream_types[0]
            urls = info.streams[stream_id]['src']
            self.raw_stream_url = urls[0]
        # print(info.title)
        except:
            self.handler = youtube_dl.handle()
            self.suffix = self.handler.suffix
            return self.handler != FallbackHandler()
        return True
Beispiel #11
0
    def check_stream(self):
        logger.debug(self.fname)
        username = match1(self.url, VALID_URL_BASE)
        res_bno = requests.post(CHANNEL_API_URL,
                                data={
                                    "bid": username,
                                    "mode": "landing",
                                    "player_type": "html5"
                                },
                                timeout=5)
        res_bno.close()

        if res_bno.json()["CHANNEL"]["RESULT"] == 0:
            return
        bno = res_bno.json()["CHANNEL"]["BNO"]
        cdn = res_bno.json()["CHANNEL"]["CDN"]
        rmd = res_bno.json()["CHANNEL"]["RMD"]
        res_aid = requests.post(CHANNEL_API_URL,
                                data={
                                    "bid": username,
                                    "bno": bno,
                                    "pwd": "",
                                    "quality": QUALITIES[0],
                                    "type": "pwd"
                                },
                                timeout=5)
        res_aid.close()
        aid = res_aid.json()["CHANNEL"]["AID"]
        params = {
            "return_type":
            cdn,
            "broad_key":
            "{broadcast}-flash-{quality}-hls".format(broadcast=bno,
                                                     quality=QUALITIES[0])
        }
        res = requests.get(STREAM_INFO_URLS.format(rmd=rmd),
                           params=params,
                           timeout=5)
        res.close()
        self.raw_stream_url = res.json()["view_url"] + "?aid=" + aid
        return True
Beispiel #12
0
 def check_stream(self):
     logger.debug(self.fname)
     try:
         site, url = url_to_module(self.url)
         info = site.parser(url)
         stream_id = info.stream_types[0]
         urls = info.streams[stream_id]['src']
         self.raw_stream_url = urls[0]
     # print(info.title)
     except:
         handlers = [
             YDownload(self.fname, self.url, 'mp4'),
             SDownload(self.fname, self.url, 'flv')
         ]
         for handler in handlers:
             if handler.check_stream():
                 self.handler = handler
                 self.suffix = handler.suffix
                 return True
         return False
     return True
Beispiel #13
0
 def check_stream(self):
   logger.debug(self.fname)
   rid = re.search(r"[0-9]{4,}", self.url).group(0)
   res = requests.get(
       f"https://api.cc.163.com/v1/activitylives/anchor/lives?anchor_ccid={rid}",
       timeout=5,
       headers=fake_headers
   )
   res.close()
   jsons = json.loads(res.text)
   if jsons["data"]:
     channel_id = jsons["data"][rid]["channel_id"]
     res = requests.get(
         f"https://cc.163.com/live/channel/?channelids={channel_id}",
         timeout=5,
         headers=fake_headers
     )
     res.close()
     jsons = json.loads(res.text)
     self.raw_stream_url = jsons["data"][0]["sharefile"]
     return True
Beispiel #14
0
    def add_videos(self, videopath):
        formate_title = self.data["format_title"]
        WebDriverWait(self.driver, 20).until(
            ec.presence_of_element_located((By.NAME, 'buploader')))
        upload = self.driver.find_element_by_name('buploader')
        # logger.info(driver.title)
        upload.send_keys(videopath)  # send_keys
        logger.info('开始上传' + formate_title)
        time.sleep(2)
        button = r'//*[@class="new-feature-guide-v2-container"]/div/div/div/div/div[1]'
        if self.is_element_exist(self.driver, button):
            sb = self.driver.find_element_by_xpath(button)
            sb.click()
            sb.click()
            sb.click()
            logger.debug('点击')
        while True:
            try:
                info = self.driver.find_elements_by_class_name(
                    r'item-upload-info')
                for t in info:
                    if t.text != '':
                        print(t.text)
                time.sleep(10)
                text = self.driver.find_elements_by_xpath(
                    r'//*[@class="item-upload-info"]/span')
                aggregate = set()
                for s in text:
                    if s.text != '':
                        aggregate.add(s.text)
                        print(s.text)

                if len(aggregate) == 1 and ('Upload complete' in aggregate
                                            or '上传完成' in aggregate):
                    break
            except selenium.common.exceptions.StaleElementReferenceException:
                logger.exception(
                    "selenium.common.exceptions.StaleElementReferenceException"
                )
        logger.info('上传%s个数%s' % (formate_title, len(info)))
Beispiel #15
0
        def check(self):

            live = []
            usr_list = self.usr_list
            if not usr_list:
                logger.debug('无用户列表')
                return
            # url = 'https://api.twitch.tv/kraken/streams/sc2_ragnarok'

            stream = requests.get(API_ROOMS,
                                  headers=headers,
                                  params={'user_login': usr_list},
                                  timeout=5)
            stream.close()

            data = stream.json()['data']
            if data:
                for i in data:
                    live.append(self.use_id[i['user_id']])
            else:
                logger.debug('twitch无开播')

            return map(lambda x: self.usr_dict.get(x.lower()), live)
Beispiel #16
0
 def check_stream(self):
     logger.debug(self.fname)
     raise NotImplementedError()