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 />";
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
)
パラメータ
名前 | 型 | 説明 |
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クラス †
doGoogleSearchメソッドは、GoogleSearchResultオブジェクトを返します。GoogleSearchResultクラスのプロパティは、次のようなものです。
名前 | 型 | 説明 |
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クラス †
検索の結果は、GoogleSearchResult.resultElementsに格納されます。これは、ResultElementクラスの配列です。ResultElementクラスのプロパティは、次の通りです。
名前 | 型 | 説明 |
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クラス †
DirectoryCategoryクラスのプロパティは次の通りです。
名前 | 型 | 説明 |
fullViewableName | string | ODPカテゴリのODPディレクトリ名。 |
specialEncoding | string | ディレクトリ情報のエンコーディングスキームを指定する。 |