// ==UserScript== // @name 获取网页版抖音直播流地址、视频地址,获取网页版快手视频地址 // @namespace http://tampermonkey.net/ // @version 1.9.0 // @description 获取网页版抖音直播流地址,可直接使用VLC播放器播放,在VLC内选择Open Network,粘贴地址打开即可,本脚本参考了@xiaozhuai的虎牙直播流获取脚本 // @author nefer pitou // @match *.douyin.com/* // @match *.kuaishou.com/* // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/436781/%E8%8E%B7%E5%8F%96%E7%BD%91%E9%A1%B5%E7%89%88%E6%8A%96%E9%9F%B3%E7%9B%B4%E6%92%AD%E6%B5%81%E5%9C%B0%E5%9D%80%E3%80%81%E8%A7%86%E9%A2%91%E5%9C%B0%E5%9D%80%EF%BC%8C%E8%8E%B7%E5%8F%96%E7%BD%91%E9%A1%B5%E7%89%88%E5%BF%AB%E6%89%8B%E8%A7%86%E9%A2%91%E5%9C%B0%E5%9D%80.user.js // @updateURL https://update.greasyfork.icu/scripts/436781/%E8%8E%B7%E5%8F%96%E7%BD%91%E9%A1%B5%E7%89%88%E6%8A%96%E9%9F%B3%E7%9B%B4%E6%92%AD%E6%B5%81%E5%9C%B0%E5%9D%80%E3%80%81%E8%A7%86%E9%A2%91%E5%9C%B0%E5%9D%80%EF%BC%8C%E8%8E%B7%E5%8F%96%E7%BD%91%E9%A1%B5%E7%89%88%E5%BF%AB%E6%89%8B%E8%A7%86%E9%A2%91%E5%9C%B0%E5%9D%80.meta.js // ==/UserScript== (function() { 'use strict'; var url = window.location.href; /* 获取完整URL */ function heredoc(fn) { return fn.toString().split('\n').slice(1,-1).join('\n') + '\n' } var boxHtml = '暂无资源'; var render_data = ''; //(https|http)(://live\.douyin\.com/)(\w+) //直播模块 var reg_live = /(https:\/\/live\.douyin\.com\/)([A-Za-z0-9]+)/; if (reg_live.test(url)){ //console.log('***************'); render_data = decodeURIComponent(document.getElementById('RENDER_DATA').innerHTML); //console.log(render_data); render_data = JSON.parse(render_data); var stream_url = render_data.initialState.roomStore.roomInfo.room.stream_url; //未开播 if (stream_url == null){ boxHtml = '状态: 未开播'; }else{ boxHtml = '状态: 正在直播'; var flv_urls = stream_url.flv_pull_url; var hls_urls = stream_url.hls_pull_url_map; //console.log(flv_urls); //console.log(hls_urls); /* 原画FULL_HD1,超清HD1,高清SD1,标清SD2 */ try{ var data = []; //console.log(flv_urls); if (flv_urls.FULL_HD1 != undefined){ data.push({ label: '(flv) 原画', url: flv_urls.FULL_HD1, }); } if (flv_urls.HD1 != undefined){ data.push({ label: '(flv) 超清', url: flv_urls.HD1, }); } if (flv_urls.SD1 != undefined){ data.push({ label: '(flv) 高清', url: flv_urls.SD1, }); } if (flv_urls.SD2 != undefined){ data.push({ label: '(flv) 标清', url: flv_urls.SD2, }); } //console.log(hls_urls); if (hls_urls.FULL_HD1 != undefined){ data.push({ label: '(m3u8) 原画', url: hls_urls.FULL_HD1, }); } if (hls_urls.HD1 != undefined){ data.push({ label: '(m3u8) 超清', url: hls_urls.HD1, }); } if (hls_urls.SD1 != undefined){ data.push({ label: '(m3u8) 高清', url: hls_urls.SD1, }); } if (hls_urls.SD2 != undefined){ data.push({ label: '(m3u8) 标清', url: hls_urls.SD2, }); } for(var j=0; j'+data[j].label+'复制'; } }catch(e){ boxHtml += '解析流数据错误'; console.error(e); } } } window.toggleFlvUrlBox = function() { var flvUrlBoxBtn = document.getElementById('flv-url-box-btn'); var flvUrlBox = document.getElementById('flv-url-box'); if(flvUrlBox.style.display==='none'){ //主页推荐或关注页,由于页面延迟加载的关系,所以这里点击了按钮再解析页面 url = window.location.href; console.log('111',url); //####################### //***********快手************ //快手短视频 //www.kuaishou.com/short-video/3xq4ragn6i4prki var reg_kuaishou_short_video = /(https:\/\/www\.kuaishou\.com\/short-video\/)([A-Za-z0-9]+)/; //快手长视频 //https://www.kuaishou.com/video/3xbp249kb66qniy var reg_kuaishou_long_video = /(https:\/\/www\.kuaishou\.com\/video\/)([A-Za-z0-9]+)/; if (reg_kuaishou_short_video.test(url) || reg_kuaishou_long_video.test(url)){ let video_url = document.getElementsByClassName('kwai-player-container-video')[0].getElementsByClassName('player-video')[0].getAttribute('src'); console.log('video_url=',video_url) let k = 0; let url_box = document.getElementById('flv-url-box'); url_box.innerHTML = ""; let div = document.createElement("div"); div.setAttribute('class','flv-url-item'); let label = document.createElement("label"); label.innerText = '视频地址:'; div.appendChild(label); let input = document.createElement("input"); input.setAttribute('id', 'flv-url-'+k); input.setAttribute('value',video_url); div.appendChild(input); let a = document.createElement("a"); a.setAttribute('onclick','copyFlvUrl('+k+')'); a.innerText = '复制'; div.appendChild(a); url_box.appendChild(div); } //快手电影 //https://www.kuaishou.com/movie/video/3x9754j2vm2piq6 /* var reg_kuaishou_movie = /(https:\/\/www\.kuaishou\.com\/movie\/video\/)([A-Za-z0-9]+)/; if (reg_kuaishou_movie.test(url)){ let video_url = document.getElementsByClassName('kwai-player-container-video')[0].getElementsByClassName('player-video')[0].getAttribute('src'); console.log('video_url=',video_url) let k = 0; let url_box = document.getElementById('flv-url-box'); url_box.innerHTML = ""; let div = document.createElement("div"); div.setAttribute('class','flv-url-item'); let label = document.createElement("label"); label.innerText = '视频地址:'; div.appendChild(label); let input = document.createElement("input"); input.setAttribute('id', 'flv-url-'+k); input.setAttribute('value',video_url); div.appendChild(input); let a = document.createElement("a"); a.setAttribute('onclick','copyFlvUrl('+k+')'); a.innerText = '复制'; div.appendChild(a); url_box.appendChild(div); } */ //快手直播 //https://live.kuaishou.com/u/du907432053 //var reg_kuaishou_live = /(https:\/\/live\.kuaishou\.com\/u\/)([A-Za-z0-9_]+)/; //if (reg_kuaishou_live.test(url)){ //} //***********快手************ //####################### if (url == 'https://www.douyin.com/' || url == 'https://www.douyin.com/follow' || url == 'https://www.douyin.com/?enter=guide'){ console.log(url); console.log('嘻嘻'); let swiper_slide_active = document.getElementsByClassName('swiper-slide-active')[0]; //console.log('swiper_slide_active=',swiper_slide_active); let video = swiper_slide_active.getElementsByTagName('video')[0]; if (video != undefined){//处理出现直播的情况 let src = video.getAttribute('src'); console.log('src:',src); if (src == null){ let sources = video.getElementsByTagName('source'); let url_box = document.getElementById('flv-url-box'); url_box.innerHTML = ""; for(let k=0; k'; for (let len=videoPlayInfo.length,i=0; i0; len=len-1){ parent_node.removeChild(tags[0]); } parent_node.innerHTML = "暂无资源"; } } } window.copyFlvUrl = function(index) { var input = document.getElementById('flv-url-'+index); input.select(); document.execCommand("Copy"); var flvUrlBox = document.getElementById('flv-url-box'); flvUrlBox.style.display='none'; } var wrapper = document.createElement("div"); wrapper.style.display = 'inline-block'; wrapper.innerHTML = heredoc(function(){/* __box_html__ */}).replace('__box_html__', boxHtml); document.body.append(wrapper); console.log('####### end ######'); })();