如何从其他博客中检索博客/网站最近的帖子 比如http://www.indiblogger.in
从任何网站或博客获取最近的帖子并将其存储到我的数据库中... 如何在asp.net c#
中实现这一点答案 0 :(得分:2)
回答你问题的方法是:
根据您的链接,第一步是找到我们可以找到哪些帖子,以便我们检索这些帖子。饲料网由饲料燃烧器提供 接下来,我们使用SyndicationFeed的Load方法。该方法接受XmlReader,但遗憾的是rssfeed中使用的Date格式未被理解,所以我们必须使用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方法,为Posts
创建一个DbContext派生类和一个属性class BlogContext:DbContext
{
public DbSet<Post> Posts { get; set; }
}
用于保存帖子数据的课程。
public class Post
{
public int Id {get; set;}
public string Body { get; set;}
}
合并数据馈送的负载和数据库存储。迭代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();
}
要显示网页中的帖子,请将Posts集合的结果绑定到gridvew
<%@ 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();
}
如果单击该按钮,我们会在数据库中加载Feed:
protected void Button1_Click(object sender, EventArgs e)
{
LoadFeedAndStore();
}