Previous Section  < Day Day Up >  Next Section

Hack 99. Program Google in C# and .NET

Create GUI and console Google search applications with C# and the .NET framework.

The Google Web APIs Developer's Kit includes a sample C# Visual Studio .NET (http://msdn.microsoft.com/vstudio/) project for a simple GUI Google search application (take a look in the dotnet/CSharp folder). The functional bits that you would probably find most interesting are in the Form1.cs code.

This hack provides basic code for a simple console Google search application similar in function (and, in the case of Java [Hack #97], form, too) to those in Perl Hack #98], et al.

Compiling and running this hack requires that you have the .NET Framework (http://msdn.microsoft.com/netframework/downloads/updates/default.aspx) installed.


9.16.1. The Code

Type this code and save it to a text file called googly.cs:

// googly.cs

// A Google Web API C# console application.

// Usage: googly.exe <query>

// Copyright (c) 2002, Chris Sells.

// No warranties extended. Use at your own risk.

using System;

class Googly {

  static void Main(string[] args) {

    // Your Google API developer's key.

    string googleKey = "insert key here";

    // Take the query from the command line.

    if( args.Length != 1 ) {

      Console.WriteLine("Usage: google.exe <query>");

      return;

    }

    string query = args[0];

    // Create a Google SOAP client proxy, generated by:

    // c:\> wsdl.exe http://api.google.com/GoogleSearch.wsdl

    GoogleSearchService googleSearch = new GoogleSearchService( );

    // Query Google.

    GoogleSearchResult results = googleSearch.doGoogleSearch(googleKey, 

query, 0, 10, false, "", false, "", "latin1", "latin1");

    // No results?

    if( results.resultElements == null ) return;

    // Loop through results.

    foreach( ResultElement result in results.resultElements ) {

      Console.WriteLine( );

      Console.WriteLine(result.title);

      Console.WriteLine(result.URL);

      Console.WriteLine(result.snippet);

      Console.WriteLine( );

    }

  }

}

Remember to insert your Google developer's key in place of insert key here, like so:

// Your Google API developer's key.

string googleKey = "

12BuCK13mY5h0E/34KN0cK@ttH3Do0R

";

9.16.2. Compiling the Code

Before compiling the C# code itself, you must create a Google SOAP client proxy. The proxy is a wodge of code custom-built to the specifications of the GoogleSearch.wsdl file, an XML-based description of the Google Web Service, all its methods, parameters, and return values. Fortunately, you don't have to do this by hand; the .NET Framework kit includes an application, wsdl.exe, that does all the coding for you.

This is a remarkable bit of magic if you think about it: the lion's share of interfacing to a web service auto-generated from a description thereof.


Call wsdl.exe with the location of your GoogleSearch.wsdl file like so:

C:\GOOGLY.NET>wsdl.exe GoogleSearch.wsdl

If you don't happen to have the WSDL file handy, don't fret. You can point wsdl.exe at its location on Google's web site:

C:\GOOGLY.NET\CS>wsdl.exe http://api.google.com/GoogleSearch.wsdl

Microsoft (R) Web Services Description Language Utility

[Microsoft (R) .NET Framework, Version 1.0.3705.0]

Copyright (C) Microsoft Corporation 1998-2001. All rights reserved.

Writing file 'C:\GOOGLY.NET\CS\GoogleSearchService.cs'.

The end result is a GoogleSearchService.cs file that looks something like this:

//--------------------------------------------------------------------------

// <autogenerated>

//     This code was generated by a tool.

//     Runtime Version: 1.0.3705.288

//

//     Changes to this file may cause incorrect behavior and will be lost if 

//     the code is regenerated.

// </autogenerated>

//--------------------------------------------------------------------------

// 

// This source code was auto-generated by wsdl, Version=1.0.3705.288.

// 

using System.Diagnostics;

using System.Xml.Serialization;

using System;

using System.Web.Services.Protocols;

using System.ComponentModel;

using System.Web.Services;

...

    public System.IAsyncResult BegindoGoogleSearch(string key, 

    string q, int start, int maxResults, bool filter, string restrict,

    bool safeSearch, string lr, string ie, string oe, 

    System.AsyncCallback callback, object asyncState) {

        return this.BeginInvoke("doGoogleSearch", new object[] {

                    key,

                    q,

                    start,

                    maxResults,

                    filter,

                    restrict,

                    safeSearch,

                    lr,

                    ie,

                    oe}, callback, asyncState);

    }

...

Now on to googly.cs itself:

C:\GOOGLY.NET\CS>csc /out:googly.exe *.cs

Microsoft (R) Visual C# .NET Compiler version 7.00.9466

for Microsoft (R) .NET Framework version 1.0.3705

Copyright (C) Microsoft Corporation 2001. All rights reserved.

9.16.3. Running the Hack

Run Googly on the command line ["How to Run the Hacks" in the Preface], passing it your Google query:

C:\GOOGLY.NET\CS>googly.exe  "query words"

The DOS command window isn't the best at displaying and allowing scrollback of lots of output. To send the results of your Google query to a file for perusal in your favorite text editor, append > results.txt.


9.16.4. The Results

Here's a sample run:

% googly.exe 

"WSDL while you work"



Axis/Radio interop, actual and potential

http://www.intertwingly.net/stories/2002/02/08/

axisradioInteropActualAndPotential.html <b>...</b> But

<b>you</b> might find more exciting services here

<b>...</b> Instead, we should <b>work</b>

together and<br> continuously strive to <b>...</b>

<b>While</b> <b>WSDL</b> is certainly far from

perfect and has many <b>...</b>  

...

Simplified <b>WSDL</b>

http://capescience.capeclear.com/articles/simplifiedWSDL/

<b>...</b> So how does it <b>work</b>?

<b>...</b> If <b>you</b> would like to edit

<b>WSDL</b> <b>while</b> still avoiding<br> all

those XML tags, check out the <b>WSDL</b> Editor in

CapeStudio. <b>...</b>

Chris Sells and Rael Dornfest

    Previous Section  < Day Day Up >  Next Section