예제 #1
0
    def _res_text(self, url):
        '''Content of a website

        Args:
            url: URL with an embedded Video Player.

        Returns:
            Content of the response
        '''
        try:
            res = http.get(url, allow_redirects=True)
        except Exception as e:
            if 'Received response with content-encoding: gzip' in str(e):
                headers = {
                    'User-Agent': useragents.FIREFOX,
                    'Accept-Encoding': 'deflate'
                }
                res = http.get(url, headers=headers, allow_redirects=True)
            elif '403 Client Error' in str(e):
                log.error(
                    'Website Access Denied/Forbidden, you might be geo-blocked or other params are missing.'
                )
                raise NoStreamsError(self.url)
            elif '404 Client Error' in str(e):
                log.error('Website was not found, the link is broken or dead.')
                raise NoStreamsError(self.url)
            else:
                raise e

        if res.history:
            for resp in res.history:
                log.debug('Redirect: {0} - {1}'.format(resp.status_code,
                                                       resp.url))
            log.debug('URL: {0}'.format(res.url))
        return res.text
예제 #2
0
    def _get_streams(self):
        if "empty" in self.url:
            return
        if "NoStreamsError" in self.url:
            raise NoStreamsError(self.url)

        streams = {}
        streams["test"] = TestStream(self.session)
        streams["rtmp"] = RTMPStream(self.session, dict(rtmp="rtmp://test.se"))
        streams["hls"] = HLSStream(self.session, "http://test.se/playlist.m3u8")
        streams["http"] = HTTPStream(self.session, "http://test.se/stream")
        streams["akamaihd"] = AkamaiHDStream(self.session, "http://test.se/stream")

        streams["240p"] = HTTPStream(self.session, "http://test.se/stream")
        streams["360p"] = HTTPStream(self.session, "http://test.se/stream")
        streams["1080p"] = HTTPStream(self.session, "http://test.se/stream")

        streams["350k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["800k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["1500k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["3000k"] = HTTPStream(self.session, "http://test.se/stream")

        streams["480p"] = [HTTPStream(self.session, "http://test.se/stream"),
                           RTMPStream(self.session, dict(rtmp="rtmp://test.se"))]

        streams.update(testplugin_support.get_streams(self.session))

        return streams
 def _get_api_res(self, user_id):
     try:
         res = self.session.http.get(
             self._channel_info_api_url_base.format(channel=user_id))
         return res
     except Exception:
         raise NoStreamsError(self.url)
예제 #4
0
    def _get_streams(self):
        if "empty" in self.url:
            return

        if "UnsortableStreamNames" in self.url:
            def gen():
                for i in range(3):
                    yield "vod", HTTPStream(self.session, "http://test.se/stream")

            return gen()

        if "NoStreamsError" in self.url:
            raise NoStreamsError(self.url)

        streams = {}
        streams["test"] = TestStream(self.session)
        streams["hls"] = HLSStream(self.session, "http://test.se/playlist.m3u8")
        streams["http"] = HTTPStream(self.session, "http://test.se/stream")

        streams["240p"] = HTTPStream(self.session, "http://test.se/stream")
        streams["360p"] = HTTPStream(self.session, "http://test.se/stream")
        streams["1080p"] = HTTPStream(self.session, "http://test.se/stream")

        streams["350k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["800k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["1500k"] = HTTPStream(self.session, "http://test.se/stream")
        streams["3000k"] = HTTPStream(self.session, "http://test.se/stream")

        streams["480p"] = [
            HTTPStream(self.session, "http://test.se/stream"),
            HLSStream(self.session, "http://test.se/playlist.m3u8")
        ]

        return streams
예제 #5
0
 def _get_api_res(self, api_type, api_id):
     try:
         res = http.get(self.api_url.format(type=api_type, id=api_id))
         return res
     except Exception as e:
         if "404" in str(e):
             self.logger.error("invalid {0} - {1}".format(api_type, api_id))
         elif "429" in str(e):
             self.logger.error("Too Many Requests, API rate limit exceeded.")
         raise NoStreamsError(self.url)
예제 #6
0
파일: cubetv.py 프로젝트: usshen/streamlink
    def _get_streams(self):
        user_id = self._url_re.match(self.url).group(2)
        res = self._get_api_res(user_id)
        user_gid = self.session.http.json(res, schema=self._channel_info_schema)['data']['gid']

        try:
            stream_data = self.session.http.get(self._stream_data_api_url_base.format(gid=user_gid))
            hls = self.session.http.json(stream_data, schema=self._stream_data_schema)['data']['video_src']
        except Exception:
            raise NoStreamsError(self.url)

        return HLSStream.parse_variant_playlist(self.session, hls)
예제 #7
0
    def _get_streams(self):
        user_id = self._url_re.match(self.url).group('id')

        try:
            api_response = self.session.http.get(self._api_url_base.format(id=user_id))
            streams = self.session.http.json(api_response, schema=self._api_response_schema)['data']['stream']
        except Exception:
            raise NoStreamsError(self.url)

        unique_stream_urls = []
        for stream in streams.keys():
            if streams[stream] not in unique_stream_urls:
                unique_stream_urls.append(streams[stream])
                quality = self._stream_qualities[stream] if stream in self._stream_qualities.keys() else "720p+"
                yield quality, HTTPStream(self.session, streams[stream])
예제 #8
0
    def _extract_streams(self, stream_id):
        res = self.session.http.get(STREAM_API_URL.format(stream_id),
                                    raise_for_status=False)
        stream_info = self.session.http.json(res, schema=_stream_schema)

        if stream_info.get("msg"):
            # error message
            log.error(stream_info.get("msg"))
            raise NoStreamsError(self.url)

        mapper = StreamMapper(
            lambda pattern, video: re.search(pattern, video[1]))
        mapper.map(r"/\w+\.m3u8", self._create_dynamic_streams, "HLS",
                   HLSStream.parse_variant_playlist)
        mapper.map(r"/\w+\.f4m", self._create_dynamic_streams, "HDS",
                   HDSStream.parse_manifest)
        mapper.map(r"^rtmp://", self._create_rtmp_stream)

        return mapper(stream_info.items())
    def get_stream_url(self, data):
        """
        Get the hls_url from the post request
        :param data: dict with "gcp" and "ogn"
        :return: hls_url
        """
        try:
            res = http.post(self.gate_url, headers=self.headers, data=data)
        except Exception as e:
            if "403" in str(e):
                self.logger.error("This Video is Not Available in Your Country.")
            raise NoStreamsError(self.url)

        r_data = parse_json(res.text)
        hls_url = r_data.get("stream")
        suffix = r_data.get("suffix")

        if hls_url is None and suffix:
            hls_url = self.create_hls_url(suffix)
        return hls_url