现在视频博客满天飞,你是否和我一样,当看到一个好的视频节目想把他下载下来,留着慢慢欣赏呢?但有的播客网站比较狡猾,不是一般的人压根就找不到他的地址。
于是我为了方便,想自己写个找源视频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)上下点功夫~ 欢迎指点交流~