使用Google Search API的简单步骤(主要参考自API文档)

来源:互联网 发布:数据质量图 编辑:程序博客网 时间:2024/04/30 05:15

参考文献:Google AJAX Search API的类文档:http://code.google.com/intl/zh-CN/apis/ajaxsearch/documentation/reference.html#_class_GlocalResult

第一步:构造一个搜索服务“容器”

google.search.SearchControl 的实例代表页面上的一个搜索控件,这个控件是多种“搜索服务”的“容器”。

第二步:构造一个搜索“服务”对象

google.search.LocalSearch()、这个构造函数可以构造一个“搜索服务容”对象。“搜索服务”是我自己起的名字,之所以叫这个名字是因为我认为它的核心是服务。尽管默认的是有一个搜索框和结果列表,但这些都是可以被改变的,甚至搜索结果的内容都是可以改变的,因为我认为这个构造函数的核心是一个“服务”。

 

第三步:像容器中添加“搜索服务”

searchControl.addSearcher(searcher, optiions)。options的类型为google.search.SearchOptions。可以添加的搜索服务有多种,到目前为止Google提供了以下类型的搜索器:

  • google.search.LocalSearch
  • google.search.WebSearch
  • google.search.VideoSearch
  • google.search.BlogSearch
  • google.search.NewsSearch
  • google.search.ImageSearch
  • google.search.BookSearch
  • google.search.PatentSearch

第四步:SearchControl对象调用draw方法,按照里面的DrawOptiions参数画出搜索框。

searchControl.draw(document.getElementById("from"), drawOptions)

这是一般的流程,但Google提供了很多选项来定制这些服务。主要的选项有两种,一种是SearcherOptions,另一种是DrawOptions。

 

google.search.SearchOptions

控制扩展模式

将各个搜索器添加到搜索控件后,可选的第二个参数(google.search.SearcherOptions 对象)可以控制每个服务的默认扩展模式,这将影响在网页上的该服务位置中将显示多少搜索结果。扩展模式可以为以下模式之一:

      google.search.SearchControl.EXPAND_MODE_OPEN:

