תכנות לחלונות 8 – יצירת קורא RSS חלק שני – שימוש ב WinRT

2 בפברואר 2012

תגיות: , , ,
אין תגובות

בחלק הראשון של יצירת קורא הRSS ביצענו בקשת xhr (בקשת אג’קס) ע”י ספריית WinJS. בקשת ה – xhr קיבלה בחזרה XML ופירסרה אותו ממש, שזו עבודה יחסית קשה.
במקום לעבוד עם ספריית WinJS, אפשר להשתמש בספריית WinRT – שהיא הספריה הבסיסית של חלונות (מה שמחליף את Win32, רק הרבה יותר מודרני).
במקום לבצע קריאת xhr בסיסית, נוכל לעבוד עם מחלקה שמיוחדת לפידים של RSS ויודעת כבר לפרסר אותם:

//WinJS.xhr({ url: "http://blogs.microsoft.co.il/blogs/eladkatz/rss.aspx" }).

//    then(processPosts, downloadError);

 

var syn = new Windows.Web.Syndication.SyndicationClient();

 

var url = new Windows.Foundation.Uri("http://blogs.microsoft.co.il/blogs/eladkatz/rss.aspx");

syn.retrieveFeedAsync(url).then(processPosts, downloadError);

ה”מחלקה” Windows.Web.Syndication.SyndicationClient היא מחלקה מיוחדת לRSS (ראשי תיבות של Really Simple Syndication – ולכן השם של המחלקה). עקרונית, כל פעם שנראה בקוד גישה למחלקה שמתחילה ב Windows נדע שאנו למעשה ניגשים לWinRT (ולפיכך ניגשים לקוד שהוא רק לחלונות כמובן), בעוד מחלקה שמתחילה בWinJS מציינת גישה לWinJS.

גם המתודה processPosts צריכה להשתנות עכשיו היות והיא תקבל את הRSS כבר מפורסר ורק תצתרך להשתמש בו, לפיכך היא תהיה הרבה יותר פשוטה:

function processPosts(feed) {

 

 

   // clear the progress indicator

   downloadStatus.innerText = "";

   // iterate over the items

   for (var i = 0, len = feed.items.length; i < len; i++) {

    var item = feed.items[i];

 

    var parent = document.createElement("div");

    appendDiv(parent, item.title.text, "postTitle");

    appendDiv(parent, item.publishedDate, "postDate");

    //appendDiv(parent, item.summary.text, "postContent");

    try {

     document.getElementById("posts").appendChild(parent);

    } catch (e) {

     // silence html parsing problems:

     Debug.writeln(e.message);

    }

   }

  }

 

והקוד המלא שלנו יראה כך:

 

 

(function () {

 

 

 'use strict';

 // Uncomment the following line to enable first chance exceptions.

 // Debug.enableFirstChanceException(true);

 WinJS.Application.onmainwindowactivated = function (e) {

  if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {

   // TODO: startup code here

 

 

 

   $('#downloadStatus').text("downloading posts...");

   //document.getElementById("downloadStatus").innerText = "downloading posts...";

   //WinJS.xhr({ url: "http://blogs.microsoft.co.il/blogs/eladkatz/rss.aspx" }).

            //    then(processPosts, downloadError);

 

         var syn = new Windows.Web.Syndication.SyndicationClient();

 

         var url = new Windows.Foundation.Uri("http://blogs.microsoft.co.il/blogs/eladkatz/rss.aspx");

         syn.retrieveFeedAsync(url).then(processPosts, downloadError);

 

 

  }

 

   function processPosts(feed) {

 

 

     // clear the progress indicator

     downloadStatus.innerText = "";

     // iterate over the items

     for (var i = 0, len = feed.items.length; i < len; i++) {

      var item = feed.items[i];

 

      var parent = document.createElement("div");

      appendDiv(parent, item.title.text, "postTitle");

      appendDiv(parent, item.publishedDate, "postDate");

      //appendDiv(parent, item.summary.text, "postContent");

      try {

       document.getElementById("posts").appendChild(parent);

      } catch (e) {

       // silence html parsing problems:

       Debug.writeln(e.message);

      }

     }

    }

 

 

  function appendDiv(parent, html, className) {

 

 

   var div = document.createElement("div");

   div.innerHTML = html;

   div.className = className;

   parent.appendChild(div);

  }

 

  function downloadError() {

   downloadStatus.innerText = "download error";

  }

 }

 

 WinJS.Application.start();

})();

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *