Ejemplo n.º 1
0
        /// <summary>
        /// 获取视频信息
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static VideoResult GetVideoImage(string url)
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                return(new VideoResult {
                    Status = 2, Message = "地址不能为空."
                });
            }
            string domain = GetDomainByUrl(url);

            if (string.IsNullOrWhiteSpace(domain))
            {
                return(new VideoResult {
                    Status = 3, Message = "你输入的地址暂时不支持."
                });
            }
            if (url.EndsWith("/"))
            {
                url = url.Substring(0, url.Length - 1);
            }
            if (domain.ToLower() == "ku6")
            {
                url = url.Substring(0, url.IndexOf(".html") + 5);
            }
            var result = new VideoResult();

            switch (domain.ToLower())
            {
            case "youku":
                result = GetYouKuVideoInfo(url);
                break;

            case "ku6":
                result = GetKu6VideoInfo(url);
                break;

            case "56":
                result = Get56VideoInfo(url);
                break;

            case "tudou":
                result = GetTuDouVideoInfo(url);
                break;

            case "qq":
                result = GetQQVideoInfo(url);
                break;

            default:
                result = new VideoResult {
                    Status = 3, Message = "你输入的地址无法识别."
                };
                break;
            }
            return(result);
        }
Ejemplo n.º 2
0
        private static VideoResult GetTuDouVideoInfo(string url)
        {
            var    result = new VideoResult();
            var    tudou  = new TuDouVideoAPI();
            string text   = tudou.GetVideoInfo(url);

            if (!string.IsNullOrWhiteSpace(text))
            {
                try
                {
                    dynamic d     = text.ToNewtonsoftObject <dynamic>();
                    var     json  = ((d["multiResult"])["results"])[0];
                    string  image = json["picUrl"];
                    string  swf   = json["outerPlayerUrl"];
                    string  title = json["title"];
                    if (!string.IsNullOrWhiteSpace(image) && !string.IsNullOrWhiteSpace(swf) && !string.IsNullOrWhiteSpace(title))
                    {
                        result.PlayTime = 0;

                        result.Status    = 0;
                        result.Thumbnail = image;
                        result.PlayerUrl = swf;
                        result.Title     = title;
                        result.Desc      = result.Title;
                        result.Message   = "解析成功.";
                    }
                    else
                    {
                        result.Status  = 1;
                        result.Message = "你输入的地址无法识别.";
                    }
                }
                catch
                {
                    result.Status  = 1;
                    result.Message = "你输入的地址无法识别.";
                }
            }
            else
            {
                result.Status  = 1;
                result.Message = "你输入的地址无法识别.";
            }
            return(result);
        }
Ejemplo n.º 3
0
        private static VideoResult GetKu6VideoInfo(string url)
        {
            var result = new VideoResult();
            //匹配模式1
            string pThumbnail = @"cover\s?:\s?""(?<image>.*)"",\s?data";
            string pPlayerUrl = @"<input\s?id=""swf_url""\s?name=""codes""\s?class=""radio_A""\s?type=""radio""\s?value=""(?<swf>.*.swf)""\s?checked";
            string pTitle     = @"<meta\s?name=""title""\s?content=""(?<title>.*)""\s?/>";
            var    reInfo     = string.Empty;
            string text       = url.GetContentToString("gb2312", ref reInfo);

            if (!string.IsNullOrWhiteSpace(text))
            {
                Regex rThumbnail = new Regex(pThumbnail);
                Regex rPlayerUrl = new Regex(pPlayerUrl);
                Regex rTitle     = new Regex(pTitle);
                if (rThumbnail.IsMatch(text) && rPlayerUrl.IsMatch(text) && rTitle.IsMatch(text))
                {
                    result.PlayTime = 0;

                    result.Status    = 0;
                    result.Thumbnail = rThumbnail.Match(text).Groups["image"].Value;
                    result.PlayerUrl = rPlayerUrl.Match(text).Groups["swf"].Value;
                    result.Title     = rTitle.Match(text).Groups["title"].Value;
                    result.Desc      = result.Title;
                    result.Message   = "解析成功.";
                }
                else
                {
                    result.Status  = 1;
                    result.Message = "你输入的地址无法识别.";
                }
            }
            else
            {
                result.Status  = 1;
                result.Message = "你输入的地址无法识别.";
            }
            return(result);
        }
