飞驴api怎么播放不了优酷开放api了

2774人阅读
&div id=&youkuplayer&&&/div&
&script type=&text/javascript&&
var isready =
function onYoukuPlayerReady(){
// call js api(pause video)
function pauseVideo() {
if (!isready)
player.pauseVideo();
function onPlayStart(){alert(&start&)}
function onPlayEnd(){alert(&Finished&)}
&script type=&text/javascript& src=&/jsapi&&
player = new YKU.Player('youkuplayer',{
client_id:'44503cca1be605b5',
vid:'XNjg4MjQyMTQ0',
width:480,
height:480,
autoplay:false,
show_related:true,
'onPlayerReady': onYoukuPlayerReady,
'onPlayStart':onPlayStart,
'onPlayEnd':onPlayEnd
的优酷提供了相关JS API,来检测视频播放;以及通过JS触发视频播放和暂停。
需要申请一个youku开发账号:client_id
视频id :vid
vid可以通过优酷播放页的分享给好友提供的flash地址和html代码中的sid获得。
player.playVideo();触发视频播放。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:184163次
积分:2281
积分:2281
排名:第9057名
原创:13篇
转载:144篇
评论:14条
(1)(1)(2)(4)(2)(1)(1)(4)(21)(7)(1)(2)(14)(10)(6)(2)(6)(1)(2)(6)(5)(2)(2)(4)(1)(12)(6)(7)(7)(14)(4)(1)(1)(2)(2)文章关键词:
热门织梦技巧教程
推荐织梦技巧教程
一周内免登录播放收费方案
收费方案针对每个应用,各个应用之间互不影响。
方案有效期为1年,费用见各个方案详情页。
购买方案后有最少5w次播放次数,每次成功的播放请求算做有效播放次数。
超过服务期后可再次购买,如果播放次数不够可以追加购买增量包。
应用等级区别
1000次/小时
50000次/小时
200000次/小时
您的Internet Explor 版本过低
为了得到我们往回走哪最好的体验效果,我们建议您升级到最新版本的Internet Explor 或选择另一个Web浏览器,如下图:优酷网视频应用API合作方案_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
优酷网视频应用API合作方案
如​何​借​势​优​酷​网​的​强​势​推​广​平​台​…​…
大小:10.36MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢其实流程大致是:调用飞驴下载API+js解析+文件下载+调用flvBind合并这样一个流程而已_(:з」∠)_
貌似是不用太多的说明。。嗯。。
起先的需求是从优酷上下载一些视频
不过网络上的各种软件 甚至是优酷自己的APP 都没有提供高清视频下载的功能
而且1080P视频本身对于优酷就是一种付费功能
只好自己DIY解决了=w=
一些模型类
class Youku {
public string U
public string T
public string Q
public int C
public List&YoukuFlvFile& FlvUrls = new List&YoukuFlvFile&();
class YoukuFlvFile {
public string FileN
public string FileU
public string LocalFileN
这里本来想找飞驴的开发者中心要权限来的_(:з」∠)_ 可惜被拒了..
只好截获网站自带的ajaxAPI...
这里要首先把页面地址转化为base64url 转化方法可以参考飞驴的开发文档
函数返回的是一串js代码 做进一步解析
顺带 这个api频繁调用会失效 大概服务器自己也要解析一会才有返回值...
CookieContainer cookie = new CookieContainer();
string getJS(string videoUrl) {
string vUrl64 = Base64Url(videoUrl);
string urlTop = &/?url=&+vUrl64;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(&/getFlv.php?url=&+vUrl64);
req.Referer = urlT
req.Method = &get&;
req.Accept = &application/javascript, */*;q=0.8&;
req.Headers.Add(HttpRequestHeader.AcceptLanguage, &zh-Hans-CN,zh-Hq=0.7,q=0.3&);
req.UserAgent = &Mozilla/5.0 ( MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)&;
req.Host = &&;
//req.CookieContainer =
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream(),Encoding.UTF8);
string result = sr.ReadToEnd();
resp.Close();
string Base64Url(string url) {
url = url.Replace(&://&,&:##&);
string vUrlBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(url));
vUrlBase64 = vUrlBase64.Replace('+','-').Replace('=','_');
return vUrlBase64;
JS解析获取flv下载地址
这个很蛋疼...返回的js是一大段eval语句 由多个flvout(html, id)函数调用组成
原本的飞驴页面则是直接执行这段js& 而我们不得不用正则表达式解析...
事实上我的思路是使用Regex解析,结合SgmlReader对html格式化,最后用LINQ2XML进行抓取
算是很节省代码的一系列过程了。。
这里想仔细研究的话就自行分析DOM结构吧=w=
函数返回一个Youku实例 包含子flv文件的文件名和下载地址
Youku GetYoukuFiles(string youkuUrl) {
Youku youku = new Youku();
youku.Url = youkuU
string js = getJS(youkuUrl);
Regex regex = new Regex(@&flvout\('(.+?)','(.+?)'\)&);
int idx = 0;
foreach(Match m in regex.Matches(js)) {
string html = string.Format(&&html&{0}&/html&&, m.Result(&$1&));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(html));
Sgml.SgmlReader r = new Sgml.SgmlReader();
r.DocType = &html&;
r.StripDocType =
r.InputStream = new StreamReader(ms);
var xml = XElement.Load(r);
var h4 = xml.XPathSelectElements(&./div/div/h4&).FirstOrDefault();
if (h4 != null) {
youku.Title = h4.V
string qua = xml.Elements(&span&).Skip(1).First().V
if (qua.Contains(&1080P&)) {
string count = xml.Elements(&span&).Skip(2).First().V
youku.Quality =
youku.Count = Convert.ToInt32(count);
var items = xml.Elements(&a&).Where(elem=& {
var attrRel = elem.Attribute(&rel&);
return attrRel != null && attrRel.Value==&noreferrer&;
}).Select(elem=&new {title = elem.Value, href = elem.Attribute(&href&).Value});
foreach(var item in items) {
var f = new YoukuFlvFile();
f.FileName = item.
f.FileUrl = item.
youku.FlvUrls.Add(f);
直接WebClient的干活 它的好处是如果出现exception会自动删除下载一半的文件...
如果想支持断点续传请自己编写更多文字_(:з」∠)_
void Download0(Youku m) {
var client = new WebClient();
if(m.FlvUrls.Count&0) {
string dir = bine(downloadDir, m.Title);
if (!Directory.Exists(dir)) {
Directory.CreateDirectory(dir);
foreach(var file in m.FlvUrls) {
file.LocalFileName = bine(dir, file.FileName);
if (!File.Exists(file.LocalFileName)) {
client.DownloadFile(file.FileUrl, file.LocalFileName);
Console.WriteLine(file.FileName+& 下载完毕&);
Console.WriteLine(file.FileName+& 文件已存在&);
直接用flvBind命令行工具 省时省力
原来想用ffmpeg直接转成mp4来的 我已经疯了=w=
因为windows上使用管道的恶心程度和参数的问题只好放弃...
如果知道怎么调教ffmpeg解决“多个x264流合并而且不二次编码”的旷世难题一定教教我_(:з」∠)_ 简直虐心
void Combine0(Youku m) {
ProcessStartInfo ps = new ProcessStartInfo(@&E:\Program files\ffmpeg-win64\bin\FlvBind.exe&);
ps.Arguments = string.Join(& &,
new[]{ m.Title+&.flv&}
.Concat(m.FlvUrls.Select(f=&f.LocalFileName))
.Select(str=&&\&&+str+&\&&)
ps.WorkingDirectory = downloadD
var p = Process.Start(ps);
p.WaitForExit();
Console.WriteLine(m.Title+& 合并完成&);
最后把上面的代码连上即可=w=
void Main()
string url = &/v_show/id_XNzU4OTM0Njg0.html&;
for(int t=0;t&5;t++) {
var m = GetYoukuFiles(url);
if (m.FlvUrls.Count&0) {
Download0(m);
if (!File.bine(downloadDir, m.Title+&.flv&))) {
Combine0(m);
Console.WriteLine(&获取失败...3秒后重试&);
Thread.Sleep(3000);
string downloadDir = @&D:\2014Cj&;
以上代码可以在win8x64 .net4.5& LINQPAD 4.48中正常执行
SgmlReader可以在csdn下载频道中找到
flvBind可以自行搜索 是一个很迷你的视频处理工具
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9159次
排名:千里之外
原创:12篇
评论:14条}

我要回帖

更多关于 优酷api接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信