블 로그 원 클 라 이언 트 (Universal App) 개발 에 세이 - 데이터 기반 준비

23641 단어 APP
시작 하기 전에 블 로그 원 에서 제공 하 는 인 터 페 이 스 를 알 아 보 겠 습 니 다.
블 로그:http://wcf.open.cnblogs.com/blog/help뉴스:http://wcf.open.cnblogs.com/news/help
블 로그 가든48 시간 읽 기 순위 예 를 들 어 돌아 오 는 Xml 는 다음 그림 (RSS, IE 로 열 면 구독 을 알려 줍 니 다..)
博客园客户端(Universal App)开发随笔 -- 数据基础准备_第1张图片
블 로그 원 의 대부분 API 는 RSS (페이지 도 제공 합 니 다!) 로 되 돌아 갑 니 다. 간단 한 RSS reader 만 하면 직접 사용 할 수 있 습 니 다 SyndicationClient. RetrieveFeedAsync 이후 XML 을 SyndicationFeed 로 해석 합 니 다.
그러나 바 인 딩 이 편리 하고 다른 비 RSS API 를 병행 하기 위해 서 는 실체 류 를 사용자 정의 한 다음 XmlSerializer 반 직렬 화 를 사용 합 니 다. 반 직렬 화 를 사용 하면 XmlDocument 나 linq to xml 로 해석 하 는 코드 를 절약 할 수 있 습 니 다.
프로젝트 만 들 기:
유 니 버 설 앱 을 만 들 려 고 하기 때문에 이식 가능 한 라 이브 러 리 (Portable for Universal Apps) 를 만 듭 니 다.
博客园客户端(Universal App)开发随笔 -- 数据基础准备_第2张图片
이 라 이브 러 리 는 원래 PCL 이 라 고 불 렸 지만 기본적으로 지원 하 는 것 은 윈도 8.1 과 윈도 폰 8.1 뿐 이 었 다.
博客园客户端(Universal App)开发随笔 -- 数据基础准备_第3张图片
실체 류
RSS 를 되 돌려 주 는 API 에 대해 서 는 먼저 feed < T > 클래스 를 정의 해 야 합 니 다. feed 의 기본 정 보 를 포함 하고 Entries 속성 은 XML 의 모든 entry 노드 에 대응 합 니 다. 일반적인 이 유 는 많은 entry 의 속성 이 다 르 기 때 문 입 니 다.
// Feed<T>    feed  ,        ,       
      [XmlRoot("feed", Namespace = "http://www.w3.org/2005/Atom")]
      public class Feed<T>
      {
          // Id      feed/id    
          [XmlElement("id")]
          public string Id { get; set; }
  
          [XmlElement("title")]
         public string Title { get; set; }
 
         // XmlSerializer  feed   entry          ,    List
         [XmlElement("entry")]
         public List<T> Entries { get; set; }
     }

Feed < T > 가 있 으 면 블 로 거 를 추천 하 는 Blogger 와 같은 다양한 API 에 대해 실체 류 를 정의 합 니 다.
//   root     namespace ,  Feed    ,         Feed<Blogger>  
    [XmlRoot("entry")]
    public class Blogger
    {
        [XmlElement("id")]
        public string Id { get; set; }

        [XmlElement("title")]
        public string Name { get; set; }

        [XmlElement("updated")]
        public string UpdateTimeString { get; set; }

        [XmlElement("link", typeof(Link))]
        public Link Link { get; set; }

        [XmlElement("blogapp")]
        public string BlogApp { get; set; }

        [XmlElement("avatar")]
        public string Avatar { get; set; }

        [XmlElement("postcount")]
        public string PostCount { get; set; }

        [XmlIgnore]
        public DateTime UpdateTime
        {
            get { return Functions.ParseDateTime(this.UpdateTimeString); }
        }
    }

뉴스 와 블 로그 의 대부분 속성 이 같 기 때문에 우 리 는 Entry Base 기본 클래스 (이름 을 짓 는 것 이 가장 골 치 아 픕 니 다.) 를 정 의 했 습 니 다. 다른 것 은 우리 의 github 소스 코드 를 참고 할 수 있 고 주 소 는 글 끝 에 있 습 니 다.
[XmlRoot(ElementName = "entry")]
    public class EntryBase
    {
        [XmlElement("id")]
        public string ID { get; set; }

        [XmlElement("title")]
        public string Title { get; set; }

        [XmlElement("summary")]
        public string Summary { get; set; }

        [XmlElement("published")]
        public string PublishTimeString { get; set; }

        [XmlElement("link", typeof(Link))]
        public Link Link { get; set; }

        [XmlElement("blogapp")]
        public string BlogApp { get; set; }

        [XmlElement("diggs")]
        public string DiggsCount { get; set; }

        [XmlElement("views")]
        public string ViewsCount { get; set; }

        [XmlElement("comments")]
        public string CommentsCount { get; set; }

        [XmlIgnore]
        public PostStatus Status{ get; set; }

        [XmlIgnore]
        public DateTime PublishTime
        {
            get
            {
                return Functions.ParseDateTime(this.PublishTimeString);
            }
        }
    }

