CHSNS#中通過youku的視頻網址獲取視頻截圖及視頻信息

有幾位朋友問我CHSNS#中的視頻插件,提交時只提供了youku視頻的地址,卻可以自動獲取視頻的標題及縮略圖,這個是如何實現的.

image

實現方式如下

youku的站外引用提供瞭如下地址

image

http://player.youku.com/player.php/sid/XNTg0NDExMzI=/v.swf

其中XNTg0NDExMzI=這個部分可以看做是視頻的ID

而每次視頻播放時v.swf通過以下網址獲取視頻信息

http://v.youku.com/player/getPlayList/VideoIDS/視頻的ID/version/5/source/out?onData=%5Btype%20Function%5D&n=3

這個個網址返回的是一段json,類似

{"data":[{"tt":"0","ct":"a","cs":"2143","logo":"http:////vimg12.youku.com//1100641F46493E8D0B3EFF0048E76B57CA9FBD-CEC7-7777-3402-EC9732C9950B","seed":5484,"tags":["/u7f8e/u56fd","/u98df/u54c1"],"categories":"91","streamsizes":{"flv":"3111068"},"streamfileids":{"flv":"19*67*19*19*2*42*19*16*19*19*42*61*47*44*32*46*19*5*42*42*46*61*19*19*42*32*44*50*2*5*42*37*61*30*16*16*37*23*26*37*61*30*37*26*23*44*16*16*26*5*16*47*46*26*30*50*19*16*44*44*12*37*46*47*12*46*"},"videoid":"14610283","segs":{"flv":[{"no":0,"size":"3111068","seconds":"90.00"}]},"fileid":"19*67*19*19*2*42*19*16*19*19*42*61*47*44*32*46*19*5*42*42*46*61*19*19*42*32*44*50*2*5*42*37*61*30*16*16*37*23*26*37*61*30*37*26*23*44*16*16*26*5*16*47*46*26*30*50*19*16*44*44*12*37*46*47*12*46*","username":"dongdong19850912","userid":"4777835","title":"/u591a/u79cd/u7f8e/u56fd/u8f93/u534e/u98df/u54c1/u88ab/u68c0/u51fa/u8d28/u91cf/u95ee/u9898","key1":"bd7ed04d","key2":"3fd76e2fd48efb01","seconds":"90.00","streamtypes":["flv"]}],"user":{"id":0}}

其中的Title自然就是標題,logo就是視頻的截圖

 

這裏可以用json.net來反序列化獲取,但我這裏是使用的正則來提取的


  1.         static public string[] GetMediaPic(string url) {
  2.             if (url.ToLower().StartsWith("http://player.youku.com/player.php/sid/")) {//判斷是否爲youku視頻
  3.                 return getPicYouKu(url);
  4.             } else {
  5.                 return new string[0];
  6.             }
  7.         }
  8.         static string[] getPicYouKu(string url) {
  9.             string id = url.Replace(@"http://player.youku.com/player.php/sid/","").Replace(@"/v.swf","");
  10.             string newurl = string.Format(
  11. @"http://v.youku.com/player/getPlayList/VideoIDS/{0}/version/5/source/out?onData=%5Btype%20Function%5D&n=3"
  12.             , id);
  13.             var hp = new HttpProc(newurl);//這個類見下方網址
  14.                            var html = hp.Proc().Replace(@"//""/");//通過get方式獲取信息
  15.             var re = new Regex("(http://[^/"]+)[//w//W]+/"title/":/"([^/"]+)/"");//與此同時提取截圖和標題
  16.             var m = re.Match(html);
  17.             if (m.Success) {
  18.                 var ret = new string[2];
  19.                 ret[0] = m.Groups[1].Value;//0是url
  20.                 ret[1] = UnicodeToChinese(m.Groups[2].Value);//1是title,要從unicode轉爲漢字
  21.                 return ret;
  22.             } else
  23.                 return new string[0];//如果沒有就返回空數組     
  24.         }
  25.                 /// <summary>
  26.         /// unicode轉漢字
  27.         /// </summary>
  28.         /// <param name="str"></param>
  29.         /// <returns></returns>
  30.         static public string UnicodeToChinese(string str) {
  31.             return ConvertTo(str, "unicode");
  32.         }
  33.         static string ConvertTo(string str, string encode) {
  34.             StringBuilder tmpStr = new StringBuilder();
  35.             for (int i = 0; i < str.Length; i++) {
  36.                 if (str[i] == '//' && str[i + 1] == 'u') {
  37.                     string s1 = str.Substring(i + 2, 2);
  38.                     string s2 = str.Substring(i + 4, 2);
  39.                     int t1 = Convert.ToInt32(s1, 16);
  40.                     int t2 = Convert.ToInt32(s2, 16);
  41.                     byte[] array = new byte[2];
  42.                     array[0] = (byte)t2;
  43.                     array[1] = (byte)t1;
  44.                     string s = System.Text.Encoding.GetEncoding(encode).GetString(array);
  45.                     tmpStr.Append(s);
  46.                     i = i + 5;
  47.                 } else { tmpStr.Append(str[i]); }
  48.             }
  49.             return tmpStr.ToString();
  50.         }

HttpProc可參見:http://www.51aspx.com/CV/CHSNS122,UserWebService,ChAlumna,Reqres.cs.html

 

如無外最後返回數組即爲[0]存標題,[1]存截圖地址

 

  1. var x=GetMediaPic("http://player.youku.com/player.php/sid/XNTg0NDExMzI=/v.swf");
  2. if(x.Length==0){
  3.         //不是youku或無法獲取
  4. }else{
  5.       Title=x[0];
  6.        Url=x[1];
  7. }




發佈了174 篇原創文章 · 獲贊 5 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章