Ejemplo n.º 4
0
        private static VideoResult GetQQVideoInfo(string url)
        {
            var result = new VideoResult();

            string filename = "http://sns.video.qq.com/tvideo/fcgi-bin/vshare?_out=106&url=" + url;

            XmlDocument xmlDoc = new XmlDocument();

            try
            {
                xmlDoc.XmlResolver = null;
                xmlDoc.Load(filename);
                //读取Activity节点下的数据。SelectSingleNode匹配第一个Activity节点
                XmlNode root = xmlDoc.SelectSingleNode("//root/result");//当节点Workflow带有属性是,使用SelectSingleNode无法读取
                if (root != null)
                {
                    if (root.SelectSingleNode("pic306x204") != null)
                    {
                        result.Thumbnail = (root.SelectSingleNode("pic306x204")).InnerText;
                    }
                    else
                    {
                        result.Thumbnail = (root.SelectSingleNode("coverurl")).InnerText;
                    }

                    result.PlayerUrl = root.SelectSingleNode("flash").InnerText;
                    result.Title     = root.SelectSingleNode("title").InnerText;
                    result.Desc      = root.SelectSingleNode("desc").InnerText;
                    result.PlayTime  = Convert.ToInt32(root.SelectSingleNode("playtime").InnerText);

                    result.Message = "解析成功.";
                    result.Status  = 0;
                }
                else
                {
                }
            }
            catch (Exception)
            {
                result.Status  = 1;
                result.Message = "你输入的地址无法识别.";
            }

            return(result);


            /*//Obsolescence
             * var pQQVideo = @" _hot=""cover.list_5.share_qzone"" href=""javascript:;"" title=""分享到QQ空间"" vid=""(?<swf>.*)"" info=""(?<title>.*)"" pic=""(?<image>.*)""";
             * var request = new RequestHelper();
             * var msg = string.Empty;
             * var content = request.GetContentToString(url, "utf-8", ref msg);
             * if (string.IsNullOrWhiteSpace(content))
             * {
             *  result.Status = 1;
             *  result.Message = "你输入的地址无法识别.";
             * }
             * else
             * {
             *  var rThumbnail = new Regex(pQQVideo);
             *  if (rThumbnail.IsMatch(content))
             *  {
             *      var match = rThumbnail.Match(content);
             *      result.Status = 0;
             *      result.Thumbnail = match.Groups["image"].Value;
             *      result.PlayerUrl = string.Format(QQ_PLAYER_URL, match.Groups["swf"].Value);
             *      result.Title = match.Groups["title"].Value;
             *      result.Message = "解析成功.";
             *  }
             *  else
             *  {
             *      result.Status = 1;
             *      result.Message = "你输入的地址无法识别.";
             *  }
             * }
             */

            /*
             * var client = new WebClient();
             * byte[] contentData = client.DownloadData(url);
             * string content = Encoding.UTF8.GetString(contentData);
             * string vid=string.Empty;
             * if (regPageUrl.IsMatch(url))
             *  vid = regPageUrl.Match(url).Groups["vid"].Value;
             * else
             *  vid = signalPageUrl.Match(url).Groups["vid"].Value;
             * result.PlayerUrl = string.Format(QQ_PLAYER_URL, vid);
             *
             * var matchInfos = regPic.Matches(content);
             * foreach (Match m in matchInfos)
             * {
             *  if (m.Groups["id"].Value == vid)
             *  {
             *      result.Thumbnail = m.Groups["pic"].Value;
             *      result.Title = m.Groups["title"].Value;
             *      break;
             *  }
             * }
             * if (string.IsNullOrEmpty(result.Thumbnail)) result.Thumbnail = string.Format(QQ_THUMBNAIL_URL, vid);
             * return result;
             *
             * */
        }