그 중에서 도 UpdateTime 이 주의해 야 할 것 은 블 로그 원 의 일부 API 가 되 돌아 오 는 DateTime 문자열 이 역 직렬 화 할 때 오류 가 발생 할 수 있 기 때문에 여기 서 직접 string (여기 서 게 으 름 을 피 웠 다..) 을 사용 한 다음 에 응용 프로그램 에서 사용 할 때 스스로 해석 합 니 다.
 
RSS 가 아 닌 뉴스 내용:
XmlElement Attribute 가 노드 이름 을 쓰 지 않 았 다 면 노드 이름과 속성 이름 이 같다 는 것 을 설명 합 니 다. 아래 Xml 와 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?><NewsBody xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Title>90       :              </Title><SourceName>   </SourceName><SubmitDate>2014-12-15 16:30:59</SubmitDate><Content>          ,      ...</Content><ImageUrl>http://images.cnitblog.com/news/66372/201412/151630299226167.jpg</ImageUrl><PrevNews>510939</PrevNews><NextNews/><CommentCount>0</CommentCount></NewsBody>
public class NewsBody
    {
        [XmlElement]
        public string SubmitDateString { get; set; }

        [XmlElement]
        public string Content { get; set; }

        [XmlElement]
        public string ImageUrl { get; set; }

        [XmlElement]
        public string PrevNews { get; set; }

        [XmlElement]
        public string NextNews { get; set; }

        [XmlElement]
        public string CommentCount { get; set; }

        [XmlElement]
        public string Title { get; set; }

        [XmlIgnore]
        public DateTime SubmitDate
        {
            get {
                return Functions.ParseDateTime(this.SubmitDateString);
            }
        }
    }
public class NewsBody
    {
        [XmlElement]
        public string SubmitDateString { get; set; }

        [XmlElement]
        public string Content { get; set; }

        [XmlElement]
        public string ImageUrl { get; set; }

        [XmlElement]
        public string PrevNews { get; set; }

        [XmlElement]
        public string NextNews { get; set; }

        [XmlElement]
        public string CommentCount { get; set; }

        [XmlElement]
        public string Title { get; set; }

        [XmlIgnore]
        public DateTime SubmitDate
        {
            get {
                return Functions.ParseDateTime(this.SubmitDateString);
            }
        }
    }

Http 데이터 요청
현재 winrt 에서 Http 데이터 요청 을 실현 할 수 있 는 종 류 는 최소 3 개 입 니 다. WebRequest, Windows. Web. Http. Http. Http Client 와 System. Net. Http. Http Client 와 System. Net. Http. Http Client 입 니 다.
윈도 우즈. Web. Http. HttpClient 라 는 새로 추 가 된 클래스 를 사용 하 는 것 을 권장 합 니 다. 다른 HttpClient 는 다음 버 전에 서 삭 제 될 수 있 습 니 다. MSDN 이 점 에 대해 전문 적 인 알림 이 있 습 니 다. WebRequest 사용 에 있어 서 는 새로운 HttpClient 가 편리 하지 않 습 니 다.
HttpClient 는 자주 사용 하 는 Http 요청 방법 을 제공 합 니 다: GetAsync, DeleteAsync, PostAsync 와 GetStringasync. 그 중에서 GetStringasync 는 XML / JSon 을 요청 할 때 상당히 편리 합 니 다. response. content 에서 string 으로 전환 하 는 과정 을 줄 였 습 니 다. (그러나 HttpStatusCode 를 얻 지 못 하고 실 수 를 했 습 니 다.) 다음 과 같이 사용 합 니 다.
HttpClient client = new HttpClient();

try
{
  string xmlString = await client.GetStringAsync(new Uri(“API URL here”));
}
catch(Exception)
{
  //           
}

데이터 요청 은 이렇게 간단 하고 나머지 는 서로 다른 수요 에 따라 API 의 URL 을 연결 하 는 것 이다.
 
PS: 네트워크 가 사용 되 지 않 을 때 System. Exception 을 던 져 달라 고 요청 합 니 다. 오류 코드 를 가지 고 있 습 니 다. 이 이상 을 포착 해 야 한 다 는 것 을 기억 하 십시오.
博客园客户端(Universal App)开发随笔 -- 数据基础准备_第4张图片   博客园客户端(Universal App)开发随笔 -- 数据基础准备_第5张图片
 
작은 매듭
HttpClient 를 사용 하여 Xml 데 이 터 를 얻 는 것 은 매우 간단 하 며, XmlSerializer 가 있 으 면 Xml 에서 실체 류 까지 의 매 핑 과정 을 간소화 할 수 있 습 니 다.계속 지 켜 봐 주세요.
 
Windows Phone Store App link:
http://www.windowsphone.com/zh-cn/store/app/블 로그 원 - up / 500 f08f0 - 5be8 - 4723 - aff 9 - a397beee52fc
 
Windows Store App link:
http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059
 
GitHub open source link:
https://github.com/MS-UAP/cnblogs-UAP
 
MSDN Sample Code:
https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab

좋은 웹페이지 즐겨찾기