Example #1
0
def get(url: str) -> dict:
    result = Result()
    try:
        av = re.findall(av_number_pattern, url)
        if av:
            av = av[0]
        else:
            raise NotFoundException
        url = f'https://www.bilibili.com/video/av{av}'

        rep = requests.get(url, headers=headers, timeout=15)
        if rep.status_code == 200:
            cover_url = re.findall(cover_pattern, rep.text)
            if cover_url:
                if '@' in cover_url[0]:
                    cover_url[0] = cover_url[0][:cover_url[0].index('@')]
                result.imgUrls.extend(cover_url)
            video_url = re.findall(video_pattern, rep.text)
            if video_url:
                result.videoUrls.extend(video_url)

        elif rep.status_code == 404:
            raise NotFoundException
        else:
            raise ServerErrorException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #2
0
def get(url: str) -> dict:
    result = Result()
    try:
        rep = requests.get(url, headers=headers, timeout=20)
        if rep.status_code == 200:
            text = rep.text

            title = re.findall(title_re, text)
            if title:
                result.videoName = title[0]

            mp4_720p_mp4 = re.findall(mp4_720p_mp4_re, text)[0]
            if mp4_720p_mp4:
                result.videoUrls.extend(mp4_720p_mp4)

            mp4_hd_mp4 = re.findall(mp4_hd_mp4_re, text)
            if mp4_hd_mp4:
                result.videoUrls.extend(mp4_hd_mp4)

            mp4_ld_mp4 = re.findall(mp4_ld_mp4_re, text)
            if mp4_ld_mp4:
                result.videoUrls.extend(mp4_ld_mp4)
        else:
            raise NotFoundException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #3
0
def get(url: str) -> dict:
    result  = Result()
    a = Wangyiyun()
    play_url = a.get(url)
    if play_url:
        result.audioUrls.append(play_url)
    else:
        result.err = 1
        result.msg = "未知错误"
    return result()
Example #4
0
def _get_not_logged(url: str) -> dict:
    result = Result()
    headers = {
        "accept": "application/json",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "zh-CN,zh;q=0.9",
        "content-length": "63",
        "content-type": "application/json",
        "cookie":
        "pgv_pvi=9657849856; pgv_pvid=2069474799; RK=aHJszqfoXm; ptcz=0fc0035b9509215f060561393c09f6cde3bccc1953e79c2b5b1ec450e4e67f19; LW_uid=s1i5E5d4v2a1p5n702J1O2y0q8; eas_sid=M1k5T5N4O28185X7J291x2K1A3; o_cookie=286183317; pac_uid=1_286183317; ied_qq=o0286183317; LW_sid=x1Y5D6W4h4H516F6X9l9V8S8Z3; tvfe_boss_uuid=fbb4b39b5afeb49b; psrf_qqopenid=A140C50D3D791392EA89131C8B01FE1D; psrf_qqaccess_token=D2F43F3C25900E66193345D276AF9559; psrf_qqrefresh_token=E48409D7E8E4F3D5C3869F104380AB3E; psrf_qqunionid=002C01991CFB436BCD8A27A0EE1DB9FF; qm_keyst=Q_H_L_2ajiOt50eapmue6Eg1-l_W6XztEBr_u0vZJAPs4xctJZNJdsEZONiDnNJ206icA; psrf_musickey_createtime=1574482649; psrf_access_token_expiresAt=1582258649; person_id_bak=5295507715828209; person_id_wsbeacon=5689667751647505; wsreq_logseq=336060008",
        "origin": "https://h5.weishi.qq.com",
        "referer": url,
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent":
        "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1",
        "x-requested-with": "XMLHttpRequest",
    }

    post_url = "https://h5.weishi.qq.com/webapp/json/challenge_feedrank/GetChallengeFeedDetail?t=0.2602280426206063&g_tk="

    # request payload {"feedid":"6YV0vjeP71IHTsV08","challenge_id":"100026","type":0}

    # get feedid, challenge_id
    query = parse_qs(urlparse(url).query)
    feedid = query.get('feedid')[0]
    challenge_id = query.get('challegeid')[0]

    # create request payload
    payload = {
        "feedid": feedid,
        "challenge_id": challenge_id,
        "type": 0,
    }

    # get data
    with requests.post(post_url,
                       headers=headers,
                       data=json.dumps(payload),
                       timeout=33) as rep:
        if rep.status_code == 200:
            # print(rep.json())
            data = rep.json().get('data')
            # print(data.get('feedinfos'))
            video_info = data.get('feedinfos')[0]
            title = video_info.get("feed_desc")
            play_url = video_info.get("video_url")
            result.videoName = title
            result.videoUrls.append(play_url)

    return result()
