Stack overflow är min nya favoritsida, det finns många duktiga programmerare där att inspireras av. För några dagar sen skrev någon om Syndication Feed klassen i en tråd och jag tyckte den såg smidig ut och bestämde mig för att göra en ny startsida m.h.a den, (min gamla finns här). Samtidigt har jag sneglat en hel del på JSON senaste tiden så jag slog två flugor i en smäll.
Jag hittade ett bra json exempel här som jag modifierade lite. Resultatet blev en betydligt snabbare sida än min gamla och kanske 75% mindre kod. Plockade ut det viktigaste ur koden som man kan se nedan om någon vill göra en egen variant.
//---------------Javascript----------------------
function getDN() {
Param = new Array();Param.push("url");
Param.push("http://www.dn.se/m/rss/senaste-nytt");Param.push("takeItems");
Param.push(10);
$("#dn").append("<h2>DAGENS NYHETER</h2>");
PageMethod('ReadRss', Param, "#dn");
}
function PageMethod(fn, paramArray, div) {
var pagePath = window.location.pathname;
var paramList = '';
if (paramArray.length > 0) {
for (var i = 0; i < paramArray.length; i += 2) {
if (paramList.length > 0) paramList += ',';paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
}
}
paramList = '{' + paramList + '}';
$.ajax({
type: "POST",
url: pagePath + "/" + fn,
contentType: "application/json; charset=utf-8",
data: paramList,
dataType: "json",
success: function(response) {
var rssItems = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
for (var i = 0; i < rssItems.length; i++) {$(div).append(
"<a href='" + rssItems[i].link + "' target='_blank' alt='" + rssItems[i].title + "'><h3>" + rssItems[i].title + "</h3></a>");
if (rssItems[i].content != null) {$(div).append("<span class='published'>[" + rssItems[i].published + "]</span>");$(div).append("<p>" + rssItems[i].content +"</p>"); }
}
},
error: function(msg) { $(div).append(msg); }
});
}
//-------------------Codebehind C#---------------------------------------------
[WebMethod]
public static List<RSSItem> ReadRss(string url, int takeItems)
{
List<RSSItem> rssItems = new List<RSSItem>();
try
{
var feed = XmlReader.Create(url);
var feedItems = SyndicationFeed.Load(feed).GetRss20Formatter().Feed.Items;
if (takeItems > feedItems.Count())
takeItems = feedItems.Count();
var returnItems = (from feedItem in feedItems
select feedItem).Take(takeItems);
foreach (var item in returnItems)
{
RSSItem rssItem = new RSSItem();
try
{
rssItem.title = item.Title.Text;
rssItem.link = item.Id;
rssItem.published = item.PublishDate.ToString("HH:mm yyyy-MM-dd");
rssItem.content = item.Summary.Text;
rssItems.Add(rssItem);
}
catch (Exception ex2)
{
rssItems.Add(rssItem);
}
}
}
catch (Exception ex)
{
RSSItem errorItem = new RSSItem { title = ex.Message };
rssItems.Add(errorItem);
}
return rssItems;
}