65.9K
CodeProject 正在变化。 阅读更多。
Home

完全可自定义的 Google API Web 客户端

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (9投票s)

2003年7月16日

3分钟阅读

viewsIcon

76747

downloadIcon

1373

一个基于Web的Google Web服务客户端,使用ASP.NET。

Sample Image - mygoog.jpg

引言

这是Google Web服务的基于Web的客户端的演示。这是我第一次尝试ASP.NET技术。

我已尽力使其完全可定制且尽可能开放。

关键定制功能包括:

  1. 搜索结果的显示由XSL文件(search.xsl控制。更改外观和感觉,并按您希望的方式自定义结果集。
  2. 应用程序在启动时从cfg.xml文件读取。它包含所有搜索查询参数以及一些应用程序特定的设置。例如,访问Google搜索数据库所需的密钥。您可以在附加的zip文件中找到此文件。

应用程序在当前工作目录中查找cfg.xml,默认情况下该目录为c:\winnt\system32。请将此文件复制到该位置。

这样做的好处是,可以根据需求变化随时更改搜索查询术语,结果显示也同样如此。

此应用程序允许用户查看前1000条结果,因为Google设置了此限制。

运行演示项目需要什么?

  1. Windows 2000上的IIS 5.0 / .NET Framework 1.0版。
  2. 必需:注册Google并获取您的个人许可证密钥。这是必须的
  3. 必需:打开源文件中包含的cfg.xml,并填入<key/><ResultsPath/><XslPath/>的值。稍后将解释这些键...

应用程序的功能

步骤 1

应用程序向Google服务器发送SOAP消息,Google服务器返回Google专有数据结构。然后应用程序解析此数据结构并创建一个XML文件。(我们称之为results.xml注意:只要在cfg.xml中指定,它可以是您选择的任何名称。)这是其中的一小部分

<SearchResults attributes1=value1... >
<ResultSet>
<Item>
      <summary /> 
      <url>http://www.iqsoft.com/</url> 
      <snippet>PRODUCTIONS </snippet> 
      <title>Welcome to SAWStudio.com!</title> 
      <cachedsize>9k</cachedsize> 
      <relatedInformationPresent>True</relatedInformationPresent> 
      <hostName /> 
      <directorytitle /> 
</Item>
</ResultSet>
</SearchResults>
<SearchResults>

第二步

然后应用程序使用自定义样式表(search.xsl)转换此XML文件,并将转换结果写入客户端浏览器。

好的,这就是<ResultsPath/><XslPath/>键的含义。

  • <ResultsPath/>是您希望应用程序将XML转储到的文件的完全限定路径。
  • <XslPath />是样式表(search.xsl)存储文件的完全限定路径。

源代码的关键区域

WebForm1.aspx.cs中的Search类

WebForm1.aspx的代码隐藏文件中定义的Search类(这是整个项目中唯一使用的Web窗体)包含核心函数dumpResultsasXml(),该函数的作用与其名称一致。System.XmlTextWriter负责写入。

Transform()函数负责转换为HTML。我使用了一个MemoryStream对象来读取转换结果,随后使用StreamReader读取该内存并将其转换为字符串数据类型。

WebForm1.getdata是实际执行操作的地方。可以在WebForm1.aspx中这样调用它:

<% Response.Write(getdata()) %>

关注点

Google Search Service对象只有一个实例,它在Application_Start()中初始化。

尽管“下一页”和“上一页”链接可以由search.xsl文件生成,但除了像这样将其增加x之外,我们无法在XSL中控制起始索引值:

<xsl:variable name="startindex" select="@currentIndex+10"/>...依此类推。

但是XSL将无法感知我们当前所在的页。以下代码显示了它是如何实现的:

if( !Page.IsPostBack) 
{ 
  start = Request.Params["start"]; 
  results = getdata(query,Convert.ToInt32(start));
}
else 
  results = getdata(query,0); //In this case start would always be 0.

跟踪是使用查询字符串参数start完成的,向该参数添加或减去x,以生成“下一页”和“上一页”链接的URL。在此示例中,x = 10。最好将其作为cfg.xml中的一个设置,这样会更通用。嗯,也许在下一个版本中:)

这里有一个“下一页”链接的生成示例,其中start是查询字符串参数start的值。nTotalCount是结果的总数。

if((nTotalCount - nNext) > 10)
 {
              
     Response.Write("<br></br><a href=\"webform1.aspx?type=Next&start=");
     Response.Write(nNext);
     Response.Write("&query=");
     Response.Write(TextBox1.Text);
     Response.Write("\"><b>Next</b></a><br></br>");  
}

好了,希望我已经涵盖了关键区域。像任何其他程序一样,我确信其中会有错误和我的疏忽。期待您的反馈,以便我能根据您的建议进行改进和修复错误。

© . All rights reserved.