Ejemplo n.º 5
0
        private static VideoResult Get56VideoInfo(string url)
        {
            var    result = new VideoResult();
            Regex  regex  = null;
            string key    = null;

            string patten = "v_(?<key>.*).html";

            regex = new Regex(patten);
            if (regex.IsMatch(url))
            {
                key = regex.Match(url).Groups["key"].Value;
            }

            patten = "vid-(?<key>.*).html";
            regex  = new Regex(patten);
            if (regex.IsMatch(url))
            {
                key = regex.Match(url).Groups["key"].Value;
            }

            if (string.IsNullOrWhiteSpace(key))
            {
                return(new VideoResult {
                    Status = 3, Message = "你输入的地址无法识别."
                });
            }

            //通过接口Api 和 key整合新的url地址获取数据
            string apiUrl = string.Format("http://vxml.56.com/json/{0}/?src=out", key);

            string reInfo = string.Empty;
            string text   = apiUrl.GetContentToString(ref reInfo);

            if (!string.IsNullOrWhiteSpace(text))
            {
                try
                {
                    dynamic d     = text.ToNewtonsoftObject <dynamic>();
                    var     json  = d["info"];
                    string  image = json["img"];
                    string  swf   = string.Format("http://player.56.com/v_{0}.swf", key);
                    string  title = json["Subject"];
                    if (!string.IsNullOrWhiteSpace(image) && !string.IsNullOrWhiteSpace(title))
                    {
                        result.PlayTime = 0;

                        result.Status    = 0;
                        result.Thumbnail = image;
                        result.PlayerUrl = swf;
                        result.Title     = title;
                        result.Desc      = result.Title;
                        result.Message   = "解析成功.";
                    }
                    else
                    {
                        result.Status  = 1;
                        result.Message = "你输入的地址无法识别.";
                    }
                }
                catch
                {
                    result.Status  = 1;
                    result.Message = "你输入的地址无法识别.";
                }
            }
            else
            {
                result.Status  = 1;
                result.Message = "你输入的地址无法识别.";
            }
            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 如果是匹配模式1的情况,先通过匹配模式1取到数据分析出.html的Url地址
        /// 然后通过.html地址分析出接口所要使用的key,调用接口取到视频的缩略图.
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private static VideoResult GetYouKuVideoInfo(string url)
        {
            /*
             * var result = new VideoResult();
             * RequestHelper requestHelper = null;
             * //匹配模式1
             * string pThumbnail = @"screenshot=(?<image>.*)""\s?target";
             * string pPlayerUrl = @"<input\s?type=""text""\s?class=""form_input\sform_input_s""\sid=""link2""\s?value=""(?<swf>.*)""";
             * string pTitle = @"<meta\s?name=""title""\s?content=""(?<title>.*)"">";
             * requestHelper = new RequestHelper();
             * string reInfo = string.Empty;
             * string text = requestHelper.GetContentToString(url, ref reInfo);
             * if (!string.IsNullOrWhiteSpace(text))
             * {
             *  Regex rThumbnail = new Regex(pThumbnail);
             *  Regex rPlayerUrl = new Regex(pPlayerUrl);
             *  Regex rTitle = new Regex(pTitle);
             *  if (rThumbnail.IsMatch(text) && rPlayerUrl.IsMatch(text) && rTitle.IsMatch(text))
             *  {
             *      result.PlayTime = 0;
             *
             *      result.Status = 0;
             *      result.Thumbnail = rThumbnail.Match(text).Groups["image"].Value;
             *      result.PlayerUrl = rPlayerUrl.Match(text).Groups["swf"].Value;
             *      result.Title = rTitle.Match(text).Groups["title"].Value.Replace(" - 视频 - 优酷视频 - 在线观看", string.Empty);
             *      result.Desc = result.Title;
             *      result.Message = "解析成功.";
             *  }
             *  else
             *  {
             *      result.Status = 1;
             *      result.Message = "你输入的地址无法识别.";
             *  }
             * }
             * else
             * {
             *  result.Status = 1;
             *  result.Message = "你输入的地址无法识别.";
             * }
             * return result;
             * */



            var youkuUrl = "https://openapi.youku.com/v2/videos/show_basic.json?client_id=ddd3ac121a93f9dd&video_url=" + url;

            var    result = new VideoResult();
            string reInfo = string.Empty;
            string text   = youkuUrl.GetContentToString(ref reInfo);


            if (!string.IsNullOrWhiteSpace(text))
            {
                try
                {
                    dynamic json = text.ToNewtonsoftObject <dynamic>();

                    result.PlayTime = Convert.ToInt32((double)json["duration"]);

                    result.Status    = 0;
                    result.Thumbnail = json["thumbnail"];
                    result.PlayerUrl = json["player"];
                    result.Title     = json["title"];
                    result.Desc      = json["description"];
                    result.Message   = "解析成功.";
                }
                catch (Exception)
                {
                    result.Status  = 1;
                    result.Message = "你输入的地址无法识别.";
                }
            }
            else
            {
                result.Status  = 1;
                result.Message = "你输入的地址无法识别.";
            }
            return(result);
        }