- 浏览: 1488388 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 5362SilverLight异步调用WebService出错! ... -
Silverlight播放器 C#语言
2010-01-13 13:30 3259这段时间研究Silverlight中的MediaElement ... -
使用Silverlight,制作简单播放器的一点点心得。
2010-01-13 13:28 3611首先介绍什么是Silverligh ... -
初探silverlight--简易播放器
2010-01-13 13:28 1472<UserControl xmlns=" ... -
新开发的silverlight视频播放器,
2010-01-13 13:21 4435http://www.chenjiliang.com/Arti ... -
Silverlight教程第四部分:使用 Style 元素更好地封装观感
2010-01-12 22:11 1223Silverlight教程第四部分 ... -
Silverlight Carousel: Creating a Silverlight Control Displays Picture in an Inte
2010-01-12 18:18 1818http://www.codeproject.com/KB/s ... -
Using projection to build a 3D carousel in Silverlight 3
2010-01-12 18:14 2281http://ww ... -
CoverFlow – built using Silverlight 3's 'Projection' feature
2010-01-12 18:11 1842CoverFlow – built using Silver ... -
silverlight动画播放停止重播等控制
2010-01-06 12:38 1347ani.begin() ani.stop(); ani. ... -
silverlight速学范例100
2010-01-06 12:37 1236silverlight速学范例100 ... -
Silverlight 中的 HTTP 通信和安全
2010-01-04 23:43 1973Silverlight 中的 HTTP 通信和安全 < ... -
Visual Studio的 诡异bug(mscorlib无法引用)引发的对话 and Silverlight XAML 构造出错
2010-01-04 09:25 4074... -
Silverlight常见问题及解决方法
2009-12-22 14:06 1225Silverlight常见问题及解决方法 ... -
网上常用免费webservice 查询
2009-12-22 12:47 4552网上常用免费webservice 查询 2008-11 ... -
必应 Bing 新特性之最新文章, Wolfram|Alpha 整合, 天气搜索等已推出
2009-12-21 23:33 1460必应 Bing 增加了一项“最新文章”的搜索结果特性,例如下图 ... -
Silverlight客户端和WCF服务器端共享类库
2009-12-21 23:21 1789在Silverlight企业级项目开发中,访问数据库是很常见的 ... -
Create a Silverlight Europe weather map
2009-12-21 22:55 1538I don’t generally fi ... -
必应地图图片系统(Tile System)之二
2009-12-21 22:53 2242【坐标系和地图图片编 ... -
必应地图SilverLight控件入门讲座之六:显示街景(Streetside)
2009-12-21 22:51 4815必应地图SilverLight控件入门讲座之六:显示街景(St ...
相关推荐
SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程 SilverLight 2.0 调用 WebService 视频教程
SILVERLIGHT SILVERLIGHT 完美入门教程
SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程 SilverLight 2.0 和Sockets通讯视频教程
SilverlightPDf视频教程下载 含代码
微软Silverlight探秘教程(之(数据源对象的访问,一视频+一pdf
18、Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据, 以流的方式上传/下载数据 介绍 Silverlight 2.0 详解WebClient,以字符串的形式上传、下载数据;以流的方式上传、下载数据。 WebClient -...
微软silverlight探秘教程(20集):网络通信与开发示例,包括一视频+一个pdf帮助文档
资源名称:MVVM模式开发电子书 视频教程资源目录:【】215063bb8280440ff37b9d002bbc4726【】Advanced.MVVM【】Apress.Pro.WPF.and.Silverlight.MVVM.Dec.2010【】Developer’sGuidetoMicrosoftPrism4【】MVVM入门与...
DEV 完整视频教程 包含winform silverlight asp.net coderush report 百度网盘地址。分享时间:2014-08-26 19:55:39 如遇百度大姨妈! 请联系:ruanjian3101@163.com
Python语言编程学习资料(电子书+视频教程)下载汇总 最新最全Ruby、Ruby on Rails精品电子书等学习资料下载 数据库管理系统(DBMS)精品学习资源汇总:MySQL篇 | SQL Server篇 | Oracle篇 ActionScript、Flex、AIR等...
Silverlight技术开发,主要针对网页开发爱好者
学习Widows Phone8.1的移动开发,需要C#基础、.Net平台基础、WPF(Silverlight)基础、移动互联网开发理念,已经非常好的英文读写能力,对于我们技术屌丝来说非常痛苦,传智播客为此专门安排了Windows Phone8.1开发...
全新的,更合理的 Tag,多媒体对象将不再全部绑定在 object 或 embed Tag 中,而是视频有视频 的 Tag,音频有音频的 Tag。本地数据库。这个功能将内嵌一个本地的 SQL 数据库,以加速交互式搜 索,缓存以及索引功能...
全新的,更合理的 Tag,多媒体对象将不再全部绑定在 object 或 embed Tag 中,而是视频有视频 的 Tag,音频有音频的 Tag。本地数据库。这个功能将内嵌一个本地的 SQL 数据库,以加速交互式搜 索,缓存以及索引功能。...
微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……。这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了诸如Binding、DependencyProperty、RoutedEvents、Command、...
Silverlight 经典教程[MP4] Qt 中级课程 (上)[MP4] Python系统管理[MP4] PS抠图秘技[MP4] ppyygg PowerPoint(PPT) 达人进阶[MP4] PHP基础教程[MP4] PHP和MySQL Web开发 高级教程[MP4] PHP和MySQL Web开发 ...
以下的一些博客提供了一些可以降低视频占用资源配置方法的一些看法,而且给出了一个免费的下载资源—IIS 7.0流量限制模块,它公布有一段日子了,其功能是可以在提供以任何视频技术实现形式(包括Silverlight, ...
全新的,更合理的 Tag,多媒体对象将不再全部绑定在 object 或 embed Tag 中,而是视频有视频 的 Tag,音频有音频的 Tag。本地数据库。这个功能将内嵌一个本地的 SQL 数据库,以加速交互式搜 索,缓存以及索引功能...