• 追加された行はこの色です。
  • 削除された行はこの色です。
*Google SOAP Search API - Web検索機能のサンプル(C#) [#e269efca]

#contents

**コード [#z9ffe333]

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

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

#code(csharp){{
<%@ 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>
}}

**解説 [#h7f02450]

***GoogleSearchService.doGoogleSearchメソッド [#z58fd984]

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

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

パラメータ

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

***GoogleSearchResultクラス [#f799cb3e]

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

|名前						|型		|説明		|h
|documentFiltering			|bool	|フィルタリング(類似した、あるいは同一Webホストの結果を隠す)されたか。|
|searchComments				|string	|「"???"は使用されませんでした。」のようなコメント。|
|estimatedTotalResultsCount	|int	|ヒットした結果のおおよその総数。|
|estimateIsExact			|bool	|estimatedTotalResultsCountが正確な値かどうか。|
|resultElements				|ResultElement[]|結果が格納された配列。|
|searchQuery				|string	|GoogleSearchServiceのq。|
|startIndex					|int	|検索結果で取得した始めの位置。1がはじめ。|
|endIndex					|int	|検索結果で取得した最後の位置。|
|searchTips					|string	|Googleの使い方のヒント。多分「もしかして:???」や「ヒント:日本語 の結果のみを検索」だと思われる。|
|directoryCategories		|DirectoryCategory[]|該当するODPディレクトリのカテゴリの配列。|
|searchTime					|double	|検索にかかった時間(秒)。|

***ResultElementクラス [#sb16a27d]

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

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

***DirectoryCategoryクラス [#vf65c88d]

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

|名前				|型		|説明		|h
|fullViewableName	|string	|ODPカテゴリのODPディレクトリ名。|
|specialEncoding	|string	|ディレクトリ情報のエンコーディングスキームを指定する。|

//これより下は編集しないでください
#pageinfo(,2006-08-25 (金) 00:51:59,DOBON!,2006-08-25 (金) 00:51:59,DOBON!)

[ トップ ]   [ 新規 | 子ページ作成 | 一覧 | 単語検索 | 最終更新 | ヘルプ ]