?現在視頻博客滿天飛,你是否和我一樣,當看到一個好的視頻節目想把他下載下來,留著慢慢欣賞呢?但有的播客網站比較狡猾,不是一般的人壓根就找不到他的地址。
?? 于是我為了方便,想自己寫個找源視頻flv地址,但一個一個網站的分析他的html源代碼來處理,不僅效率不高,人家在服務器一改,你的壓根也就沒有用了。不知道那位高人有什么好的解決辦法?能高效的分析出播客視頻的flv源地址?
?
? 我說說我的2 個笨方法,也是可以找到他的源地址的。
1.用這2 個工具
charles(http://www.xk72.com/charles/) 和 (
fiddler)http://www.fiddlertool.com/Fiddler/ 一個是java寫的,一個.net寫的。他們都是用來監視http請求的。不管播客網站藏的多深,都能夠找的到。我開始想用net來調用 fiddler類庫,自己再封裝一下,如果成功了,那基本上所以的博客網站的視頻地址都能找到,不用一個一個的去分析他們的html源代碼了~ 但俺比教笨,現在還沒有搞定~
2:那只能用死辦法。分析html代碼。我寫了一個分析
土豆和
56 地址的。調這個方法。返回 flv地址.
?
小提示:(這只是個測試,代碼質量相當的差,你也別太在意 :)免的又有人大罵垃圾了~ )
?private?static?readonly?string?tudou?=?"http://{0}.tudou.com/flv/00{1}/{2}/{3}/{4}.flv";
?private?static?readonly?string?v56="http://{0}/flvdownload/{1}/{2}/{3}@56.com_56flv_{4}.flv";
?分析土豆網視頻
????????///?<summary>
????????///?分析土豆視頻地址
????????///?</summary>
????????///?<param?name="url">傳入的地址如:http://www.tudou.com/programs/view/rpVqBgWWHmg/</param>
????????///?<returns>返回視頻地址?視頻最終地址:http://player0005.tudou.com/flv/003/866/012/3866012.flv</returns>
????????public?string?ParseTudou(string?url)
????????{
????????????char[]?temp?=?null;
????????????string??strId?="";
????????????if?(url.IndexOf('#')?>?0)
????????????{
????????????????strId?=?url.Substring(url.IndexOf('#'));
????????????????temp?=?strId.ToCharArray();
????????????}
????????????else
????????????{
????????????????Normalize(ref?url);
????????????????string?htmlSource?=?GetHtmlSource(url);
????????????????strId?=?htmlSource.Substring(htmlSource.IndexOf("var?iid=")+8,?7);
?????????????????temp?=?strId.ToCharArray();
????????????}
????????????return?string.Format(tudou,?"player",?temp[0],?temp[1]?+?temp[2]?+?temp[3],?temp[4]?+?temp[5]?+?temp[6],?strId);
????????}
分析http://www.56.com
??????///?<summary>
??????///?分析http://www.56.com
??????///?</summary>
??????///?<param?name="url"></param>
??????///?<returns></returns>
????????public?string??Parse56(string?url)
????????{
???????????string?htmlSource=GetHtmlSource(url);
???????????int?start=htmlSource.IndexOf("swfUrl");
???????????if?(start<=0)
???????????{
???????????????System.Diagnostics.Debug.Assert(false,?"start 0");
???????????????return?"";
???????????}
???????????int?length=htmlSource.Substring(start).IndexOf(";");
???????????//array[6]=totaltimes
????????????string?swfUrl?=?htmlSource.Substring(start,?length);
????????????string[]?array=swfUrl.Split(new?char[]{'&'});
????????????for?(int?i?=?0;?i?<?array.Length;?i++)
????????????{
????????????????array[i]?=?array[i].Substring(array[i].IndexOf('=')?+?1);
????????????}
????????????StringBuilder?sb?=?new?StringBuilder();
????????????return?string.Format(v56,?array[1],?array[2],?array[3],?array[4],?array[5]);
????????}
公共方法
????????///?<summary>
????????///?得到html網頁
????????///?</summary>
????????///?<param?name="strurl"></param>
????????///?<returns></returns>
????????private??string?GetHtmlSource(string?strurl)
????????{
????????????string?htmlSource="";
????????????try
????????????{
????????????????Normalize(ref?strurl);
????????????????Uri?url?=?new?Uri(strurl);
????????????????HttpWebRequest?request?=?(HttpWebRequest)WebRequest.Create(url);
????????????????HttpWebResponse?response?=?(HttpWebResponse)request.GetResponse();
????????????????Stream?stream?=?response.GetResponseStream();
????????????????StreamReader?sr?=?new?StreamReader(stream);
????????????????htmlSource?=?sr.ReadToEnd();
???????????
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????System.Diagnostics.Debug.Assert(false,?ex.Message);
????????????}
????????????return?htmlSource;
????????}
????????private?void?Normalize(ref?string?url)
????????{
????????????if?(url.StartsWith("http://")?==?false)
????????????????url?=?"http://"?+?url;
????????????if?(url.IndexOf("/",?8)?==?-1)
????????????????url?+=?'/';
????????}
得到了flv地址,寫個類下載就容易多了。看看這個
http://www.codeproject.com/useritems/filedownloader.asp都給封裝好了。完全可以用的上~
地址和下載都搞定了。那就還差個 flv播放器了。看看這個
http://www.codeproject.com/cs/media/flashexternalapi.asp人家也有教咱們怎么做了。湊合這用用吧~
//像第2種方法樣一個網站一個網站的去分析~ 我是沒這精力~ 看樣子還是要在 (
fiddler)上下點功夫~ 歡迎指點交流~