Silverlight官网提供了许多的视频,也提供了下载地址,然而一个一个打开网页下载,470多个视频需要多长时间? 既然我们都是程序员,当然要找个办法批量下载。 这是我找出的地址: [文件下载]sl批量下载URL.rar 现在来说说如何下载,以下2种方法解决问题 最开始的想法:

Silverlight官网提供了许多的视频,也提供了下载地址,然而一个一个打开网页下载,470多个视频需要多长时间?

既然我们都是程序员,当然要找个办法批量下载。

这是我找出的地址:

[文件下载]  sl批量下载URL.rar

现在来说说如何下载,以下2种方法解决问题

最开始的想法:

1、“爬”网页

既然网页提供下载,那只要“爬”每个SL视频网页,然后用正则解析,自然就OK了。

首先打开SL视频的网页:http://silverlight.net/learn/videos/all/

这里显示了所有SL视频,右键点击,查看网页源代码,看到所有视频的地址都是这样的

< a  href ="/learn/videos/all/http-request-with-httpwebrequest" >....

现在就该上程序,找出所有的地址了

Regex reg  =   new  Regex( " <a href=\ " ( / learn / videos / all / \\S + )\ " > " );
var match  =  reg.Match(html);
while  (match.Success)
{
     // anchors.Add(match.Value);
    anchors.Add( " http://silverlight.net "   +  match.Groups[ 1 ].Value);
    match  =  match.NextMatch();
}

这是我找出的所有连接地址

http://silverlight.net/learn/videos/all/Basic-Animation-Silverlight-3
http://silverlight.net/learn/videos/all/RichTextArea-Part-2
http://silverlight.net/learn/videos/all/Duplex-Services-in-Silverlight-3
http://silverlight.net/learn/videos/all/Change-Styles-Runtime-Silverlight-3
http://silverlight.net/learn/videos/all/Use-Isolated-Storage-SL3-Out-of-Browser
http://silverlight.net/learn/videos/all/Out-Of-Stream-Data-Access
http://silverlight.net/learn/videos/all/Access-Web-Camera-Microphone
http://silverlight.net/learn/videos/all/BiDi-Right-to-Left
http://silverlight.net/learn/videos/all/Right-Click-Mouse-Events
http://silverlight.net/learn/videos/all/Building-Custom-Bitrate-Meter
http://silverlight.net/learn/videos/all/Creating-Custom-Timeline-Markers
http://silverlight.net/learn/videos/all/Hosting-HTML-Content
http://silverlight.net/learn/videos/all/Using-the-ViewBox-Control
http://silverlight.net/learn/videos/all/Accessing-Global-Clipboard
http://silverlight.net/learn/videos/all/Notification-API
http://silverlight.net/learn/videos/all/MouseWheel-API

....

既然找出了SL视频的详细页地址,然后就是对每个页面“爬网”了,这里我们采用异步方法,提高效率

public   static  ManualResetEvent _allDone  =   new  ManualResetEvent( false );

