RSS客户端的设计注意事项

时间:2014-04-10 22:27:45

标签: c# rss rss-reader pubsubhubbub

我需要使用c#开发一个RSS客户端,我想知道任何RSS客户端如何存储用户读取的内容。 简单的答案是存储每个URL的所有提要并标记用户是否读取它。 所以我需要知道其他RSS客户端如何管理从用户读取或不读取的状态。他们是否存储了所有网址中的所有网址

另外,我需要知道使用pubsubhubbub协议的客户端是否有任何.net库

例如,

如果我订阅CNN Feed,应用程序将加载当前的CNN源,然后我将其读取。一段时间后,我打开客户端,我应该发现我读到的所有提要都被标记为已读。

所以这意味着客户端将存储 - 例如在其数据库中 - CNN的所有链接并为每个链接保存其状态是否被读取

我的问题是,是否存在另一种跟踪订阅源的方法,而不是保存数据库中所有网站的所有订阅源,这将导致庞大的数据库

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow:D

代表RSS提要

您可以使用以下类型来表示Feed和文章:

using System;
using System.Collections.Generic;
using System.Linq;

public abstract class RssItem
{
    public virtual bool IsRead { get; set; }

    public string Name { get; set; }

    public string Url { get; set; }
}

public class RssFeed : RssItem
{
    public List<RssFeedArticle> Articles { get; set; }

    public override bool IsRead
    {
        get { return Articles.All(s => s.IsRead); }
        set { Articles.ForEach(s => s.IsRead = true); }
    }
}

public class RssFeedArticle : RssItem
{
    public string Content { get; set; }
}

这是一个简单的表示,随时可以加强它。

基本上,当您设置feed.IsRead = true;时,所有文章都会被标记为已读,如果您查询该值,则只有在读取了所有文章后才会返回true

示例:

var article1 = new RssFeedArticle {Name = "article1", Content = "content1"};
var article2 = new RssFeedArticle {Name = "article2", Content = "content2"};
var feed = new RssFeed
{
    Name = "cool feed",
    Articles =
        new List<RssFeedArticle>(new[]
        {
            article1,
            article2
        })
};

article1.IsRead = true;

feed.IsRead = true;

存储您的数据

常见的方法是将应用程序数据存储在ApplicationData文件夹或My Documents中。

使用我的文档的好处是用户通常会备份这个文件夹,不一定是ApplicationData的情况,新手用户可能不知道它的存在。

检索应用程序文件夹的示例:

using System.IO;

private void Test()
{
    string applicationFolder = GetApplicationFolder();
}

private static string GetApplicationFolder()
{
    var applicationName = "MyCoolRssReader";
    string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

    string applicationFolder = Path.Combine(folderPath, applicationName);
    bool exists = Directory.Exists(applicationFolder);
    if (!exists)
    {
        Directory.CreateDirectory(applicationFolder);
    }

    return applicationFolder;
}

如果您更喜欢我的文档:

string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

以下是Microsoft开发人员的一些解释/建议:

http://blogs.msdn.com/b/patricka/archive/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions.aspx

PubSubHubbub通讯

有一个C#库:https://code.google.com/p/pubsubhubbub-publisherclient-csharp/

(来自https://code.google.com/p/pubsubhubbub/wiki/PublisherClients

如果您对我的回答感到满意,那么别忘了接受它;如果您仍有一些问题需要更新您的问题,我会尝试解决这些问题。