私は、BlogEngine.Net の小さなウィジェットに取り組んでいます。私のウィジェットは、ユーザーの共有アイテムのアトム フィードを取得し、タイトル、Web サイトの URL、日付、アトムの URL を出力します。このタスクを完了するために、Linq と XML の使用を開始しました。
これが問題です。Google リーダーが使用するアトム フィードは、gr:stream-id の属性を持つ source 要素にあります。どうやら、XName は名前にコロンが含まれることを好みません。Google Reader スキーマが存在しないため、そのルートに行かなければなりませんでした。そのスキーマがあれば、問題は解決します。スキーマを取得するにはどうすればよいですか?
以下は、これまでのコードの小さなスニペットです。
protected void Page_Load(object sender, EventArgs e) {
//Replace userid with the unique session id in your Google Reader
//url (the numbers after the F)
getFeed("userid");
}
public class Post {
public String title { get; set; }
public DateTime published { get; set; }
public String postUrl { get; set; }
public String baseUrl { get; set; }
public String atomUrl { get; set; }
}
private void getFeed(String userID) {
String uri = "http://www.google.com/reader/public/atom/user%2F" + userID + "%2Fstate%2Fcom.google%2Fbroadcast";
XNamespace atomNS = "http://www.w3.org/2005/Atom";
//The Google Reader schema link does not exist :(
XNamespace grNS = "http://www.google.com/schemas/reader/atom/";
XDocument feed = XDocument.Load(uri);
var posts = from item in feed.Descendants(atomNS + "entry")
select new Post {
title = item.Element(atomNS + "title").Value,
published = DateTime.Parse(item.Element(atomNS + "published").Value),
postUrl = item.Element(atomNS + "link").Attribute("href").Value,
atomUrl = item.Element(atomNS + "source").Attribute(grNS + "href").Value
};
foreach (Post post in posts) {
output.InnerHtml += "Title: " + post.title + "<br />";
output.InnerHtml += "Published: " + post.published.ToString() + "<br />";
output.InnerHtml += "Post URL: " + post.postUrl + "<br />";
output.InnerHtml += "Atom URL: " + post.atomUrl + "<br />";
output.InnerHtml += "<br />";
}
}
Linq と XML を使用している間にこれを行う別の方法がある場合は、お知らせください。前もって感謝します!