我想从ok.ru获得视频直接视频链接,所以我创建了这个php脚本来获取页面数据,它返回json文件。
<?php
$id ="947875089023";
$html = file_get_contents("https://ok.ru/videoembed/".$id);
$dom = new DOMDocument;
$dom->loadHTML($html);
$node = $dom->getElementsByTagName('div')->item(2);
$json = $node->getAttribute("data-options");
echo $json;
?>
在获得json文件后,我使用JavaScript获取所有视频urls
const obj = JSON.parse(JSON.stringify(
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* {"playerId":"VideoPopup_player_947875089023","width":"491","height":"275","notifyEnabled":true,"url":"https://st.mycdn.me/static/MegaPlayer/10-10-15/vp.swf","url11":"https://st.mycdn.me/static/MegaPlayer/10-10-15/vp11.swf","html5url":"//st.mycdn.me/static/MegaPlayer/10-11-60/okHtml5Player.min","minFlashVersionNewPlayer":"11.2","wmode":"opaque","asa":true,"provider":"UPLOADED_ODKL","flashvars":{"relatedAlways":"1","metadata":"{\"provider\":\"UPLOADED_ODKL\",\"service\":\"ok\",\"owner\":false,\"voted\":false,\"likeCount\":0,\"subscribed\":false,\"isWatchLater\":false,\"slot\":690,\"siteZone\":-1,\"showAd\":true,\"fromTime\":0,\"author\":{\"id\":\"571310739583\",\"name\":\"riki altwan\",\"profile\":\"/profile/571310739583\"},\"movie\":{\"id\":\"947875089023\",\"movieId\":\"947875089023\",\"likeId\":\"947875089023\",\"contentId\":\"426740025983\",\"poster\":\"https://i.mycdn.me/videoPreview?id=426740025983\\u0026type=37\\u0026idx=0\\u0026tkn=pAfyf6Av9sm4uotfYjxQFcRyGbE\\u0026fn=external_8\",\"duration\":\"1449\",\"title\":\"[WEHOH.COM]Ca_Tsu_-Ep30-to\",\"url\":\"https://ok.ru/video/947875089023\",\"link\":\"/video/947875089023\",\"collageInfo\":{\"imageType\":\"COLLAGE\",\"url\":\"https://i.mycdn.me/videoPreview?id=426740025983\\u0026type=36\\u0026idx=0\\u0026tkn=WzWDCxAWX5dKTWRFiQBcXzhZlx8\",\"frequency\":10,\"height\":44,\"width\":80,\"count\":145,\"tileWidth\":0,\"tileHeight\":0},\"status\":\"OK\",\"statusText\":\"OK\",\"isLive\":false,\"notPublished\":false},\"admanMetadata\":{},\"partnerId\":-1,\"ownerUserId\":\"571310739583\",\"ownerMovieId\":\"947875089023\",\"alwaysShowRec\":false,\"videos\":[{\"name\":\"mobile\",\"url\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=4\\u0026sig=wLDgZ2Ncspg\\u0026ct=0\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"seekSchema\":3,\"disallowed\":false},{\"name\":\"lowest\",\"url\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=0\\u0026sig=0DoDfFzi6XM\\u0026ct=0\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"seekSchema\":3,\"disallowed\":false},{\"name\":\"low\",\"url\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=1\\u0026sig=h4uYrTtMkQ8\\u0026ct=0\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"seekSchema\":3,\"disallowed\":false},{\"name\":\"sd\",\"url\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=2\\u0026sig=whiWdFAPXwU\\u0026ct=0\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"seekSchema\":3,\"disallowed\":false},{\"name\":\"hd\",\"url\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=3\\u0026sig=bGmvbFQz7NA\\u0026ct=0\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"seekSchema\":3,\"disallowed\":false}],\"metadataEmbedded\":\"\\u003C?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\\u003E\\u003CMPD xmlns:xsi=\\\"http://www.w3.org/2001/XMLSchema-instance\\\" xmlns=\\\"urn:mpeg:DASH:schema:MPD:2011\\\" xsi:schemaLocation=\\\"urn:mpeg:DASH:schema:MPD:2011\\\" type=\\\"static\\\" mediaPresentationDuration=\\\"PT1449.2S\\\" minBufferTime=\\\"PT0.5S\\\" profiles=\\\"urn:mpeg:dash:profile:isoff-on-demand:2011\\\"\\u003E\\u003CPeriod id=\\\"0\\\" start=\\\"PT0S\\\" duration=\\\"PT1449.2S\\\"\\u003E\\u003CAdaptationSet id=\\\"0\\\" segmentAlignment=\\\"true\\\" subsegmentAlignment=\\\"true\\\" subsegmentStartsWithSAP=\\\"1\\\"\\u003E\\u003CRepresentation id=\\\"0\\\" bandwidth=\\\"104768\\\" width=\\\"256\\\" height=\\\"144\\\" quality=\\\"mobile\\\" frameRate=\\\"24\\\" codecs=\\\"avc1.64000C,mp4a.40.2\\\" audioSamplingRate=\\\"44100\\\" mimeType=\\\"video/mp4\\\" startWithSAP=\\\"1\\\"\\u003E\\u003CBaseURL\\u003Ehttps://vd335.mycdn.me/?expires=1630432672237\\u0026amp;srcIp=95.217.203.187\\u0026amp;srcAg=UNKNOWN\\u0026amp;ms=185.226.53.44\\u0026amp;type=4\\u0026amp;sig=wLDgZ2Ncspg\\u0026amp;ct=4\\u0026amp;urls=185.226.52.60\\u0026amp;clientType=0\\u0026amp;id=426740025983\\u003C/BaseURL\\u003E\\u003CSegmentBase indexRange=\\\"1369-2564\\\"\\u003E\\u003CInitialization range=\\\"0-1368\\\"/\\u003E\\u003C/SegmentBase\\u003E\\u003C/Representation\\u003E\\u003CRepresentation id=\\\"1\\\" bandwidth=\\\"297152\\\" width=\\\"426\\\" height=\\\"240\\\" quality=\\\"lowest\\\" frameRate=\\\"24\\\" codecs=\\\"avc1.640015,mp4a.40.2\\\" audioSamplingRate=\\\"44100\\\" mimeType=\\\"video/mp4\\\" startWithSAP=\\\"1\\\"\\u003E\\u003CBaseURL\\u003Ehttps://vd335.mycdn.me/?expires=1630432672237\\u0026amp;srcIp=95.217.203.187\\u0026amp;srcAg=UNKNOWN\\u0026amp;ms=185.226.53.44\\u0026amp;type=0\\u0026amp;sig=0DoDfFzi6XM\\u0026amp;ct=4\\u0026amp;urls=185.226.52.60\\u0026amp;clientType=0\\u0026amp;id=426740025983\\u003C/BaseURL\\u003E\\u003CSegmentBase indexRange=\\\"1375-2570\\\"\\u003E\\u003CInitialization range=\\\"0-1374\\\"/\\u003E\\u003C/SegmentBase\\u003E\\u003C/Representation\\u003E\\u003CRepresentation id=\\\"2\\\" bandwidth=\\\"623897\\\" width=\\\"640\\\" height=\\\"360\\\" quality=\\\"low\\\" frameRate=\\\"24\\\" codecs=\\\"avc1.64001E,mp4a.40.2\\\" audioSamplingRate=\\\"44100\\\" mimeType=\\\"video/mp4\\\" startWithSAP=\\\"1\\\"\\u003E\\u003CBaseURL\\u003Ehttps://vd335.mycdn.me/?expires=1630432672237\\u0026amp;srcIp=95.217.203.187\\u0026amp;srcAg=UNKNOWN\\u0026amp;ms=185.226.53.44\\u0026amp;type=1\\u0026amp;sig=h4uYrTtMkQ8\\u0026amp;ct=4\\u0026amp;urls=185.226.52.60\\u0026amp;clientType=0\\u0026amp;id=426740025983\\u003C/BaseURL\\u003E\\u003CSegmentBase indexRange=\\\"1372-2567\\\"\\u003E\\u003CInitialization range=\\\"0-1371\\\"/\\u003E\\u003C/SegmentBase\\u003E\\u003C/Representation\\u003E\\u003CRepresentation id=\\\"3\\\" bandwidth=\\\"1088858\\\" width=\\\"852\\\" height=\\\"480\\\" quality=\\\"sd\\\" frameRate=\\\"24\\\" codecs=\\\"avc1.64001E,mp4a.40.2\\\" audioSamplingRate=\\\"44100\\\" mimeType=\\\"video/mp4\\\" startWithSAP=\\\"1\\\"\\u003E\\u003CBaseURL\\u003Ehttps://vd335.mycdn.me/?expires=1630432672237\\u0026amp;srcIp=95.217.203.187\\u0026amp;srcAg=UNKNOWN\\u0026amp;ms=185.226.53.44\\u0026amp;type=2\\u0026amp;sig=whiWdFAPXwU\\u0026amp;ct=4\\u0026amp;urls=185.226.52.60\\u0026amp;clientType=0\\u0026amp;id=426740025983\\u003C/BaseURL\\u003E\\u003CSegmentBase indexRange=\\\"1376-2571\\\"\\u003E\\u003CInitialization range=\\\"0-1375\\\"/\\u003E\\u003C/SegmentBase\\u003E\\u003C/Representation\\u003E\\u003CRepresentation id=\\\"4\\\" bandwidth=\\\"1982516\\\" width=\\\"1280\\\" height=\\\"720\\\" quality=\\\"hd\\\" frameRate=\\\"24\\\" codecs=\\\"avc1.64001F,mp4a.40.2\\\" audioSamplingRate=\\\"44100\\\" mimeType=\\\"video/mp4\\\" startWithSAP=\\\"1\\\"\\u003E\\u003CBaseURL\\u003Ehttps://vd335.mycdn.me/?expires=1630432672237\\u0026amp;srcIp=95.217.203.187\\u0026amp;srcAg=UNKNOWN\\u0026amp;ms=185.226.53.44\\u0026amp;type=3\\u0026amp;sig=bGmvbFQz7NA\\u0026amp;ct=4\\u0026amp;urls=185.226.52.60\\u0026amp;clientType=0\\u0026amp;id=426740025983\\u003C/BaseURL\\u003E\\u003CSegmentBase indexRange=\\\"1372-2567\\\"\\u003E\\u003CInitialization range=\\\"0-1371\\\"/\\u003E\\u003C/SegmentBase\\u003E\\u003C/Representation\\u003E\\u003C/AdaptationSet\\u003E\\u003C/Period\\u003E\\u003C/MPD\\u003E\",\"metadataUrl\":\"https://vd335.mycdn.me/?expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=1\\u0026sig=h4uYrTtMkQ8\\u0026ct=6\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"hlsManifestUrl\":\"https://vd335.mycdn.me/video.m3u8?cmd=videoPlayerCdn\\u0026expires=1630432672237\\u0026srcIp=95.217.203.187\\u0026srcAg=UNKNOWN\\u0026ms=185.226.53.44\\u0026type=4\\u0026sig=wLDgZ2Ncspg\\u0026ct=8\\u0026urls=185.226.52.60\\u0026clientType=0\\u0026id=426740025983\",\"failoverHosts\":[\"vd339.mycdn.me\"],\"autoplay\":{\"autoplayEnabled\":true,\"timeFromEnabled\":true,\"noRec\":false,\"fullScreenExit\":false,\"vitrinaSection\":\"recommended_movie\"},\"p2pInfo\":{\"isPeerEnabled\":false,\"ubsc\":0,\"pbsc\":0,\"mptpc\":0,\"pctmt\":0,\"pbesc\":0,\"prrt\":0,\"srt\":0,\"swrt\":0,\"dctt\":0},\"stunServers\":[{\"urls\":[\"stun:videostun.mycdn.me:80\"]}]}","saveLastPlayingTimeFrom":"30","castId":"559D7832","noDownload":"1","locale":"ru","noChatLikes":"1","noChannel":"1","webmSec":"20","enabledLocalStorage":"1","minCacheTime":"120","maxCachePartOfDurationMQ":"30","checkMQ":"1","noTrailer":"1","recSlot":"7178","noLikeButton":"1","maxCachePartOfDuration":"10","isAnonym":"1","jidx":"1","hideWatermark":"0","isEmbed":"1","noOkliveBanner":"1","minCacheTimeMQ":"20","ldChunk":"2000","showChat":"1","ldBuffer":"6000","feedAdLogic":"15,3,3,14400","siteId":"504","location":"AnonymVideoEmbed/anonymVideoEmbed/anonym","hideExpand":"1","adLogic":"15,0,3,14400","checkAutoplayBrowsers":"safari,chrome,opera,yandex,firefox"},"liveRertyTimeout":5000,"poster":"https://i.mycdn.me/videoPreview?id=426740025983\u0026type=37\u0026idx=0\u0026tkn=pAfyf6Av9sm4uotfYjxQFcRyGbE\u0026fn=external_8","isExternalPlayer":false,"isIframePlayer":false,"isHtml5Player":true,"timestamp":"1630346272240","stubEnabled":false,"verifyInline":false,"webrtcBrokenH264":false}
*/
)).flashvars.metadata;
const video = JSON.parse(JSON.stringify(JSON.parse(obj))).videos;
for (let i = 0; i < video.length; i++) {
url = video[i].url;
name = video[i].name;
if(name == "mobile"){
var a = url;
}
document.write(a);
但现在的问题是我不能播放那些视频。因为视频链接使用相同的标题确认。因为链接是在服务器端获取的,所以不能在客户端播放。
还有其他方法从ok.ru获得直接视频链接吗?或者如何发送客户端获取请求以使视频链接在客户端工作?
发布于 2021-08-31 22:18:59
代码应该是这样的。有点乱,因为我不习惯香草JS。
如果你有任何问题,那就问吧。
const axios = require("axios");
const cheerio = require("cheerio");
const url = "https://ok.ru/videoembed/947875089023";
const userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0";
function getData(link) {
return axios.get(link).then(res => {
const $ = cheerio.load(res.data);
const dataOptions = $("[data-module=OKVideo]").attr("dataset").options;
return new Promise.resolve(dataOptions);
})
.catch(err => new Promise.reject(err));
}
function extractUsefulData({
url,
expires,
srcIp,
srcAg,
ms,
type,
sig,
ct,
urls,
clientType,
id
}) {
return {
url,
expires,
srcIp,
srcAg,
ms,
type,
sig,
ct,
urls,
clientType,
id
}
}
function makeVideoLink(options) {
const host = options.url;
del options.url;
const videoLink = url + Object.keys(options)
.map(key => `${key}=${options[key]}`)
.join('&');
return videoLink;
}
function videoRequest(videoLink) {
axios.get(videoLink, {
headers: {
"user-agent": userAgent;
}
})
.then(res => new Promise.resolve(res.data))
.catch(err => new Promise.reject(err));
}
getData(url)
.then(data => extractUsefulData(data))
.then(data => makeVideoLink(data))
.then(link => videoRequest(link))
.catch(err => console.log(err));
https://stackoverflow.com/questions/69005221
复制相似问题