在对象中尽可能完整显示的结果。

    google.search.SearchControl.EXPAND_MODE_CLOSED:

    结果被从视图中隐藏,除非通过使用 UI 元素(例如箭头)打开。

      google.search.SearchControl.EXPAND_MODE_PARTIAL:
      结果显示为“开放”扩展模式的子集。

    控制搜索器结果位置

    某些应用程序中,需要将给定服务的搜索结果投影到网页上的任意位置。可以通过使用服务对应的搜索器对象的 setRoot() 方法支持此运行模式。

    设置无结果时的提示显示

    //no results message

    searcherOptions.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);

    google.search.DrawOptions

    当请求搜索控件进行绘制时,您必须为控件指定一个在其中绘制的容器。除了此要求的参数之外,搜索控件的 .draw() 方法还接受一个可选的google.search.DrawOptions 对象。该对象允许应用程序请求线性或标签式布局(线性布局为默认设置)。此外,该对象允许应用程序请求“搜索表单”(即,输入元素、按钮、控件等等)。分离出与执行搜索相关联的“搜索窗体”(即,输入元素、按钮、控件等)可以通过使用 .setSearchFormRoot() 方法并提供您自己应该托管搜索窗体的容器来实现该操作。

    作为上述更高级的模式,该对象允许应用程序请求搜索控件不创建任何搜索窗体,而是使用应用程序提供的文本输入元素。当指定此选项时,搜索控件将通过获取onkeyup 和 onpaste 事件来控制输入元素。一段时间之后,该控件获得的时间列表可能会更改。通过将输入元素传递到搜索控件,应用程序将简单地声明对元素放置以及样式负责。当输入元素已传递到控件时,除了读取其值(如果需要)之外,应用程序不应与该元素交互。

     


    设置存在多个搜索服务时显示结果的样式:

    drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED)

    设置输入框:

    drawOptions.setInput(document.getElementById("inputbox"));

    当设置输入框后,默认的搜索框将不再出现,而是使用这个输入框作为搜索框使用。

    设置搜索框在DOM中的位置:

    drawOptions.setSearchFormRoot(element)

    此方法用于表示您希望将“搜索窗体”放置在由“element”指定的 DOM 容器(而不是搜索结果附近的默认位置)中。

     

    SearchControl的属性

    searchControl.setOnKeepCallback(object, method, opt_keepLabel?)

    此方法用于通知搜索控件,当用户已选择了复制内容(由此控件管理的搜索结果之一)时要通知的调用程序。如果没有调用此方法,将不会为用户提供复制搜索结果的机会。如果调用了此方法,则每个搜索结果均带有文本链接(在搜索结果下面)的注释。单击此链接将使指定的方法在指定的对象上被调用,从而传递一个与搜索结果相关联的google.search.Result 对象。此方法允许调用程序指定系统定义的内置文本标签值,该值可让用户可以复制结果,或者指定对调用应用程序更具意义的标签。当使用系统定义的标签时,将自动把值翻译为正在运行的控件其余部分所用的语言。

    • object - 提供了一个应用程序级别对象,此对象定义了将在其中调用指定方法的环境。
    • method - 提供了要调用的方法。例如,如果此方法作为 .setOnKeepCallback(this, foo) 被调用,则当用户单击保持标签时,将调用this.foo(result)result的类型为GResult,可以用它来控制搜索结果的html、
    • opt_keepLabel - 提供了位于每个搜索结果下面的可选文本标签,当点击此标签时将在指定的对象/方法中触发回调。有效值包括:
      • google.search.SearchControl.KEEP_LABEL_SAVE-“保存”标签值
      • google.search.SearchControl.KEEP_LABEL_KEEP-“保持”标签值
      • google.search.SearchControl.KEEP_LABEL_INCLUDE-“包括”标签值
      • google.search.SearchControl.KEEP_LABEL_COPY-“复制”标签值(默认)
      • google.search.SearchControl.KEEP_LABEL_BLANK - 使用空白标签值,当您只想复制图片(通过 css 可选)时适合使用此值
      • 其他任意值 - 传递的值将成为标签。调用程序负责本地化。

    searchControl.clearAllResults()

    此方法用于清除搜索控件外部的所有搜索结果。

     

    searchControl.setLinkTarget(linkTarket)

    调用此方法以设置用于嵌入搜索结果中的链接的链接目标。默认值为google.search.Search.LINK_TARGET_BLANK,该值指定了链接将在新的浏览器窗口中打开。当调用此方法时,将建立一个搜索控件范围的链接目标设置。这将影响当前连接到此搜索控件的所有搜索器以及后续添加到此控件的所有搜索器。

    • linkTarget - 提供了应在其中打开链接的目标框架,有效值包括:
      • google.search.Search.LINK_TARGET_BLANK - 链接会在新的窗口中打开,例如 <A href=... target=_blank ...>
      • google.search.Search.LINK_TARGET_SELF - 链接会在同一窗口和框架中打开,例如 <A href=...target=_self ...>
      • google.search.Search.LINK_TARGET_TOP - 链接会在最顶端的框架中打开,例如 <A href=...target=_top ...>
      • google.search.Search.LINK_TARGET_PARENT - 链接会在最顶端的框架中打开,或者替换当前的框架,例如 <A href=... target=_parent ...>
      • anything-else - 链接将在指定的框架或窗口中打开,例如 A href=... target=anything-else ...>
    • 返回 - n/a

     

     

    searchControl.setSearchStartingCallback(object, method)

    searchControl.setSearchCompleteCallback(object, method)

     

    此方法用于通知搜索控件在搜索完成时将通知调用程序。请注意,此调用的粒度是搜索器级别,而不是搜索控件级别。这意味着如果您的搜索控件包含 5 个搜索器并且执行了一次搜索,则每个搜索器完成时,将调用您的回调。另请注意,并非所有搜索都可以完成,因此请注意不要使编码陷入死锁(在此处假设每次搜索将产生一次完成)。

    • object - 提供了一个应用程序级别对象,此对象定义了将在其中调用指定方法的环境。
    • method - 提供了要调用的方法。例如,如果此方法作为 .setSearchCompleteCallback(foo, MyObject.prototype.mySearchComplete) 被调用,则当完成搜索时,将调用foo.mySearchComplete(searchControl, searcher)。回调的第一个参数 searchControl 提供了搜索控件,第二个参数 searcher 提供了一个刚完成搜索的搜索器对象

     

     

    GlocalResult - 属性

    属性说明

    .title

    为结果提供了标题。在某些情况下,标题和 streetAddress 相同。当搜索词语是街道地址(例如,1231 Lisa Lane, Los Altos, CA)时,通常会出现这种情况。

    .titleNoFormatting

    提供了标题,但是与 .title 不同,此属性被删除了 html 标记(例如,<b>、<i> 等等)。

    .url

    为与搜索结果相关联的“Google 地图详情”页面提供了一个网址。

    .lat

    提供了结果的纬度值。通过使用以下代码段,此纬度值用于建立 GPoint
    p = new GPoint(parseFloat(result.lng), parseFloat(result.lat));

    .lng

    提供了结果的经度值。通过使用以下代码段,此纬度值用于建立 GPoint
    p = new GPoint(parseFloat(result.lng), parseFloat(result.lat));

    .streetAddress

    为给定结果提供了街道地址和号码。注意:在某些情况下,如果结果没有已知街道地址,则可将此属性设置为 ""。

    .city

    为结果提供了城市名称。注意:在某些情况下,可将此属性设置为 ""。

    .region

    为结果提供了地区名称(例如,在美国,通常情况下这是州的缩写,而在其他地区则可能是省,等等)。注意:在某些情况下,可将此属性设置为 ""。

    .country

    为结果提供了国家/地区名称。注意:在某些情况下,可将此属性设置为 ""。

    .phoneNumbers[]

    提供了一组电话号码对象,其中都包含一个 .type 属性和一个 .number 属性。.type 属性的值可以是“主要”、“传真”、“手机”、“数据”或者 "" 之一。

    .addressLines[]

    为此结果提供包含邮寄地址行的数组,例如:["1600 Amphitheatre Pky", "Mountain View, CA 94043"] 或 ["Via del Corso, 330", "00186 Roma (RM), Italy"]。为了正确呈现与结果关联的地址,直接使用结果的 .html 属性,或者重复查看该数组并依次显示每个 addressLine。

    .ddUrl

    为此搜索结果提供了一个可以用来提供自搜索结果集的中心的行驶方向的网址。请注意,在某些情况下可能会缺少此属性或者此属性为空。始终限制在 if (result.ddUrl && result.ddUrl != null) 的测试内的访问。

    .ddUrlToHere

    为此搜索结果提供了一个可以用来提供自用户指定的位置的行驶方向的网址。请注意,在某些情况下可能会缺少此属性或者此属性为空。始终限制在 if (result.ddUrlToHere && result.ddUrlToHere != null) 的测试内的访问。

    .ddUrlFromHere

    从此搜索结果提供了一个可以用来向用户指定的位置提供行驶方向的网址。请注意,在某些情况下可能会缺少此属性或者此属性为空。始终限制在 if (result.ddUrlFromHere && result.ddUrlFromHere != null) 的测试内的访问。

    .staticMapUrl新增!

    向当前结果的静态地图图片表示提供了一个网址。图片为 150px 宽、100px 高,并带有一个表示当前位置的标记。预期用途是通过使用url 属性来对此图片进行超链接。可以通过使用 google.search.LocalSearch.resizeStaticMapUrl(). () 来调整图片的大小。静态地图平铺示例演示了使用此属性的一种方式。

    .listingType新增!

    此属性表示此结果的类型,可以是本地商户列表中或地理编码结果中的 "local",也可以是 KML 列表中的 "kml"

    .content新增!

    对于“KML”结果,此属性包含与 KML 结果相关联的内容代码段。对于“本地”结果,此属性是空字符串。

     

     

    在实际使用中,一般很少用ddUrlToHere和ddUrlFromHere属性来进行路线查询,因为这两个链接实际上是指向Google自己的网站的,这样会把用户从自己的网站带走。最好的方法是通过streetAddress@lat, lng的方法。其中,streetAddress是给人看的,lat, lng是给API看的。API通过起点和终点的坐标,可以计算出一条最佳路径。但目前只能提供开车路线,公交搜索服务还没引入,不过据Google在今年的开发大会上所说,他们马上会推出公交搜索。另外,MapABC的公交搜索已经提供在他们的API中了,也可以使用他们的API来做。效果应该差不多,毕竟,Google的数据也是MapABC提供的。

     

     


    设置网站限制

     

     

      在某些情况下,您可能想要将网页搜索、新闻搜索或博客搜索限制到特定网站或博客。当您应用此类限制时,通常您可能还想在关联的搜索结果区域上设置自己的自定义标签,并且可能想为此结果区域设计不同的样式。

      可以通过使用由搜索器选项提供的方法组合支持所有这些功能。以下示例演示了 .setUserDefinedLabel().setUserDefinedClassSuffix() 和.setSiteRestriction() 的使用。该示例创建一个搜索控件,其中 google.search.WebSearch 的一个实例是限制为仅返回来自 amazon.com 的结果的网站,使用“Amazon.com”作为搜索区域标签,并将一些自定义 CSS 样式(粗体标题、橙色钩子按钮等)应用于此区域。还演示了一个类似的区域(显示google.search.BlogSearch 和 google.search.NewsSearch 上的网站限制)。

     

     

     

     

     

    原创粉丝点击