def get(url: str) -> dict:
    result = Result()
    headers = {
        "user-agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
    }
    video_info_url = "https://lens.zhihu.com/api/v4/videos/{id}"

    ids = []
    urls = []

    rep = rs.get(url, headers=headers)
    if rep.status_code == 200:
        ids = re.findall(r'https://www.zhihu.com/video/(\d{1,})', rep.text)

    if ids:
        for id in ids:
            rep = rs.get(video_info_url.format(id=id), headers=headers)
            if rep.status_code == 200:
                data = rep.json()
                playlist = data.get("playlist")
                temp = playlist.get("HD") or playlist.get(
                    "SD") or playlist.get("LD")
                if temp:
                    url = temp.get("play_url")
                    urls.append(url)

    result.videoUrls.extend(urls)
    return result()
def get(url: str) -> dict:
    result = Result()
    pid = int(url[33:])  # get pid
    post_data = {
        "pid": pid,
        "type": "post",
    }
    with requests.post(POST_URL,
                       headers=HEADERS,
                       data=json.dumps(post_data),
                       timeout=20) as rep:
        if rep.status_code == 200:
            data = rep.json()

            # 下面处理很乱,主要对着返回数据看就很简单
            id = data.get('data').get('post').get('imgs')[0].get('id')
            if id:
                play_url = data.get('data').get('post').get('videos').get(
                    str(id)).get('url')
                if not play_url:
                    play_url = ""
            else:
                play_url = ""
            # --------------------------------------------------------------
        else:
            play_url = ""
        result.videoUrls.append(play_url)

    return result()
Example #7
0
def _get_logged(url: str) -> dict:
    result = Result()
    headers = {
        'accept': 'application/json',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9',
        'content-length': '84',
        'content-type': 'application/json',
        'cookie':
        'pgv_pvi=9657849856; pgv_pvid=2069474799; RK=aHJszqfoXm; ptcz=0fc0035b9509215f060561393c09f6cde3bccc1953e79c2b5b1ec450e4e67f19; LW_uid=s1i5E5d4v2a1p5n702J1O2y0q8; eas_sid=M1k5T5N4O28185X7J291x2K1A3; o_cookie=286183317; pac_uid=1_286183317; ied_qq=o0286183317; LW_sid=x1Y5D6W4h4H516F6X9l9V8S8Z3; tvfe_boss_uuid=fbb4b39b5afeb49b; psrf_qqopenid=A140C50D3D791392EA89131C8B01FE1D; psrf_qqaccess_token=D2F43F3C25900E66193345D276AF9559; psrf_qqrefresh_token=E48409D7E8E4F3D5C3869F104380AB3E; psrf_qqunionid=002C01991CFB436BCD8A27A0EE1DB9FF; qm_keyst=Q_H_L_2ajiOt50eapmue6Eg1-l_W6XztEBr_u0vZJAPs4xctJZNJdsEZONiDnNJ206icA; psrf_musickey_createtime=1574482649; psrf_access_token_expiresAt=1582258649; person_id_bak=5295507715828209; person_id_wsbeacon=5689667751647505; wsreq_logseq=336060019',
        'origin': "https://h5.weishi.qq.com",
        'referer': url,
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-origin',
        'user-agent':
        'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1',
        'x-requested-with': 'XMLHttpRequest',
    }

    post_url = "https://h5.weishi.qq.com/webapp/json/weishi/WSH5GetPlayPage?t=0.16820895093158983&g_tk="

    # get feedid(id)
    query = parse_qs(urlparse(url).query)
    feedid = query.get('id')[0]

    payload = {
        "feedid": feedid,
        "recommendtype": 0,
        "datalvl": "all",
        "_weishi_mapExt": {}
    }

    with requests.post(post_url,
                       headers=headers,
                       data=json.dumps(payload),
                       timeout=33) as rep:
        if rep.status_code == 200:
            # print(rep.json())
            data = rep.json().get('data')
            # print(data.get('feedinfos'))
            video_info = data.get('feeds')[0]
            title = video_info.get("feed_desc")
            play_url = video_info.get("video_url")
            result.videoName = title
            result.videoUrls.append(play_url)

    return result()
Example #8
0
def get(url: str) -> dict:
    result = Result()
    try:
        rep = requests.get(url, headers=headers, timeout=10)
        if rep.status_code == 200:
            html = rep.text
            author = re.findall(author_pattern, html)
            if author:
                result.author = author[0]
            audio_name = re.findall(audio_name_pattern, html)
            if audio_name:
                result.audioName = audio_name[0]
            audio_url = re.findall(audio_url_pattern, html)
            if audio_url:
                result.audioUrls.extend(audio_url)
            else:
                result.err = 1

        elif rep.status_code == 404:
            raise NotFoundException
        else:
            raise ServerErrorException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #9
