今天帮同事看了一下小程序的东西,发现腾讯视频的地址是随时改变的,如果放置一个固定地址,第二天就不能访问了。查了一下网上的,都只是一些思路,这里是自己写的一个获取地址代码,觉得有哪里需要改动欢迎评价。
下面就直接贴代码了
/// <summary>
/// 获取视频地址xml
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string geturl(string str)
{
string newurl = "http://vv.video.qq.com/getinfo?vids=" + str + "&platform=101001&charge=0&otype=xml";
WebRequest wRequest = WebRequest.Create(newurl);
wRequest.Method = "POST";
wRequest.ContentType = "application/x-www-form-urlencoded;charset=utf-8 ";
WebResponse wResponse = wRequest.GetResponse();
Stream stream = wResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
string result = reader.ReadToEnd(); //url返回的值
reader.Close();
wResponse.Close();
return result;
}
public JsonResult getVid(string url)//url是原来没有解析的地址,比如:https://v.qq.com/x/page/s03648e6b6h.html
{
string str = url.Substring(24, 11); //这里是截取vid
string jsonstr= geturl(str);
//把xml字符串的我们把前面的QZOutputJson=跟最后的 ;过滤掉
if (jsonstr.Contains("QZOutputJson="))
{
jsonstr = jsonstr.Replace("QZOutputJson=","");
}
if (jsonstr.Contains(";"))
{
jsonstr = jsonstr.Replace(";", "");
}
XmlDocument xmlDoc = ConvertStringToXmlDocument(jsonstr);
XmlNodeList rootul = xmlDoc.SelectNodes("//ui");//获取ui下的子节点List
string myurl = "";
foreach (XmlNode item in rootul)
{
XmlNode townode = item.SelectSingleNode("vt");
if (townode.InnerText == "106")
{
myurl = (item.SelectSingleNode("url")).InnerText;
break;
}
}
if (myurl=="")
{
myurl= System.Configuration.ConfigurationSettings.AppSettings["vedioUrl"];//每次刷新都会改变,可能获取不到值,所以把webconfig放入一个固定值,这个值可以上次获取到就把它加入webconfig
}
XmlNode rootvi = xmlDoc.SelectSingleNode("//vi");
string myfn = (rootvi.SelectSingleNode("fn")).InnerText;
string myfvkey = (rootvi.SelectSingleNode("fvkey")).InnerText;
string tourl = myurl + myfn + "?vkey=" + myfvkey;
return Json(tourl, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 将字符串(符合xml格式)转换为XmlDocument
/// </summary>
/// <param name="xmlString">XML格式字符串</param>
/// <returns></returns>
public XmlDocument ConvertStringToXmlDocument(string xmlString)
{
XmlDocument document = new XmlDocument();
document.LoadXml(xmlString);
return document;
}
//下面是xml原文 可格式化后与上面代码比对
<root><dltype>1</dltype><exem>0</exem><fl><cnt>2</cnt><fi><id>100701</id><name>msd</name><lmt>0</lmt><sb>1</sb><cname>标清;(270P)</cname><br>29</br><drm>0</drm><video>1</video><audio>1</audio><fs>1483986</fs><sl>1</sl></fi><fi><id>2</id><name>mp4</name><lmt>0</lmt><sb>1</sb><cname>高清;(480P)</cname><br>34</br><drm>0</drm><video>1</video><audio>1</audio><fs>3034343</fs><sl>0</sl></fi></fl><hs>0</hs><ip>222.247.209.43</ip><ls>0</ls><preview>49</preview><s>o</s><sfl><cnt>0</cnt></sfl><tm>1508400146</tm><vl><cnt>1</cnt><vi><br>29</br><ch>0</ch><cl><fc>0</fc><keyid>s03648e6b6h.100701</keyid></cl><ct>21600</ct><drm>0</drm><dsb>0</dsb><fmd5>85861493a7ffd203508605b83bf4ffb7</fmd5><fn>s03648e6b6h.m701.mp4</fn><fs>1483986</fs><fst>5</fst><fvkey>364452075FDD0EDD71265437D49D5A1852D25879C4AA37E6842C591116F69D6018F5D7CAEDAF2935F57939795BFC19C4A26D15280E9AD2EA78EB062AB24F638C2A121A1C8E6A89456FFB4944D9E7D095AB5A0C84A46A09077035C8E17C82033ED7987F3E002E8A0F</fvkey><head>0</head><hevc>0</hevc><iflag>0</iflag><level>0</level><lnk>s03648e6b6h</lnk><logo>1</logo><mst>8</mst><share>1</share><sp>0</sp><st>2</st><tail>0</tail><td>49.2</td><ti>新品上市宣传片</ti><type>3</type><ul><ui><url>http://ugcbsy.qq.com/flv/55/19/</url><vt>136</vt><dtc>0</dtc><dt>2</dt></ui><ui><url>http://124.232.155.153/vhot2.qqvideo.tc.qq.com/AVHybXzSNNaflXig41L4OlnmporSxXpLdrm5Oz6NTvWc/</url><vt>200</vt><dtc>0</dtc><dt>2</dt></ui><ui><url>http://ugcws.video.gtimg.com/flv/55/19/</url><vt>106</vt><dtc>0</dtc><dt>2</dt></ui><ui><url>http://video.dispatch.tc.qq.com/</url><vt>0</vt><dtc>0</dtc><dt>2</dt></ui></ul><vh>160</vh><vid>s03648e6b6h</vid><videotype>0</videotype><vr>0</vr><vst>2</vst><vw>480</vw><wh>3</wh><wl/></vi></vl></root>