0

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

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

例如,

如果我订阅 CNN 提要,应用程序将加载当前的 CNN 提要,然后我将其读取。过了一会儿,我打开客户端,我应该会发现我阅读的所有提要都标记为已读。

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

我的问题是,是否有另一种方法来跟踪是否读取了提要,而不是将所有站点的所有提要保存在数据库上,这将导致庞大的数据库

4

1 回答 1

0

欢迎来到 StackOverflow :D

表示 RSS 提要

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

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 中。

使用 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-版本.aspx

pubsubhubbub

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

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

如果您对我的回答感到满意,请不要忘记接受它;如果您仍有一些审讯,请更新您的问题,我会尝试解决它们。

于 2014-04-10T23:22:36.843 回答