C# Google API 编程
2009-09-01 21:55
原文:http://blog.csdn.net/zmsx/archive/2005/11/26/537340.aspx

通过C#使用googleAPI (一)

  • 准备工作
要使用googleAPI 来开发自己的桌面应用程序,先要做下面的准备工作:
1. 首先在下面地址 http://www.google.com/apis/download.html下载 the Google Web APIs Developer's Kit
2. 然后在下面地址 https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey注册一个 license key 以使用google提供的搜索服务。
  • 新建一个Google Search应用程序
1.       新建一个Windows From 项目命名为Google Search。
2.       添加Web引用,以便使用google web services。具体做法是将下载的 the Google Web APIs Developer's Kit中的 GoogleSearch.wsdl文件放入本地的服务器上,然后在VS中右键点击 资源管理器中的 引用,再选择 添加 Web 引用,然后输入 GoogleSearch.wsdl文件在本机服务器上的地址 http://localhost/GoogleSearch.wsdl,更改Web引用名为 GoogleSearch后,点击 添加引用后返回。
3.       进行界面设计,添加3个控件,TextBox(用于输入关键字),Button(用于提交信息),RichTextBox(用于显示搜索结果信息)。
4.       编写事件处理。
1)       添加命名空间。 using Google_Search.googlesearch;
2)       双击Button控件,在Button的事件处理中添加下面的代码:
          try
{
GoogleSearchService s = new GoogleSearchService();   //建立一个搜索服务。
GoogleSearchResult r = s.doGoogleSearch("NGYfW7dQFHKshnXPwvctLsaipk03YK2x", textBox1.Text, 0, 10, true, "", true, "", "", "");       //使用doGoogleSearch方法取得搜索结果。
ResultElement[] re = r.resultElements;         //将结果传入一个ResultElement数组。
foreach (ResultElement n in re)
{
richTextBox1.AppendText(n.title+"\r");           //显示标题。
richTextBox1.AppendText(n.snippet+"\r");   //显示包含关键字摘要信息。
richTextBox1.AppendText(n.URL);                //显示网页地址。
richTextBox1.AppendText("\n\r\r");
}
}
            catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
3)        按ctrl+F5就能测试应用程序了。
  • 不足之处

            通过以上的的操作,一个简单的应用程序就完成了,但是在显示方面还不是很完美,而且很多属性和方法都没用到,以及一些参数的用法,在下一篇中会提到这些。通过这些可以用到google的强大功能。

通过C#使用googleAPI (二)

GoogleSearchServices doGoogleSearch 方法
   
    需要进行搜索先建立一个GoogleSearchServices 类的对象,然后调用doGoogleSearch方法取得信息。下面是google提供的对该方法的描述。
public doGoogleSearch( string key , string q , int start , int maxResults , bool filter , string restrict , bool safeSearch , string lr , string ie , string oe)
下面对各个参数进行介绍:
Key:这是由google提供的一个认证用的ID,可以在 http://www.google.com/apis/申请。由于目前是测试阶段,每个ID一天只提供1000次的搜索服务请求。
q:这个就是要搜索的关键字。string类型
start:结果开始的索引数,从0开始。 int 类型
maxresults:返回的结果数的最大值,最大为10。int 类型
filter:用于标识是否对搜索的结果进行过滤,所进行的过滤是对于同一主机上的内容只返回1—2个结果。bool类型
restrict:用于限定搜索的国家或地区,如果为空,表示不限制。string 类型。
safeSearch:使用一个bool值表示是否过滤垃圾信息。
lr:对语言的限制,string类型 可选代号如下表:
     ie:输入所使用的字符编码。这个参数将被忽略,所有的输入都将采用UTF-8。
      oe:输出所使用的字符编码。这个参数将被忽略,所有的输出都将采用UTF-8
 
 
通过对这个方法的各个参数的设定可以是自己的应用程序在搜索方面更加人性化。具体使用时可以通过各种控件来收集这些信息。

=======================================================================很 多时候感觉用www.google.com搜索网站挺麻烦的,查阅MSDN的知识库后用C#写了这个windows应用程序版的 google搜索引擎,主要调用了google开放出来的web service,不过搜索时速度还不是很快,但至少省去了右键[在新窗口中打开]的麻烦,以下是程序的源码,虽然挺长的,不过关键代码并不多,抛砖引玉 吧。

//Form1.cs

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Diagnostics;

namespace WindowsApplication2
{

public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ListBox listBox1;
private String sKey;

private System.ComponentModel.Container components = null;

public Form1()
{
InitializeComponent();
}


protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code

private void InitializeComponent()
{
this.textBox2 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// textBox2
//
this.textBox2.Location = new System.Drawing.Point(8, 32);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(240, 21);
this.textBox2.TabIndex = 1;
this.textBox2.Text = "ERP";
//
// button1
//
this.button1.Location = new System.Drawing.Point(264, 32);
this.button1.Name = "button1";
this.button1.TabIndex = 2;
this.button1.Text = "搜索";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.BackColor = System.Drawing.SystemColors.Info;
this.label1.Location = new System.Drawing.Point(136, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(104, 16);
this.label1.TabIndex = 3;
this.label1.Text = "单击此处获得帮助";
this.label1.Click += new System.EventHandler(this.label1_Click);
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 8);
this.label2.Name = "label2";
this.label2.TabIndex = 4;
this.label2.Text = "请输入关键字: ";
//
// listBox1
//
this.listBox1.HorizontalScrollbar = true;
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(8, 64);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(360, 292);
this.listBox1.TabIndex = 5;
this.listBox1.DoubleClick += new System.EventHandler(this.listBox1_DoubleClick);
//
// Form1
//
this.AcceptButton = this.button1;
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(376, 365);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox2);
this.Name = "Form1";
this.Text = "Google搜索引擎 V1.0 by yzwgh@sina.com";
this.ResumeLayout(false);

}
#endregion


[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
try
{
sKey="R1SnlcZQFHIBYlBCYdip3j1ERCvueU2Z";

fewCIPdQFHIhHaO+vWpBTjlblc6ajHKN


googleapi.GoogleSearchService s=new googleapi.GoogleSearchService();


googleapi.GoogleSearchResult r=s.doGoogleSearch(sKey, textBox2.Text,
0, 10, false, "", false, "", "", "");
googleapi.ResultElement[] re=r.resultElements;
this.listBox1.Items.Clear();
for (int i=0;i<re.Length;i++)
{

this.listBox1.Items.Add((object)(re[i].title));
this.listBox1.Items.Add((object)(re[i].URL));

}
}
catch(Exception eee)
{
MessageBox.Show(eee.Message,this.Text );
}

}

private void listBox1_DoubleClick(object sender, System.EventArgs e)
{
try
{
String url;
url=listBox1.Text;
Process p = Process.Start(@url);
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}

private void label1_Click(object sender, System.EventArgs e)
{
String s;
s=this.Text + "\n";
s=s+"作者:yzwgh\n";
s=s+"EMail:yzwgh@sina.com\n";
s=s+"双击下面的网址可打开相应的链接。";
MessageBox.Show(s,this.Text );
}
}
}