// 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); }
/// <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); }