- 浏览: 1538792 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
Silverlight官网提供了许多的视频,也提供了下载地址,然而一个一个打开网页下载,470多个视频需要多长时间?
既然我们都是程序员,当然要找个办法批量下载。
这是我找出的地址:
[文件下载] sl批量下载URL.rar
现在来说说如何下载,以下2种方法解决问题
最开始的想法:
1、“爬”网页
既然网页提供下载,那只要“爬”每个SL视频网页,然后用正则解析,自然就OK了。
首先打开SL视频的网页:http://silverlight.net/learn/videos/all/
这里显示了所有SL视频,右键点击,查看网页源代码,看到所有视频的地址都是这样的
现在就该上程序,找出所有的地址了
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/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 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视频网页,然后查看源代码,我们可以看到这么一段
< 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地址
< 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这个类,打开这个类,看到这个方法
因为SL引用WCF只能用异步方法
好了,现在我们只要找到SL播放器如何使用这个方法,就知道如何调用了
最简单的方法,导出整个DLL,然后搜索GetVideoAsync这个方法,相信聪明的你肯定能找到这个方法在哪里调用的
最后,我们找到这个方法的调用地方,在MSCommunities.MediaPlayer 命名空间下的Page 类中
{
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方法做了什么
{
Application.Current.Resources.Add( " VideoID " , e.InitParams[ " videoid " ]);
....
}
注释:InitParams,获取作为 Silverlight 插件的 HTML 初始化的一部分传递的初始化参数。
即,从网页的< param name ="InitParams" 获取参数
好了,我们再回过头看看最开始的,嵌入SL的部分
< 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下载即可
批量视频下载集合包附件 |
欢迎访问作者博客:http://www.cnblogs.com/kyorry
发表评论
-
SilverLight异步调用WebService出错!
2010-01-19 12:58 5397SilverLight异步调用WebService出错! ... -
Silverlight播放器 C#语言
2010-01-13 13:30 3302这段时间研究Silverlight中的MediaElement ... -
使用Silverlight,制作简单播放器的一点点心得。
2010-01-13 13:28 3658首先介绍什么是Silverligh ... -
初探silverlight--简易播放器
2010-01-13 13:28 1518<UserControl xmlns=" ... -
新开发的silverlight视频播放器,
2010-01-13 13:21 4480http://www.chenjiliang.com/Arti ... -
Silverlight教程第四部分:使用 Style 元素更好地封装观感
2010-01-12 22:11 1265Silverlight教程第四部分 ... -
Silverlight Carousel: Creating a Silverlight Control Displays Picture in an Inte
2010-01-12 18:18 1895http://www.codeproject.com/KB/s ... -
Using projection to build a 3D carousel in Silverlight 3
2010-01-12 18:14 2330http://ww ... -
CoverFlow – built using Silverlight 3's 'Projection' feature
2010-01-12 18:11 1888CoverFlow – built using Silver ... -
silverlight动画播放停止重播等控制
2010-01-06 12:38 1382ani.begin() ani.stop(); ani. ... -
silverlight速学范例100
2010-01-06 12:37 1275silverlight速学范例100 ... -
Silverlight 中的 HTTP 通信和安全
2010-01-04 23:43 2007Silverlight 中的 HTTP 通信和安全 < ... -
Visual Studio的 诡异bug(mscorlib无法引用)引发的对话 and Silverlight XAML 构造出错
2010-01-04 09:25 4124... -
Silverlight常见问题及解决方法
2009-12-22 14:06 1277Silverlight常见问题及解决方法 ... -
网上常用免费webservice 查询
2009-12-22 12:47 4596网上常用免费webservice 查询 2008-11 ... -
必应 Bing 新特性之最新文章, Wolfram|Alpha 整合, 天气搜索等已推出
2009-12-21 23:33 1529必应 Bing 增加了一项“最新文章”的搜索结果特性,例如下图 ... -
Silverlight客户端和WCF服务器端共享类库
2009-12-21 23:21 1831在Silverlight企业级项目开发中,访问数据库是很常见的 ... -
Create a Silverlight Europe weather map
2009-12-21 22:55 1593I don’t generally fi ... -
必应地图图片系统(Tile System)之二
2009-12-21 22:53 2321【坐标系和地图图片编 ... -
必应地图SilverLight控件入门讲座之六:显示街景(Streetside)
2009-12-21 22:51 4876必应地图SilverLight控件入门讲座之六:显示街景(St ...
相关推荐
SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程
**Silverlight PDF 视频教程概述** Silverlight是一款由微软开发的富互联网应用程序平台,它提供了丰富的用户体验,尤其是在多媒体和图形处理方面。PDF(Portable Document Format)是Adobe Systems开发的一种文档...
【SILVERLIGHT完美入门教程】 Silverlight是微软推出的一款基于.NET Framework的浏览器插件,旨在为Web应用程序提供丰富的媒体体验和交互式用户界面。它曾经是开发富互联网应用程序(RIA)的重要工具,特别是在...
SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程
**Silverlight教程** Silverlight,由微软开发,是一款支持创建丰富的、交互式的Web应用程序的插件技术。它曾经是.NET Framework的重要组成部分,特别是在富互联网应用(RIA)领域中扮演着重要角色。本教程将深入...
### SilverLight 4 开发教程知识点总结 #### 一、SilverLight 4 概述 - **定义**:SilverLight 是由微软推出的一种用于创建丰富互联网应用(RIA)的跨浏览器、跨平台的框架。 - **特点**: - 跨平台支持:能够在...
**银光(Silverlight)教程** 本教程是针对Silverlight 2版本的,结合Visual Studio 2008,提供了一套系统的学习路径,旨在帮助初学者和有经验的开发者理解并掌握Silverlight的核心编程概念。Silverlight是微软推出的...
### SilverLight开发员工培训入门教程知识点汇总 #### 一、SilverLight简介 - **定义**:SilverLight是微软推出的一款用于构建Web前端应用程序的技术,它能够帮助开发者创建出功能强大且用户体验优秀的丰富型互联网...
### Silverlight(WPF)中文版教程相关知识点 #### 一、Silverlight简介及应用场景 - **定义**: Silverlight 是一种跨浏览器、跨平台的应用程序框架,由微软开发,旨在为 Web 和桌面应用程序提供丰富的用户体验。它...
**SilverLight入门教程** SilverLight是由微软开发的一种富互联网应用程序(RIA)技术,它结合了.NET Framework的部分功能,用于创建具有交互性、图形丰富和媒体优化的Web应用。本教程将引导初学者深入理解...
本资源包包含了丰富的Silverlight源码实例和视频教程,旨在帮助开发者更全面地理解和掌握Silverlight的开发技巧。 **Silverlight简介** Silverlight是微软推出的一种插件技术,用于创建和部署富媒体和交互式用户...
- **51aspx源码必读.txt**:这可能是对51aspx网站上有关Silverlight 2.0的源码解析或教程的引用。 - **chinaz.com.txt**:可能包含的是ChinaZ.com网站上关于Silverlight 2.0的资源链接或教程介绍。 - **readme.txt**...
**Silverlight基础详细教程** Silverlight是微软推出的一款强大的富互联网应用程序(RIA)开发平台,它主要用于构建具有丰富媒体体验和交互式用户界面的Web应用。这个经典教程深入浅出地介绍了Silverlight的基础...
此外,教程还将探讨Silverlight的媒体支持,如何嵌入和播放音频和视频,以及如何利用Silverlight的媒体框架实现更高级的多媒体功能。这为创建互动式的媒体内容提供了全面的指导。 在Silverlight 1.0中,数据访问是...
《Hello Silverlight 4》可能是一本入门级的教程,旨在帮助新手快速掌握Silverlight 4的基础知识。这本书可能会从简单的“Hello World”程序开始,逐步介绍如何创建基本的Silverlight应用程序,包括用户界面设计、...
2. **使用Silverlight插件**:安装Silverlight插件后,用户可以在任何支持的浏览器上运行Silverlight应用程序,享受高质量的音频、视频和交互性内容。 3. **元素的鼠标和键盘事件**:Silverlight支持多种鼠标和键盘...
Silverlight的核心功能包括动画、视频播放、矢量图形以及基于Ajax的应用开发等。 #### 二、Silverlight 2版本特点 Silverlight 2是Silverlight系列的一个重要版本,相比之前的版本,它具有以下特点: 1. **增强的...
ArcGIS Silverlight API应用开发教程详细介绍了如何利用ArcGIS API for Silverlight开发地理信息系统(GIS)应用。首先,教程引入了REST架构风格的概念,并解释了REST的基本原理和在Web服务中的优势。REST作为一种...