- 追加された行はこの色です。
- 削除された行はこの色です。
*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!)
#pageinfo([[:Category/.NET]] [[:Category/ASP.NET]],2006-08-25 (金) 00:51:59,DOBON!,2006-08-25 (金) 00:51:59,DOBON!)