0
def get(url: str) -> dict:
    result = Result()
    try:
        id = re.findall(r'([0-9]{1,})', url)
        if id:
            id = id[0]
        else:
            raise NotFoundException

        # 得到最高品质以及歌曲信息
        rep = requests.get(song_info_url.format(id=id),
                           headers=headers,
                           timeout=11)
        if rep.status_code == 200:
            best_quality = rep.json().get('data').get('songinfo').get(
                'coopFormats')[0]
            author = rep.json().get('data').get('songinfo').get('artist')
            song_name = rep.json().get('data').get('songinfo').get('songName')
            result.author = author
            result.audioName = song_name

        if not best_quality: best_quality = '128kmp3'

        # 得到歌曲链接
        rep2 = requests.get(mp3_url.format(id=id, quality=best_quality))
        if rep2.status_code == 200:
            play_url = rep.json().get('url', '')
            result.audioUrls.append(play_url)
        else:
            result.msg = "歌曲链接没能得到"
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #10
0
def get(url: str) -> dict:
    result = Result()
    try:
        path = urlparse(url).path
        voiceId = path.split("/")[-1]
        if not voiceId:
            raise NotFoundException
        rep = rs.get(info_url.format(id=voiceId), headers=headers, timeout=11)
        if rep.status_code == 200:
            info = rep.json()
            if info['code'] == 0:
                userName = info.get("data").get("userVoice").get("userInfo").get("name")
                voiceName = info.get("data").get("userVoice").get("voiceInfo").get("name")
                voiceUrl= info.get("data").get("userVoice").get("voicePlayProperty").get("trackUrl")
                result.author = userName
                result.audioName = voiceName
                result.audioUrls.append(voiceUrl)
            else:
                raise SpecialErrorException
        else:
            raise NotFoundException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #11
0
def get(url: str) -> dict:
    result = Result()
    try:
        with requests.get(url=url, headers=HEADERS, timeout=50) as rep:
            if rep.status_code == 200:
                html = rep.text
                singer = re.findall(SINGER_PATTERN, html)
                if singer:
                    singer = singer[0]
                    result.author = singer
                song_name = re.findall(SONG_NAME_PATTERN, html)
                if song_name:
                    song_name = song_name[0]
                    result.audioName = song_name
                play_url = re.findall(PLAY_URL_PATTERN, html)
                if play_url:
                    result.audioUrls.extend(play_url)
                play_video = re.findall(PLAY_VIDEO_PATTERN, html)
                if play_video:
                    result.videoUrls.extend(play_video)
            else:
                raise NotFoundException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
Example #12
0
def get(share_url) -> dict:
    result = Result()
    try:
        # get share_url location
        rep1 = requests.get(share_url, headers=headers, timeout=10)
        share_url = rep1.headers.get('location', share_url)

        # get html_text
        rep2 = requests.get(share_url, headers=headers, timeout=10)
        html_text = rep2.text

        title = re.findall(title_pattern, html_text)
        if title:
            result.videoName = title[0]
        play_url = re.findall(play_url_pattern, html_text)
        if play_url:
            play_url = play_url[0].replace('playwm', 'play')

        # get video_url
        rep3 = requests.get(play_url,
                            headers=headers,
                            allow_redirects=False,
                            timeout=30)
        video_url = rep3.headers.get('location')
        if video_url:
            result.videoUrls.append(video_url)
        else:
            result.msg = "视频未能解析成功"

    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()
def get(url: str) -> dict:
    try:
        result = Result()
        headers = {
            "Connection":
            "keep-alive",
            "Content-Length":
            "209",
            "Content-Type":
            "text/plain;charset=UTF-8",
            "Cookie":
            "Hm_lvt_414bd23f4090657a5e2034429c836cca=1582267903; Hm_lpvt_414bd23f4090657a5e2034429c836cca=1582268032",
            "Host":
            "share.izuiyou.com",
            "Origin":
            "https://share.izuiyou.com",
            "Referer":
            url,
            "Sec-Fetch-Mode":
            "cors",
            "Sec-Fetch-Site":
            "same-origin",
            "User-Agent":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
        }
        post_url = "https://share.izuiyou.com/api/review/share_review"
        play_host = "http://tbvideo.ixiaochuan.cn/"

        path = urlparse(url).path
        temp = path.split("/")
        pid = temp[-2]
        rid = temp[-1]

        payload = {
            "h_av": "3.0",
            "h_dt": 9,
            "h_nt": 9,
            "h_ch": "web_app",
            "ua":
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
            "pid": f"{pid}",
            "rid": f"{rid}"
        }
        rep = requests.post(post_url,
                            data=json.dumps(payload),
                            headers=headers,
                            timeout=20)
        if rep.status_code == 200:
            data = rep.json()
            try:
                audio_info = data.get("data").get("review").get("audio")
                voice_text = audio_info.get("voice_text")
                uri = audio_info.get("uri")
                org_uri = audio_info.get("org_uri")
            except AttributeError:
                voice_text = ""
                uri = ""
                org_uri = ""
            if voice_text:
                result.text = voice_text
            if org_uri:
                org_uri = play_host + org_uri
                result.audioUrls.append(org_uri)
            elif uri:
                uri = play_host + uri
                result.audioUrls.append(uri)
        else:
            raise NotFoundException
    except errors as e:
        result.err = 1
        result.msg = e.message

    return result()