如何在grails中进行web搜索

如何在grails中进行web搜索,grails,grails-plugin,Grails,Grails Plugin,嗨,我是一个做学术项目的学生。我需要一些指导来完成我的项目 我的项目是基于grails框架的,该框架搜索3家不同书店的书籍,并给出所有3家书店的d价格。我需要搜索部分的帮助。 一旦用户输入所需书籍,如何指导对这些书店的搜索 提前感谢您需要提供更多详细信息。通过搜索书店,你是指在数据库中搜索,还是像亚马逊等 我会找出这些在线书店是否有API,或者如果您有选择,请选择那些有API的在线书店,您可以使用它们进行搜索。例如,亚马逊有一个“产品广告API”,可用于搜索其目录(请参阅)。您通常必须注册为附属

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

我的项目是基于grails框架的,该框架搜索3家不同书店的书籍,并给出所有3家书店的d价格。我需要搜索部分的帮助。 一旦用户输入所需书籍,如何指导对这些书店的搜索


提前感谢

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

我会找出这些在线书店是否有API,或者如果您有选择,请选择那些有API的在线书店,您可以使用它们进行搜索。例如,亚马逊有一个“产品广告API”,可用于搜索其目录(请参阅)。您通常必须注册为附属机构才能访问此类内容

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

您可以一个接一个地搜索API,或者如果您想更高级,可以尝试使用新的servlet 3.0异步特性(请参阅如何从Grails 2.0.x使用:-滚动到“servlet 3.0异步特性”)同时异步调用所有3个API。您可能需要通过DB对此进行协调,或者在结果页面上通过AJAX进行轮询以检查结果何时出现

因此,顺序如下:

  • 用户从页面上的表单向服务器提交搜索请求
  • 服务器创建并保存一个DB对象来跟踪请求,异步启动API调用(即,使请求不被阻止),然后将页面返回给用户
  • 将向用户显示“待定结果”页面,并使用定期AJAX更新来检查结果的进度
  • 与此同时,API调用正在执行。当它们返回时(希望有结果),它们会更新DB对象(或者更好,是相关对象),以存储调用的结果和状态
  • 最终,您的所有结果都将在数据库中,您对查询结果的服务器的定期AJAX检查将能够将结果返回到页面。它可以等待对3家书店的所有呼叫完成,也可以在收到结果时更新页面
  • 您的AJAX调用将更新页面以向用户显示结果
  • 如果你的书店没有一个API,你可能不得不考虑直接从书店的网站上“浏览网页”的结果。这有点困难,而且可能非常脆弱,因为网页显然经常更改。我使用Geb()来自动浏览,并使用一些简单的字符串匹配来选择我需要的东西。还记得检查涉及的网站的条款和条件,因为有时刮擦是特别不允许的


    还要注意的是,上面的方法是一种面向服务器的方法,用于完成这种事情。您可以完全在客户端(浏览器)上完成,使用AJAX调用Web服务,并通过JavaScript进行处理。但我是一名服务器管理员:)

    是的,它应该在亚马逊、flipkart、infibeam等书店进行搜索,并检索搜索到的书籍的价格。大多数书店都有明确定义的API。虽然我不确定flipkart是否有。但亚马逊应该这样做。谷歌就是这样。如果一个站点没有,那么您将不得不使用类似ApacheNutch的爬虫来获取和解析HTML内容,并从中提取数据。因为你知道你正在解析的html结构,所以应该很容易。如果你找到了所有你想要搜索的网站的API,那么你可以在用户按下你页面上的搜索按钮时完成。这将在控制器中的操作中进行。但是,如果没有来自所有站点的API,则需要运行单独的作业,对这些站点进行爬网并为数据编制索引。谷歌搜索这些术语的确切含义。所以,当你的用户搜索时,他将从索引中返回数据,而不是API调用。嘿,谢谢,我会尝试一下(纽约证券交易所:),你能提供你的邮件id吗?这样dat可以澄清是否有任何疑问哈哈!我不是在为你做项目!:)请随意询问更多有关stackoverflow的问题,我可以这样回答。如果你认为这有帮助的话,请考虑支持/接受答案:)我尝试在索引x.gSP页面中添加{action=}这个链接。它会将它引导到指定了bookname页面的flipkart站点。但我无法了解如何比较3个站点,然后将它引导到各自的站点。请尝试安装Grails REST客户端(),并从服务器(即从控制器或服务)调用它。使用flipkart url尝试使用HTTP{…}和AsyncHTTP{…}。您必须解析返回的HTML(看起来Flipkart没有API)。