如何在grails中进行Web搜索

时间:2012-04-12 05:01:24

标签: grails grails-plugin

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

我的项目基于Grails框架,该框架从3个不同的书店搜索书籍,并从所有3个商店中提供d价格。我需要帮助搜索部分。 一旦用户为所需书籍打字,如何指导搜索这些书店。

提前致谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

所以序列如下:

  1. 用户从页面上的表单向服务器提交搜索请求
  2. 服务器创建并保存数据库对象以跟踪请求,异步启动API调用(即不阻止请求),然后将页面返回给用户。
  3. 向用户显示“待处理结果”页面,并使用定期AJAX更新来检查结果的进度。
  4. 同时您的API调用正在执行。当他们返回时,希望结果,他们更新数据库对象(或更好的,相关对象)来存储调用的结果和状态。
  5. 最终您的所有结果都将在数据库中,并且定期对查询结果的服务器进行AJAX检查将能够将它们返回到页面。它可以等待所有对3个书店的调用完成,也可以在它返回结果时更新页面。
  6. 您的AJAX通话会更新页面以向用户显示结果。
  7. 请注意,如果您的书店没有API,您可能需要考虑直接从书店的网站“网络抓取”结果。这有点困难,因为网页显然经常变化,所以可能会非常脆弱。我使用Geb(http://www.gebish.org/)来自动浏览以及一些简单的字符串匹配来挑选我需要的东西。还记得查看条款和涉及网站的条件,因为有时候特别不允许抓取。

    另请注意,上面是一种面向服务器的方法来完成这种事情。你可以在客户端(浏览器)上完成它,使用AJAX调用web服务并通过JavaScript处理。但我是服务员:)