2011-12-21 61 views
1

我有一个Android应用程序,这是一个“链接”杂志网站。如何使用Android应用程序检测新版本的网站?

该应用程序的activity将是杂志网站本身。

我做了一个widget它,我运行一个service作为唯一目的:检测新杂志是否在线。当服务检测到它时,会更改widget icon

现在我的疑问是如何检测新杂志。我正在考虑每6小时从网站上下载一个文件,并比较最后一本杂志的版本(我可以从0开始,作为应用程序的本地变量,并与下载文档提供的编号进行比较)。


有没有更好的方法来做到这一点?

回答

1

这取决于你认为是什么“变化”。假设您想检测到任何更改,请下载杂志主页/其他文件,并对其执行MD5或类似的散列。存储散列。

下一次你做下载,你再次散列它然后比较散列。如果哈希值相同,则页面不变。散列的好处是减少了存储需求 - 您只需要保存少量字节,而不是整个文档。

然而,请注意,大多数页面并非静态 - 想象一个页面的角落里有时钟或任何动态内容 - 在这种情况下,您的页面总是显得不同。

对于一些运行良好的网站和服务器,您可以查看HTTP标头以获取有关何时将页面创建/修改/设置为过期的信息。这不会被所有人提供,有时可能只是明显的错误。

理想的解决方案是找到一个特定的页面(或页面的一部分),每次新问题都会发生一次变化 - 然后您可以继续检查那一件事情。一个例子可能是一个链接,它总是指向最新的问题,或者主图像的URL随每个问题而变化。

当然,如果杂志愿意帮助,他们可以从一个简单的文件,只是里面全WebService的问题数暴露出许多方面的信息给你。

编辑:假设你的控制下多个杂志,我建议你有一个返回在容易解析的格式(JSON,XML)的每个杂志的最新问题列表的单个页面。如果问题不频繁/非常手动的过程,此列表可能是静态的 - 在这种情况下,请手动编辑它。更好的办法是使用一个简单的数据库表来读取列表 - 这样你就可以拥有一个很好的用户界面来更新它,并允许其他人维护它,而不必让他们访问服务器文件系统。

我还建议您为每本杂志和该杂志的每期杂志分配一个真正独特的ID /密钥 - 以便将来您可以添加其他功能,如本地下载用于离线阅读/同步回复问题。

+0

我可以控制网站上的文件。所以我可以告诉他们把一份只有最后一本杂志版本号的文件。下载该文件并将其中的值与我上次看到的版本进行比较。我只是想看看这是不是一个好的选择。 – 2011-12-21 17:19:58

+1

我没有意识到这些网站在你的控制之下。我会用更好的解决方案更新我的答案。我假设你支持多种杂志? – Basic 2011-12-21 17:34:39

相关问题