当前位置:  开发笔记 > 编程语言 > 正文

如何在与Google阅读器同步时跳过已知条目?

如何解决《如何在与Google阅读器同步时跳过已知条目?》经验,为你挑选了1个好方法。

为了将离线客户端写入Google阅读器服务,我想知道如何最好地与服务同步.

似乎还没有官方文档,我到目前为止找到的最佳来源是:http://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI

现在考虑一下:有了上面的信息,我可以下载所有未读的项目,我可以指定下载多少项目并使用atom-id我可以检测到已经下载的重复项目.

对我来说缺少的是一种指定我只想要自上次同步以来的更新的方法.我可以说给我10个(参数n = 10)最新(参数r = d)条目.如果我指定参数r = o(日期升序),那么我也可以指定参数ot = [最后一次同步],但只有那时,升序顺序没有任何意义,当我只想阅读一些项目而不是所有项目项目.

知道如何解决这个问题,而无需再次下载所有项目,只是拒绝重复项目?不是一种非常经济的民意调查方式.

有人建议我可以指定我只想要未读条目.但是为了使该解决方案能够像Google Reader再次提供此条目一样,我需要将它们标记为已读.反过来,这意味着我需要在客户端保持自己的已读/未读状态,并且当用户登录到Google阅读器的在线版本时,条目已被标记为已读.这对我不起作用.

干杯,马里亚诺



1> Curt J. Samp..:

要获取最新条目,请使用标准的从最新日期下载的标准,该标准将从最新条目开始.您将在XML结果中收到"continuation"标记,如下所示:

CArhxxjRmNsC`

扫描结果,提取任何新内容.您应该发现所有结果都是新结果,或者所有结果都是新结果,之后所有结果都已为您所知.

在后一种情况下,你已经完成了,但在前者你需要找到比你已经检索到的更新的东西.通过使用continuation从刚刚检索到的集合中的最后一个结果开始,通过将其作为c参数传递给GET请求来获取结果,例如:

http://www.google.com/reader/atom/user/-/state/com.google/reading-list?c=CArhxxjRmNsC

继续这样,直到你拥有一切.

n参数是要检索的项目数的计数,适用于此,您可以随时更改它.如果检查频率是用户设置的,因此可能非常频繁或非常罕见,您可以使用自适应算法来减少网络流量和处理负载.最初请求少量最新条目,比如说五个(添加n=5到您的GET请求的URL).如果所有都是新的,在下一个请求中,你使用延续,请求更大的数字,比如说,20.如果这些仍然都是新的,要么Feed有很多更新,要么已经有一段时间了,所以继续以100或其他为一组.


但是,如果我在这里错了,请纠正我,你也想知道,在你下载了一个项目之后,由于该人使用谷歌阅读器界面阅读它,它的状态是否从"未读"变为"阅读".

一种方法是:

    更新谷歌上已在本地阅读的任何项目的状态.

    检查并保存Feed的未读计数.(您希望在下一步之前执行此操作,以便保证在下载最新项目和检查读取计数之间未达到新项目.)

    下载最新的项目.

    计算您的阅读次数,并将其与谷歌进行比较.如果Feed的读取次数比您计算的要多,您就会知道Google上已经读取了一些内容.

    如果在谷歌上阅读了某些内容,请开始下载阅读项目并将其与未读项目数据库进行比较.你会发现谷歌说的一些项目,你的数据库声称是未读的; 更新这些.继续这样做,直到您发现其中一些项目等于您的阅读计数和谷歌的差异,或直到下载不合理为止.

    如果你没有找到所有读取项目,这就是生活 ; 将剩余的数字记录为"未读未读"总数,您还需要在下次计算您认为未读的本地号码时将其包括在内.

如果用户订阅了很多不同的博客,那么他也可能会对其进行广泛的标记,因此您可以在每个标签上而不是整个Feed中执行此操作,这有助于保持数据量的减少,如果用户没有在谷歌阅读器上阅读任何新内容,您将无需进行任何标签转移.

整个方案也可以应用于其他状态,例如已加星标或未加星标.

现在,就像你说的那样

...这意味着我需要在客户端上保持自己的已读/未读状态,并且当用户登录到Google阅读器的在线版本时,条目已被标记为已读.这对我不起作用.

真的够了.既不保持本地读/未读状态(因为你保留了所有项目的数据库),也没有标记在谷歌(API支持)中读取的项目似乎非常困难,那么为什么这对你不起作用?


然而,还有一个问题:用户可能会在谷歌上标记为未读的内容.这会给系统带来一些麻烦.我的建议,如果你真的想要试着照顾这个,就是假设一般用户只会触摸更近期的东西,并且每次下载最近几百个左右的项目,检查所有的状态他们.(这并不是那么糟糕;下载100个项目带我从300s的0.3s到2.5MB的2.5s,尽管是非常快速的宽带连接.)

同样,如果用户拥有大量订阅,他也可能拥有相当多的标签,因此在每个标签的基础上执行此操作会加快速度.实际上,我建议你不仅要检查每个标签,还要分散检查,每分钟检查一个标签,而不是每20分钟检查一次.如果你想减少带宽,你也可以对旧项目的状态变化进行"大检查",而不是进行"新东西"检查,可能每隔几个小时检查一次.

这有点带宽,主要是因为你需要从谷歌下载完整的文章只是为了检查状态.不幸的是,在我们可以使用的API文档中,我看不出任何方法.我唯一真正的建议是尽量减少对非新物品的状态检查.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有