如何检索博客/网站最近的帖子来自其他博客 像http://www.indiblogger.in如何检索博客/网站最近的帖子来自其他博客
从任何网站或博客最近的文章中,该存储到我的数据库.. 。 如何在asp.net C#实现这个
如何检索博客/网站最近的帖子来自其他博客 像http://www.indiblogger.in如何检索博客/网站最近的帖子来自其他博客
从任何网站或博客最近的文章中,该存储到我的数据库.. 。 如何在asp.net C#实现这个
的配方来回答你的问题是:
根据您的链接,第一步是找到我们可以在哪里找到可以让我们检索这些内容的帖子。 Feed URL由feedburner提供。
接下来我们使用SyndicationFeed的Load方法。该方法接受一个XmlReader可惜RSSFeed中使用的日期格式是不理解,所以我们必须使用一个helper provided by Micorosft:
class MyXmlReader : XmlTextReader
{
private bool readingDate = false;
const string CustomUtcDateTimeFormat = "ddd MMM dd HH:mm:ss Z yyyy"; // Wed Oct 07 08:00:07 GMT 2009
public MyXmlReader(Stream s) : base(s) { }
public MyXmlReader(string inputUri) : base(inputUri) { }
public override void ReadStartElement()
{
if (string.Equals(base.NamespaceURI, string.Empty, StringComparison.InvariantCultureIgnoreCase) &&
(string.Equals(base.LocalName, "lastBuildDate", StringComparison.InvariantCultureIgnoreCase) ||
string.Equals(base.LocalName, "pubDate", StringComparison.InvariantCultureIgnoreCase)))
{
readingDate = true;
}
base.ReadStartElement();
}
public override void ReadEndElement()
{
if (readingDate)
{
readingDate = false;
}
base.ReadEndElement();
}
public override string ReadString()
{
if (readingDate)
{
string dateString = base.ReadString();
DateTime dt;
if(!DateTime.TryParse(dateString,out dt))
dt = DateTime.ParseExact(dateString, CustomUtcDateTimeFormat, CultureInfo.InvariantCulture);
return dt.ToUniversalTime().ToString("R", CultureInfo.InvariantCulture);
}
else
{
return base.ReadString();
}
}
}
SyndicationFeed LoadFeed()
{
return SyndicationFeed.Load(
new MyXmlReader(@"http://feeds.feedburner.com/indiblogger?format=xml")
);
}
对于database use EntityFramework 6(使用Nuget进行安装)
对于codefirst方法创建的DbContext派生类和属性为您的帖子
class BlogContext:DbContext
{
public DbSet<Post> Posts { get; set; }
}
而一个类来保存后您的数据。
public class Post
{
public int Id {get; set;}
public string Body { get; set;}
}
合并数据Feed的负荷和数据库存储。迭代feed.Items,从项目数据创建一个Post并将每个Post添加到DataContext上的Posts集合。不要忘记拨打SaveChanges
将所有内容存储在数据库中。
public void LoadFeedAndStore()
{
var feed = LoadFeed();
var db = new BlogContext();
foreach(var item in feed.Items)
{
db.Posts.Add(
new Post {
Body = item.Summary == null ? "<empty>": item.Summary.Text
});
}
db.SaveChanges();
}
要显示在网页上的柱帖子收集的结果
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:GridView ID="GridView1" runat="server" OnLoad="Grid_Load" >
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Load Feed" OnClick="Button1_Click"/>
</asp:Content>
我们使用BlogContext一次并在Posts上调用ToList()以获取Post对象的数据绑定列表。 GridView拥有所有的知识在html页面中呈现这个列表。
protected void Grid_Load(object sender, EventArgs e)
{
var db = new BlogContext();
GridView1.DataSource = db.Posts.ToList();
GridView1.DataBind();
}
如果点击按钮,我们加载饲料数据库:
protected void Button1_Click(object sender, EventArgs e)
{
LoadFeedAndStore();
}
+1一个惊人的答案,超出了OP所显示的努力量。 – BradleyDotNET
哪里是你的代码?这是一个忍者代码?(我没有看到它的主要帖子,也许这是隐藏的时刻)。如果你不知道“如何”,你谷歌“阅读rss c#asp.net” – Tinwor
@Tinwor,+1的忍者代码。 (虽然忍者虫的方式更糟糕:)) – BradleyDotNET