0

嗨,我是一名学生,正在做我的学术项目。我需要一些指导来完成我的项目。

我的项目基于 grails 框架,它从 3 家不同的书店搜索书籍并给出所有 3 家商店的价格。我在搜索部分时需要帮助。一旦用户键入所需的书,如何直接搜索这些书店。

提前致谢

4

2 回答 2

1

您需要提供更多详细信息。通过搜索书店,您是指在数据库中搜索还是像亚马逊等?

于 2012-04-12T06:16:13.677 回答
0

我会查明这些在线书店是否有 API,或者如果您可以选择,请选择确实有 API 的在线书店,您可以使用这些 API 进行搜索。例如,亚马逊有一个“产品广告 API”,可用于搜索其目录(请参阅http://docs.amazonwebservices.com/AWSECommerceService/latest/DG)。您通常必须注册为会员才能访问这些东西。

一旦你有几个可以通过 API 访问的在线书店,编写一些 grails 代码来调用它们并协调结果就相对容易了。API 通常采用 Web 请求的形式,REST 或 SOAP(例如,参见Amazon - AnatomyOfaRESTRequest)。如果您可以使用简单的 REST,则可以使用 Groovy 的 HTTPBuilder 调用和使用书店的 API Web 服务,或者我相信有几个 Grails 插件(例如REST Client builder)。对于 SOAP,请考虑Grails CXF Client Grails 插件。

您可以逐个搜索 API,或者如果您想更高级,可以尝试使用新的 servlet 3.0 异步功能同时异步调用所有 3 个 API(请参阅如何从 Grails 2.0.x 中使用: Grails Web Features - 滚动到“Servlet 3.0 Async Features”)。您可能需要通过数据库进行协调,并且可能需要通过结果页面上的 AJAX 进行轮询以检查结果何时出现。

所以顺序如下:

  1. 用户从页面上的表单向服务器提交搜索请求
  2. 服务器创建并保存一个 DB 对象来跟踪请求,异步启动 API 调用(即不会阻止请求),然后返回一个页面给用户。
  3. “待定结果”页面显示给用户,并使用定期 AJAX 更新来检查结果的进度。
  4. 同时您的 API 调用正在执行。当它们返回时(希望有结果),它们会更新 DB 对象(或者更好的是相关对象)以存储调用的结果和状态。
  5. 最终,您的所有结果都将在数据库中,并且您对正在查询结果的服务器的定期 AJAX 检查将能够将它们返回到页面。它可以等待对 3 家书店的所有调用完成,或者它可以在返回结果时更新页面。
  6. 您的 AJAX 调用会更新页面以向用户显示结果。

请注意,如果您的书店没有 API,您可能必须考虑直接从书店网站“网络抓取”结果。这有点困难并且可能非常脆弱,因为网页显然经常变化。我使用 Geb ( http://www.gebish.org/ ) 来自动浏览以及一些简单的字符串匹配来挑选我需要的东西。还记得检查所涉及网站的条款和条件,因为有时特别不允许抓取。

另请注意,以上是完成此类事情的面向服务器的方法。您可以纯粹在客户端(浏览器)上执行此操作,使用 AJAX 调用 Web 服务并通过 JavaScript 进行处理。但我是服务器人:)

于 2012-04-12T10:53:37.933 回答