예제 #1
0
 private void HandleResult(int subjectTotalCount, DoubanResponse resp, Action action)
 {
     if (resp.RestResponse.StatusCode == HttpStatusCode.OK)
     {
         System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
         {
             action();
             this.LoadMoreVisibility = this.SearchSubjectList.Count < subjectTotalCount ? Visibility.Visible : Visibility.Collapsed;
             this.OnPropertyChanged("LoadMoreVisibility");
             this.OnPropertyChanged("SearchSubjectList");
             this.IsBusy = false;
         });
     }
     else if (SearchCompleted != null)
     {
         SearchCompleted(null, new DoubanSearchCompletedEventArgs() { IsSuccess = false });
     }
 }
예제 #2
0
 public void GetReview(string reviewId, Action<DoubanSubjectReview, DoubanResponse> action)
 {
     var feedsRequest = (HttpWebRequest)WebRequest.Create(string.Format(m_SubjectReviewUrl, reviewId));
     feedsRequest.BeginGetResponse(r =>
     {
         DoubanResponse doubanResp = new DoubanResponse();
         try
         {
             var httpRequest = (HttpWebRequest)r.AsyncState;
             var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r);
             using (var reader = new StreamReader(httpResponse.GetResponseStream()))
             {
                 DoubanSubjectReview review = new DoubanSubjectReview();
                 string content = reader.ReadToEnd();
                 HtmlDocument doc = new HtmlDocument();
                 doc.LoadHtml(content);
                 HtmlNode root = doc.DocumentNode;
                 List<HtmlNode> spanNodes = root.Descendants("span").Where(n => n.HasAttributes && n.Attributes.Contains("property")).ToList();
                 //标题
                 review.Title = m_ReviewTitleRegex.Match(content).Groups[1].Value;
                 review.Title = m_HtmlTagRegex.Replace(review.Title, "").Replace("\n", "").Replace(" ", "");
                 //评论时间
                 review.Updated = m_ReviewDateRegex.Match(content).Groups[1].Value;
                 //评分
                 review.Rating = new DoubanRating() { Average = spanNodes.Single(i => i.Attributes["property"].Value == "v:rating").InnerText };
                 //项目名称
                 review.SubjectTitle = m_ReviewItemRegex.Match(content).Groups[1].Value.Replace("\n", "").Replace(" ", "");
                 //作者
                 review.Author = new DoubanAuthor()
                 {
                     Name = m_ReviewerRegex.Match(content).Groups[1].Value
                 };
                 IEnumerable<HtmlNode> imgs = doc.DocumentNode.Descendants("img").Where(n => n.HasAttributes &&
                     n.Attributes.Contains("class") && n.Attributes["class"].Value == "pil");
                 if (imgs.Count() > 0)
                 {
                     review.Author.Icon = imgs.ToList()[0].Attributes["src"].Value;
                 }
                 else//处理电影评论
                 {
                     HtmlNode imgNode = doc.DocumentNode.DescendantNodes().SingleOrDefault(n => n.HasAttributes &&
                                                   n.Attributes.Contains("class") && n.Attributes["class"].Value == "main-avatar");
                     if (imgNode != null && imgNode.HasChildNodes)
                     {
                         review.Author.Icon = imgNode.Element("img").Attributes["src"].Value;
                     }
                 }
                 //评论内容,去除html标记
                 string reviewContent = "";
                 HtmlNode desc = doc.GetElementbyId("link-report");
                 if (desc != null)
                 {
                     reviewContent = desc.InnerText;
                 }
                 review.Content = m_HtmlTagRegex.Replace(reviewContent, "");
                 doubanResp.RestResponse = new RestResponse() { StatusCode = httpResponse.StatusCode };
                 action(review, doubanResp);
             }
         }
         catch (Exception ex)
         {
             doubanResp.RestResponse.ErrorException = ex;
             doubanResp.RestResponse.StatusCode = HttpStatusCode.BadRequest;
             action(new DoubanSubjectReview(), doubanResp);
         }
     }, feedsRequest);
 }
예제 #3
0
        private void GetTopics(DoubanGroupTopicSearch result, DoubanResponse resp,
            string listName, ObservableCollection<DoubanGroupTopic> list,
            string loadMoreName,
            EventHandler<DoubanSearchCompletedEventArgs> completedEvent)
        {
            if (resp.RestResponse.StatusCode == HttpStatusCode.OK && result.Topics.Count > 0)
            {
                System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    foreach (var item in result.Topics)
                    {
                        item.CommentsCount = item.CommentsCount + "回应";
                        list.Add(item);
                    }
                    int total = !string.IsNullOrEmpty(result.Total) ? int.Parse(result.Total) : 0;

                    Visibility loadMore = (list.Count < total || result.HasMore) ? Visibility.Visible : Visibility.Collapsed;
                    SetLoadMoreVisibility(loadMoreName, loadMore);
                    this.OnPropertyChanged(listName);
                });
            }
            else if (completedEvent != null)
            {
                System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
                 {
                     SetLoadMoreVisibility(loadMoreName, Visibility.Collapsed);
                     completedEvent(this, new DoubanSearchCompletedEventArgs() { IsSuccess = false });
                 });
            }
        }