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()
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()
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()
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()
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()
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()
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()
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()
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()
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()