Google SOAP Search API - Web検索機能のサンプル(C#)

コード

Wsdl.exe(Webサービス記述言語ツール)などでWebサービスプロキシクラスを作成しているものとします(名前空間名は"Google")。

テキストボックスに入力されたキーワードをGoogleで検索し、結果を10件表示します。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<%@ Page Language="C#" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<script runat="server">
 
    protected void Button1_Click(object sender, EventArgs e)
    {
        //キーを指定。必ず変更すること。
        string key = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";
        //結果の開始インデックス
        int startIndex = 0;
        //取得する結果の最大値
        int maxResults = 10;
        //検索の対象にする言語
        string lr = "";
        if (langJapanese.Checked)
            lr = "lang_ja";
        //国などを指定
        string restricts = "";
        if (countryJapan.Checked)
            restricts = "countryJP";
        //入力、出力文字コード。現在は指定不可。
        string inputEncoding = "";
        string outputEncoding = "";
 
        //プロキシクラスのインスタンスを作成
        Google.GoogleSearchService gs = new Google.GoogleSearchService();
        Google.GoogleSearchResult res = null;
        try
        {
            //検索する
            res = gs.doGoogleSearch(
                key,
                TextBox1.Text,
                startIndex,
                maxResults,
                autoFiltering.Checked,
                restricts,
                safeSearch.Checked,
                lr,
                inputEncoding,
                outputEncoding);
        }
        catch (System.Web.Services.Protocols.SoapException ex)
        {
            Label1.Text = "エラー:" + Server.HtmlEncode(ex.Message);
            return;
        }
        if (res == null)
        {
            Label1.Text = "エラー:結果を取得できませんでした。";
            return;
        }
 
        //結果表示
        Label1.Text = "";
        Label1.Text += "<b>" + Server.HtmlEncode(res.searchQuery) +
            "</b> の検索結果 約 " +
            res.estimatedTotalResultsCount.ToString() + "件中 " +
            res.startIndex.ToString() + " - " +
            res.endIndex.ToString() + " 件目 (" +
            res.searchTime.ToString() + " 秒)<br />";
        //コメントがあるときは表示
        if (res.searchComments != null && res.searchComments.Length > 0)
            Label1.Text += "<br />" + res.searchComments + "<br />";
        //Tipsがあるときは表示
        if (res.searchTips != null && res.searchTips.Length > 0)
            Label1.Text += "<br />" + res.searchTips + "<br />";
 
        //カテゴリがあるときは表示
        if (res.directoryCategories != null &&
            res.directoryCategories.Length > 0)
        {
            Label1.Text += "<br /><b>カテゴリ:</b><br />";
            Label1.Text += "<ul>";
            foreach (Google.DirectoryCategory categories
                in res.directoryCategories)
            {
                Label1.Text += "<li>" + categories.fullViewableName;
            }
            Label1.Text += "</ul>";
            Label1.Text += "<br />";
        }
 
        //ヒットした検索結果
        if (res.resultElements != null && res.resultElements.Length > 0)
        {
            Label1.Text += "<ul>";
            foreach (Google.ResultElement element in res.resultElements)
            {
                //タイトルの表示(リンク付き)
                Label1.Text += "<li><a href=\"" + element.URL + "\">";
                if (element.title != null && element.title.Length > 0)
                    Label1.Text += element.title;
                else
                    Label1.Text += element.URL;
                Label1.Text += "</a>";
                //ヒットした箇所の周辺を表示
                if (element.snippet != null && element.snippet.Length > 0)
                    Label1.Text += "<br />" + element.snippet;
                Label1.Text += "<br /><small>" + element.URL;
                //キャッシュのサイズを表示
                Label1.Text += " - " + element.cachedSize;
                //関連ページの有無を表示
                if (element.relatedInformationPresent)
                    Label1.Text += " - 関連ページあり";
                Label1.Text += "</small>\n";
            }
            Label1.Text += "</ul>";
        }
    }
</script>
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Google SOAP Search APIのサンプル</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click"
         Text="検索開始" /><br />
        <asp:CheckBox ID="autoFiltering" runat="server"
         Text="類似の結果を隠す" /><br />
        <asp:CheckBox ID="langJapanese" runat="server"
         Text="日本語のページのみ検索する" /><br />
        <asp:CheckBox ID="countryJapan" runat="server"
         Text="日本のサイトのみ検索する" /><br />
        <asp:CheckBox ID="safeSearch" runat="server"
         Text="アダルトコンテンツを除外する" /><br />
        <br />
        <asp:Label ID="Label1" runat="server" EnableViewState="False">
        </asp:Label></div>
    </form>
</body>
</html>

解説

GoogleSearchService.doGoogleSearchメソッド

GoogleSearchService.doGoogleSearchメソッドで検索します。doGoogleSearchメソッドの構文は次の通りです。

public GoogleSearchResult doGoogleSearch(
	string key,
	string q,
	int start,
	int maxResults,
	bool filter,
	string restrict,
	bool safeSearch,
	string lr,
	string ie,
	string oe
)

パラメータ

名前説明
keystringGoogleから与えられた、Webサービスを使用するために必要なキー。
qstring検索する語句(クエリー)。
startint取得する結果の開始インデックス番号。0から始まる。
maxResultsint取得する結果の最大数。10以下とする。
filterbool類似した結果や、同じWebホストの結果を隠すかどうか。
restrictstring国(トップレベルドメイン名と、IPアドレスの地理的位置を考慮して判断される)などを指定する。日本ならば、"countryJP"。
safeSearchboolアダルトコンテンツを除外するか。
lrstring検索の対象にする言語を指定する。日本語ならば、"lang_ja"。
iestring入力文字コードを指定する。ただし、現在は無視され、必ずUTF-8となる。
oestring出力文字コードを指定する。ただし、現在は無視され、必ずUTF-8となる。

GoogleSearchResultクラス

doGoogleSearchメソッドは、GoogleSearchResultオブジェクトを返します。GoogleSearchResultクラスのプロパティは、次のようなものです。

名前説明
documentFilteringboolフィルタリング(類似した、あるいは同一Webホストの結果を隠す)されたか。
searchCommentsstring「"???"は使用されませんでした。」のようなコメント。
estimatedTotalResultsCountintヒットした結果のおおよその総数。
estimateIsExactboolestimatedTotalResultsCountが正確な値かどうか。
resultElementsResultElement[]結果が格納された配列。
searchQuerystringGoogleSearchServiceのq。
startIndexint検索結果で取得した始めの位置。1がはじめ。
endIndexint検索結果で取得した最後の位置。
searchTipsstringGoogleの使い方のヒント。多分「もしかして:???」や「ヒント:日本語 の結果のみを検索」だと思われる。
directoryCategoriesDirectoryCategory[]該当するODPディレクトリのカテゴリの配列。
searchTimedouble検索にかかった時間(秒)。

ResultElementクラス

検索の結果は、GoogleSearchResult.resultElementsに格納されます。これは、ResultElementクラスの配列です。ResultElementクラスのプロパティは、次の通りです。

名前説明
summarystring結果がODPディレクトリにある場合、ODPディレクトリの概要が格納される。
URLstring結果のURL。
snippetstring結果のページ内でヒットした部分の周囲の文。ヒットした部分は<B>タグで括られる。
titlestring結果のタイトル。ヒットした部分があれば<B>タグで括られる。
cachedSizestringキャッシュのサイズ。"100k"のような文字列となる。
relatedInformationPresentstring「関連ページ」があるかどうか。
hostNamestring同一ホストの結果がフィルタリングされた場合、2番目の結果にホスト名が格納される。
directoryCategoryDirectoryCategory結果がODPディレクトリにある場合、そのカテゴリ情報。
directoryTitlestring結果がODPディレクトリにある場合、ディレクトリでのタイトル。

DirectoryCategoryクラス

DirectoryCategoryクラスのプロパティは次の通りです。

名前説明
fullViewableNamestringODPカテゴリのODPディレクトリ名。
specialEncodingstringディレクトリ情報のエンコーディングスキームを指定する。

ページ情報
  • 作成日 : 2006-08-25 (金) 00:51:59
  • 作成者 : DOBON!
  • 最終編集日 : 2006-08-25 (金) 00:51:59
  • 最終編集者 : DOBON!
[ トップ ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]