public   static   void  Download()
{
    var url  =   "" ;
     using  (StreamReader reader  =   new  StreamReader( " all-silverlight-vedio-detail-url " ))
    {
        url  =  reader.ReadToEnd();
    }

var urlArray  =  url.Split( new   string [] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
    _totalFiles  =  urlArray.Length;

for  ( int  i  =   0 ; i  <  _totalFiles; i ++ )
    {
        var request  =  HttpWebRequest.Create(urlArray[i]);
        request.BeginGetResponse(ResponseCallback, request);
    }

_allDone.WaitOne();
}

static   int  _totalFiles;
static   int  _filesFlag;

private   static   void  ResponseCallback(IAsyncResult asynchronousResult)
{
    var request  =  (WebRequest)asynchronousResult.AsyncState;
    var response  =  request.EndGetResponse(asynchronousResult);
    var stream  =  response.GetResponseStream();
     using  (StreamReader reader  =   new  StreamReader(stream))
    {
        var name  =  GetFileNameFromUri(request.RequestUri.AbsolutePath);
        var html  =  reader.ReadToEnd();
         using  (StreamWriter writer  =   new  StreamWriter( " D:\\silverlight-vedios\\ "   +  name))
            writer.Write(html);
    }

_filesFlag ++ ;
     if  (_filesFlag  ==  _totalFiles)
        _allDone.Set();
}

private   static   string  GetFileNameFromUri( string  p)
{
    var i  =  p.LastIndexOf( ' / ' );
    var s  =  p.Substring(i  +   1 );
     return  s;
}

下载完所有视频网页之后,就要开始对网页进行分析,提取所有WMV视频,代码略

以上方法看似很完美了,可是我们仍然要采用第二种方法,

如果大家试过之后就会知道,微软给出的下载视频网址,很多是失效的链接

视频470多个,而找出的视频下载地址只有380多个

2、从微软提供的web service下载

思路:SL播放器肯定是通用的,想想微软也不可能为每个视频做个播放器

既然播放器通用,那肯定有地方获取要播放的视频地址

思路有了,那我们就要从SL播放器下手。

打开任意一个SL视频网页,然后查看源代码,我们可以看到这么一段

< object  id ="slMediaPlayer"  style ="width:400px;height:338px"  autoupdate ="true"  data ="data:application/x-silverlight-2,"  type ="application/x-silverlight-2" >
     < param  name ="MinRuntimeVersion"  value ="3.0.40624.0"   />
     < param  name ="source"  value =" /ClientBin/mediaplayer/MSCommunities.MediaPlayer.xap "   />
     < param  name ="InitParams"  value ="videoid=34056,username=Anonymous"   />
     < a  href ="http://go.microsoft.com/fwlink/?LinkId=149156 "  style ="text-decoration:none" >
         < img  src ="http://i1.silverlight.net/resources/images/content/misc/Install-Silverlight-400x338-VideoSize.png?cdn_id=20091118_3 "  alt ="Please install Silverlight or click download to watch video locally."   />
     </ a >
</ object >

上面我着色的地方,就是SL的地址,前面加上网址:http://silverlight.net/ /ClientBin/mediaplayer/MSCommunities.MediaPlayer.xap

下载之后,将XAP的后缀改为ZIP,然后打开,可以看到以下文件

写过SL程序的人,一看到这些文件应该立刻就明白了,他引用的是WCF服务!!

2个重要的文件,需要我们去看看

1、WCF配置文件:ServiceReferences.ClientConfig

2、播放器DLL文件:MSCommunities.MediaPlayer.dll

打开ServiceReferences.ClientConfig,我们可以一眼看到引用的service地址

< configuration >
     < system .serviceModel >
         < bindings >
             < basicHttpBinding >
                 < binding  name ="BasicHttpBinding_MediaPlayer"  maxBufferSize ="2147483647"
                    maxReceivedMessageSize ="2147483647" >
                     < security  mode ="None" >
                         < transport >
                             < extendedProtectionPolicy  policyEnforcement ="Never"   />
                         </ transport >
                     </ security >
                 </ binding >
             </ basicHttpBinding >
         </ bindings >
         < client >
             < endpoint  address ="http://www.silverlight.net/services/mediaplayer.svc "
                binding ="basicHttpBinding"  bindingConfiguration ="BasicHttpBinding_MediaPlayer"
                contract ="Services.Silverlight.MediaPlayer"  name ="BasicHttpBinding_MediaPlayer"   />
         </ client >
     </ system.serviceModel >
</ configuration >

WCF地址:http://www.silverlight.net/services/mediaplayer.svc

我们将这段地址COPY,然后在浏览器中打开,没有加密,能打开,GREAT!

然后我们建立一个工程,将这段地址以Service Reference的方式引入,工程类型不限

引入Service之后,我们可以看到几个非常有用的类,其中我们会用到的2个:

MediaPlayerClient (获取VEDIO就靠他了)

VedioInfo (视频对象类,我们会用到它的VideoSourceUri属性)

现在开始分析MediaPlayerClient,打开来看到里面有个方法GetVideo,参数是ID和USERNAME,返回值是VedioInfo太好了,方法现成的!

可是ID,和USERNAME,我们到哪儿去找呢?

其实对SL程序熟悉的人应该已经知道如何操作了,直接看网页,下面的文章是对不熟悉SL的人讲的。

还记得我上面提到的这个MSCommunities.MediaPlayer.dll 吗

微软的播放器就用它来获取地址的,那这个DLL里面肯定有获取地址的方法,如何找出来呢,上Reflector!

用Reflector打开这个DLL

解释下:

MSCommunities.MediaPlayer :播放器的相关类

MSCommunities.MediaPlayer.Services.Silverlight: SL播放器引用上面的WCF地址的代理类

自然,SL播放器也会用到MediaPlayerClient这个类,打开这个类,看到这个方法

public   void  GetVideoAsync( string  id,  string  userName);

因为SL引用WCF只能用异步方法

好了,现在我们只要找到SL播放器如何使用这个方法,就知道如何调用了

最简单的方法,导出整个DLL,然后搜索GetVideoAsync这个方法,相信聪明的你肯定能找到这个方法在哪里调用的

最后,我们找到这个方法的调用地方,在MSCommunities.MediaPlayer 命名空间下的Page 类中

private   void  InitGetVideoAsync()
{
     this .m_service.GetVideoAsync(Application.Current.Resources[ " VideoID " ].ToString(), Application.Current.Resources[ " UserName " ].ToString());
}

找到了!

它是从这2个地方获取ID和USERNAME的

Application.Current.Resources[" VideoID " ]  //获取ID

Application.Current.Resources[" UserName " ]  //获取USERNAME

最后,我们只要知道程序在哪里加载这2个信息的就行了

熟悉SL的人肯定一下就能想到是在APP里面加载的

不熟悉的人可以搜索,Application.Current.Resources是ResourceDictionary类型,加载自然会用到Add方法

好了,来看看APP类的Application_Startup方法做了什么

private   void  Application_Startup( object  sender, StartupEventArgs e)
{
    Application.Current.Resources.Add( " VideoID " , e.InitParams[ " videoid " ]);
    ....
}

注释:InitParams,获取作为 Silverlight 插件的 HTML 初始化的一部分传递的初始化参数。

即,从网页的< param name ="InitParams" 获取参数

好了,我们再回过头看看最开始的,嵌入SL的部分

< object  id ="slMediaPlayer"  style ="width:400px;height:338px"  autoupdate ="true"  data ="data:application/x-silverlight-2,"  type ="application/x-silverlight-2" >
     < param  name ="MinRuntimeVersion"  value ="3.0.40624.0"   />
     < param  name ="source"  value ="/ClientBin/mediaplayer/MSCommunities.MediaPlayer.xap"   />
     < param  name ="InitParams"  value ="videoid=34056,username=Anonymous"   />
     < a  href ="http://go.microsoft.com/fwlink/?LinkId=149156"  style ="text-decoration:none" >
         < img  src ="http://i1.silverlight.net/resources/images/content/misc/Install-Silverlight-400x338-VideoSize.png?cdn_id=20091118_3"  alt ="Please install Silverlight or click download to watch video locally."   />
     </ a >
</ object >

现在看看< param  name ="InitParams"  value ="videoid=34056,username=Anonymous"   />
看到了吧,vedioid 和 username都在这里了

剩下的事情就是利用我们下载的每个视频网页,找出每个视频的ID,然后用MediaPlayerClient下载即可

批量视频下载集合包附件

转载于:https://www.cnblogs.com/hunterzou/archive/2010/01/10/1643636.html

下载silverlight官网的全部视频教程相关推荐

  1. 快速下载Spring官网下载dist.zip中所有jar,例如spring-5.2.10.RELEASE-dist.zip

    下载Spring官网下载dist.zip中所有jar,例如spring-5.2.10.RELEASE-dist.zip 下载地址:http://repo.spring.io/libs-release- ...

  2. weigm怎么下载_彩七官网下载地址|官网

    游戏介绍 彩七官网下载地址|官网 是一款非常火爆的盒游戏,这款游戏非常受欢迎,因为它的玩法非常的丰富,在彩七官网下载地址|官网你可以自由建造任何事物,你可以打造一个属于你自己的世界,这不仅仅是一款沙盒 ...

  3. 【软件下载】Excel下载 word下载 官方 官网下载 原始镜像 开发工具 开发软件下载

    原文: [软件下载]Excel下载 word下载 官方 官网下载 原始镜像 开发工具 [开发软件下载] 官网 下载地址:www.liuguiqing.com.cn

  4. TM4C 123GXL上手简介(一) 如何下载从官网下载和使用相关资料

    TM4C 123GXL上手简介(一) 如何下载从官网下载和使用相关资料 相关网站介绍 TI官网:http://www.ti.com.cn/ TI中文社区:https://e2echina.ti.com ...

  5. HTML辅助下载个人官网源码+UI非常不错

    正文: 好看的辅助下载个人官网HTML源码+前端UI非常不错,本人打开测试了一下,整体i前端UI方面还是挺不错的,可以将index.html源码改为其它任何类型的个人主页. 程序: wwrys.lan ...

  6. bootstrapvalidat cdn_bootstrapValidator插件下载、官网地址、免费CDN加速地址等

    bootstrapValidator插件下载.官网地址.免费CDN加速地址等 : 04-07 22:10 : 146次 : 0条 1赞 点赞 简介这篇文章为你提供bootstrapValidator插 ...

  7. 如何下载西门子官网的受限文档和软件固件等资源?

    如何下载西门子官网的受限文档和软件固件等资源? 西家官网以及论坛上资料种类很多,文档都很全,基本可以解决大部分工控行业的问题.但是大家可能也发现了一个问题,有些时候一些文档和软件等资源下载是受限制的, ...

  8. 用于下载AD官网登录账号:User name: fuxin918@fuxin918.com Passeword: s6c0W1w8

    用于下载AD官网登录账号:User name: fuxin918@fuxin918.com Passeword:  s6c0W1w8 转载于:https://www.cnblogs.com/linkf ...

  9. 今天微软关闭Silverlight官网,Sivlerlight真得要死了吗?

    不出大家所料,微软正一步步地放弃Silverlight,虽然前阵子微软在发布Silverlight5时还嘴硬,但是微软接下来的一些举止和态度,都明显地表明了Silverlight正在走下坡路. 微软不 ...

  10. 适用于各类软件工具下载页面官网单页静态网站源码

    介绍: 一款适用于各种软件,游戏,工具箱等软件的电脑端下载页面,界面布局简洁且能给用户提供的信息量十足,可用于为用户提供软件使用中的常见问题. 功能介绍: 源码首页可设置1张软件大图,以及5张软件界面 ...

最新文章

  1. ASP.NET,IIS7.0 上传大视频文件报错
  2. linux之dup和dup2函数解析
  3. HDU1002 Problem II(大数相加)(C++题解)
  4. 【坑爹微信】总有一款接口能坑你到吐血 --- 微信开发经验录
  5. ubuntu下最简单的MySQL安装教程
  6. ie浏览器修复_Win7或Win8系统变慢,功能没法用,如何一键修复系统?
  7. NGUI如何创建自己的精灵图集
  8. 收藏 | PyTorch常用代码段合集
  9. nginx里配置跨域
  10. 机器学习实战(十二)降维(PCA、SVD)
  11. 合并果子(贪心+优先队列)
  12. 定义一个list对象数组 java_javascript定义一个list
  13. Microsoft Edge浏览器设置编码方式
  14. C# excel net core读取xlsm
  15. python爬虫post请求翻页_python爬虫如何POST request payload形式的请求
  16. extjs 数字校园-云资源平台 2014.2.4-班级座位表
  17. 开源的压力测试工具 PyLot
  18. 别笑话爬虫工程师了,数仓库工程师也被警察传话了。
  19. 斯坦福大学开发PETE装置吸收60%的太阳能
  20. JAVA 知识点 | Hook

热门文章

  1. 【ACL2020】详解基于显式语义分解的词典释义生成
  2. 冬天来了,能暖心的不止有女朋友,还有它。
  3. [ACL18]基于Self-Attentive的成分句法分析
  4. numpy 常用产生随机数方法
  5. 循环队列的实现笔记-c++
  6. Kotlin的互操作——Kotlin与Java互相调用
  7. 深度学习:transformer模型
  8. Machine Learning - VI. Logistic Regression逻辑回归 (Week 3)
  9. python创建字符串数组_python – 如何为多处理初始化字符串数组
  10. python数据分析模型选择_python学习-数据分析2(分类型数据处理+SVM建模)