gpt4 book ai didi

java - 从外部网站获取数据(它的结构可能会改变)

转载 作者:行者123 更新时间:2023-11-30 09:42:32 24 4
gpt4 key购买 nike

让我们从例子开始。有一个网站,据说它是 Twitter 的克隆版,名为 Tlitter。 Tlitter,就像推特一样,不断更新新内容(其中大部分只是垃圾,因此得名)。与 twitter 不同,没有 JSON/XML API 可以方便地获取内容。为了从中获取数据,您必须获取良好的旧 HTML 并解析它。这是获取该内容的唯一途径。

Titter 管理员有时会改变主意。他们可能会更改网站外观和 HTML 代码,从而导致提取数据的代码无法正常工作。您无法预测何时会进行更改。它可以每周制作一次,每月制作一次,也可能……永远不制作。

您创建了一个 Android 应用程序,它使用来自 Tlitter 的内容来补充来自其他来源(比如 Twitter)的内容。 Twitter 是至关重要的并且没有问题,因为它有一个很好的 api,但是当 Tlitter 停止工作时可能会让你头疼。假设 Twitter 为您提供商店价格,而 Tlitter 为您提供折扣。应用程序在没有 Tlitter 的情况下仍然可以正常运行,但有了 Tlitter,它会变得更好、更完整。

您不想仅仅为了修复所有与 Tlitter 相关的功能而发布新版本,因此您在 Google Appspot 上创建了一个应用程序,它充当您的应用程序和 Tlitter 之间的代理。如果 Tlitter 发生变化,您只需更新代理应用程序,所有用户都可以再次使用。

但是,您的应用程序越来越受欢迎,Google 改变了他们的定价政策,为 Appspot 引入了“实例小时数”。这两件事使您的应用几乎使用了所有免费配额。您不想为 Appspot 付费,您只需要以某种方式解决这个问题。

解决方案不止一种,而且可能没有完美的解决方案。我问你,你会如何解决这个问题?我的想法如下:

  1. 放弃代理应用程序的想法,在移动应用程序中处理所有内容
    • 优点:Appspot 没问题
    • 缺点:需要在 Tlitter 更改时更新应用,用户端的网络流量更多
  2. 在代理应用程序中缓存数据并尝试对其进行优化,或寻找更好的云服务
    • 优点:更新没有问题,响应时间可能更快
    • 缺点:如果应用程序继续流行,它最终将使用所有免费资源,无论是否进行了优化
  3. 结合两种解决方案。让应用程序维护一些 'Titter 结构定义文件”,在线托管。 Tlitter 的内容根据文件中指定的规则提取,应用程序检查(每天或每小时)该文件的更新。
    • 优点:Tlitter 时间改变时无需更新应用
    • 缺点:一个非常复杂的解决方案,目前我不知道如何实现它、可能的安全风险等。

提供的示例可能看起来很普通,但它几乎完美地模拟了我的问题。你会怎么解决?如果我能找到实现它的好方法,我会选择解决方案 1 或 3。

最佳答案

对于解决方案 3,您需要寻找一些可以更新的 DSL 或脚本语言。也许jsoup是一个很好的基地。您将加载一个包含选择器字符串 的文件来检索该数据。在下面的示例中(来自 jsoup 网页),您实际上将从 Web 服务加载字符串 (#mp-itn b a)。

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

Jsoup 在 android 上直接运行。

关于java - 从外部网站获取数据(它的结构可能会改变),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8624718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com