Esempio n. 1
0
        // POST api/<controller>
        public async Task <HttpResponseMessage> Post()
        {
            HttpResponseMessage response = new HttpResponseMessage();
            var baseResponse             = new BaseResponse();

            try
            {
                #region 验证

                //获取post数据
                HttpContent content = Request.Content;
                var         param   = await content.ReadAsStringAsync();

                var baseRequest = Newtonsoft.Json.JsonConvert.DeserializeObject <BaseRequest>(param);
                if (string.IsNullOrEmpty(baseRequest.FunName))
                {
                    baseResponse.ErrorMsg  = EHelper.PmException.请求参数为空.ToString();
                    baseResponse.ErrorCode = (int)EHelper.PmException.请求参数为空;
                    response.Content       = new StringContent(await JsonConvert.SerializeObjectAsync(baseResponse));
                    return(response);
                }
                else if (string.IsNullOrEmpty(baseRequest.UserName))
                {
                    baseResponse.ErrorMsg  = EHelper.PmException.账号不正确.ToString();
                    baseResponse.ErrorCode = (int)EHelper.PmException.账号不正确;
                    response.Content       = new StringContent(await JsonConvert.SerializeObjectAsync(baseResponse));
                    return(response);
                }
                else if (!Enum.IsDefined(typeof(EHelper.DataType), baseRequest.DataType))
                {
                    baseResponse.ErrorMsg  = EHelper.PmException.参数不合法.ToString();
                    baseResponse.ErrorCode = (int)EHelper.PmException.参数不合法;
                    response.Content       = new StringContent(await JsonConvert.SerializeObjectAsync(baseResponse));
                    return(response);
                }
                //验证账号及token

                #endregion

                #region 业务

                var dataTypes = Enum.GetValues(typeof(EHelper.DataType));
                switch (baseRequest.FunName)
                {
                //获取文章集合信息
                case "_GetArticles":

                    //json反序列获取数据
                    var r_GetArticles = Newtonsoft.Json.JsonConvert.DeserializeObject <MoArticlesRequest>(param);

                    //初始化任务量
                    var tasks = new Task <MoArticlesResponse> [baseRequest.DataType == 0 ? dataTypes.Length: 1];
                    var proxy = new Pm_Proxy();
                    var j     = 0;  //真实任务坐标
                    for (int i = 0; i < dataTypes.Length; i++)
                    {
                        var item  = dataTypes.GetValue(i);
                        var nType = Convert.ToInt32(item);
                        if (nType != baseRequest.DataType && 0 != baseRequest.DataType)
                        {
                            continue;
                        }

                        //使用任务做并行
                        var dataType = proxy._DataType(nType);
                        var task     = Task.Factory.StartNew <MoArticlesResponse>(dataType._GetArticles, r_GetArticles);
                        tasks[j] = task;
                        j++;
                    }
                    //30s等待
                    Task.WaitAll(tasks, 1000 * 1 * 30);

                    //获取任务执行的结果(整合数据)
                    var articles = new MoArticlesResponse();
                    foreach (var task in tasks)
                    {
                        if (!task.IsCompleted)
                        {
                            continue;
                        }
                        articles.MoArticles.AddRange(task.Result.MoArticles);
                    }

                    articles.IsSuccess = articles.MoArticles.Count > 0;
                    baseResponse       = articles;
                    break;

                default:
                    break;
                }
                response.Content = new StringContent(await JsonConvert.SerializeObjectAsync(baseResponse));
                #endregion
            }
            catch (Exception ex)
            {
                baseResponse.ErrorMsg  = EHelper.PmException.获取数据异常.ToString();
                baseResponse.ErrorCode = (int)EHelper.PmException.获取数据异常;
            }
            return(response);
        }
Esempio n. 2
0
        /// <summary>
        /// 获取文章信息
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public override MoArticlesResponse _GetArticles(object obj)
        {
            #region 初始化信息

            var request  = new MoArticlesRequest();
            var response = new MoArticlesResponse();
            var sbLog    = new StringBuilder(string.Empty);
            var url      = this.Config.Url; //这里获取配置文件的url
            #endregion

            try
            {
                #region 接口验证数据

                request = obj as MoArticlesRequest;
                if (request == null)
                {
                    response.ErrorCode = (int)EHelper.PmException.获取数据为空;
                    response.ErrorMsg  = EHelper.PmException.获取数据为空.ToString();
                    return(response);
                }

                #endregion

                #region 请求数据

                sbLog.AppendFormat("请求地址:{0}\n", url);
                var result = PublicClass._HttpGet(url);   //这里一般都是post数据到第三方接口,测试没有第三方可以使用,所以使用抓取博客园首页数据
                sbLog.AppendFormat("返回信息:{0}\n", result);
                #endregion

                #region 解析

                //使用正则解析数据
                var rgs = Regex.Matches(result, "class=\"titlelnk\"\\s+href=\"(?<link>http://www(\\w|\\.|\\/)+\\.html)\"[^>]+>(?<title>[^<]+)<\\/a>[^D]+post_item_summary\">(?<des>[^<]+)[^D]+lightblue\">(?<author>\\w+)<\\/a>[^D]+发布于(?<publishtime>\\s+(\\d|-|\\s|:)+)[^<]+");

                if (rgs.Count <= 0)
                {
                    response.ErrorCode = (int)EHelper.PmException.获取数据为空;
                    response.ErrorMsg  = EHelper.PmException.获取数据为空.ToString();
                    return(response);
                }

                foreach (Match item in rgs)
                {
                    var article = new MoArticle();

                    article.Author      = item.Groups["author"].Value;
                    article.LinkUrl     = item.Groups["link"].Value;
                    article.Title       = item.Groups["title"].Value;
                    article.PublishTime = item.Groups["publishtime"].Value;
                    // article.Des = item.Groups["des"].Value;
                    article.DataType = (int)EHelper.DataType.博客园NET技术;
                    if (response.MoArticles.Count > 5)
                    {
                        continue;
                    }
                    response.MoArticles.Add(article);
                }

                response.IsSuccess = true;
                #endregion
            }
            catch (Exception ex)
            {
                sbLog.AppendFormat("异常信息:{0}\n", ex.Message);
                response.ErrorCode = (int)EHelper.PmException.获取数据异常;
                response.ErrorMsg  = EHelper.PmException.获取数据异常.ToString();
            }
            finally
            {
                #region 第三方原始信息-日志

                //PublicClass._WriteLog(sbLog.ToString(), "Cnblogs");

                #endregion
            }
            return(response);
        }