DoboWiki
Top
> .NETプログラミング研究/72 をテンプレートにして作成
.NETプログラミング研究/72 をテンプレートにして作成
開始行:
#title(SOAPを使ったWebサービスにアクセスする)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第72号 [#p41a66dd]
**.NET Tips [#qe425db3]
DOBON.NETのWikiサイト「DoboWiki」では新たな試みとして、現...
-[[DoboWiki>https://wiki.dobon.net/]]
-[[Webサービス紹介>https://wiki.dobon.net/index.php?%BC%A...
そこで今回は、.NET FrameworkによるプログラミングでWebサー...
**SOAPを使ったWebサービスにアクセスする [#s2389c78]
現在の一般的なWebサービスのほとんどはSOAPかRESTどちらかの...
MSDNではこれに関して、以下のページ等で解説されています。
-[[マネージ コードを使用した XML Web サービスへのアクセス...
-[[XML Web サービス クライアントの構築>http://msdn2.micro...
ここでは具体例として、Googleの提供するWebサービスである、...
-[[Google SOAP Search API>http://www.google.com/apis/]]
***準備 [#mf381755]
Google SOAP Search APIサービスは登録しないと使用できませ...
-[[Create a Google Account>https://www.google.com/account...
次にDeveloper's Kitをダウンロードし、書庫を展開しておきま...
-[[Download the Google SOAP Search API Developer's Kit>ht...
***プロキシクラスを作成する [#ta1048dc]
準備が整ったところで、本番に入ります。まずは、Webサービス...
Visual Studioをご利用の方は、Webサービスを使用するプロジ...
Visual Studioを使用できない場合は、.NET Frameworkツールの...
-[[Web サービス記述言語ツール (Wsdl.exe)>http://msdn.micr...
-[[ネイティブ Web サービス プロキシ ジェネレータ>http://m...
Wsdl.exeを使って作成されたプロキシクラスは、プロジェクト...
補足:Visual Studioも内部ではWsdl.exeを使っていますので、...
***プロキシクラスを使用してWebサービスにアクセスする [#ta...
上記のようにして作成したプロキシクラスを使用すれば、Webサ...
まずは具体例を示しましょう。以下にGoogle SOAP Search API...
#code(vbnet){{
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
'キーを指定。必ず変更すること。
Dim key As String = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
'結果の開始インデックス
Dim startIndex As Integer = 0
'取得する結果の最大値
Dim maxResults As Integer = 10
'プロキシクラスのインスタンスを作成
Dim gs As New Google.GoogleSearchService()
Dim res As Google.GoogleSearchResult = Nothing
Try
'検索する
res = gs.doGoogleSearch( _
key, _
TextBox1.Text, _
startIndex, _
maxResults, _
True, _
"", _
False, _
"", _
"", _
"")
Catch ex As System.Web.Services.Protocols.SoapExc...
Label1.Text = "エラー:" + Server.HtmlEncode(...
Return
End Try
If res Is Nothing Then
Label1.Text = "エラー:結果を取得できませんで...
Return
End If
'結果表示
Label1.Text = ""
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " + _
res.estimatedTotalResultsCount.ToString() + _
"件中 " + res.startIndex.ToString() + " - " + _
res.endIndex.ToString() + " 件目 (" + _
res.searchTime.ToString() + " 秒)<br />"
'ヒットした検索結果
If Not (res.resultElements Is Nothing) AndAlso _
res.resultElements.Length > 0 Then
Label1.Text += "<ul>"
Dim element As Google.ResultElement
For Each element In res.resultElements
Label1.Text += "<li><a href=""" + element...
element.title + "</a>"
Next element
Label1.Text += "</ul>"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Google SOAP Search APIのサンプル</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:T...
<asp:Button ID="Button1" runat="server" OnClick="...
Text="検索開始" /><br />
<br />
<asp:Label ID="Label1" runat="server" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs...
{
//キーを指定。必ず変更すること。
string key = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
//結果の開始インデックス
int startIndex = 0;
//取得する結果の最大値
int maxResults = 10;
//プロキシクラスのインスタンスを作成
Google.GoogleSearchService gs = new Google.Google...
Google.GoogleSearchResult res = null;
try
{
//検索する
res = gs.doGoogleSearch(
key,
TextBox1.Text,
startIndex,
maxResults,
true,
"",
false,
"",
"",
"");
}
catch (System.Web.Services.Protocols.SoapExceptio...
{
Label1.Text = "エラー:" + Server.HtmlEncode(...
return;
}
if (res == null)
{
Label1.Text = "エラー:結果を取得できませんで...
return;
}
//結果表示
Label1.Text = "";
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " +
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " +
res.endIndex.ToString() + " 件目 (" +
res.searchTime.ToString() + " 秒)<br />";
//ヒットした検索結果
if (res.resultElements != null && res.resultEleme...
{
Label1.Text += "<ul>";
foreach (Google.ResultElement element in res....
{
Label1.Text += "<li><a href=\"" + element...
element.title + "</a>";
}
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:T...
<asp:Button ID="Button1" runat="server" OnClick="...
Text="検索開始" /><br />
<br />
<asp:Label ID="Label1" runat="server" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
補足:上記のコードは分かりやすさを優先しているため、あま...
このように、プロキシクラスGoogleSearchServiceのインスタン...
補足:Webサービスへのアクセスに認証が必要な時は、プロキシ...
補足:上記のdoGoogleSearchメソッドは同期的に行われますが...
-[[XML Web サービスとの非同期通信>http://msdn2.microsoft....
.NET Framework 2.0ではイベントドリブンの非同期パターンを...
-[[方法 : ASP.NET 2.0 を使用してイベント ドリブン非同期 W...
***Google SOAP Search APIの使い方 [#ba9ae175]
Google SOAP Search APIの使い方をさらに詳しく説明します。G...
-[[Google SOAP Search API Reference>http://www.google.com...
注意:Google SOAP Search APIは現在ベータ版です。また、将...
Google SOAP Search APIには主に3つの機能 - ウェブ検索、キ...
***ウェブ検索機能 [#o4b357f4]
早速ですが、先ほどのサンプルを書き直し、検索オプションを...
#code(vbnet){{
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
'キーを指定。必ず変更すること。
Dim key As String = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
'結果の開始インデックス
Dim startIndex As Integer = 0
'取得する結果の最大値
Dim maxResults As Integer = 10
'検索の対象にする言語
Dim lr As String = ""
If langJapanese.Checked Then
lr = "lang_ja"
End If '国などを指定
Dim restricts As String = ""
If countryJapan.Checked Then
restricts = "countryJP"
End If '入力、出力文字コード。現在は指定不可。
Dim inputEncoding As String = ""
Dim outputEncoding As String = ""
'プロキシクラスのインスタンスを作成
Dim gs As New Google.GoogleSearchService()
Dim res As Google.GoogleSearchResult = Nothing
Try
'検索する
res = gs.doGoogleSearch( _
key, _
TextBox1.Text, _
startIndex, _
maxResults, _
autoFiltering.Checked, _
restricts, _
safeSearch.Checked, _
lr, _
inputEncoding, _
outputEncoding)
Catch ex As System.Web.Services.Protocols.SoapExc...
Label1.Text = "エラー:" + Server.HtmlEncode(...
Return
End Try
If res Is Nothing Then
Label1.Text = "エラー:結果を取得できませんで...
Return
End If
'結果表示
Label1.Text = ""
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " + _
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " + _
res.endIndex.ToString() + " 件目 (" + _
res.searchTime.ToString() + " 秒)<br />"
'コメントがあるときは表示
If Not (res.searchComments Is Nothing) AndAlso _
res.searchComments.Length > 0 Then
Label1.Text += "<br />" + res.searchComments ...
End If 'Tipsがあるときは表示
If Not (res.searchTips Is Nothing) AndAlso _
res.searchTips.Length > 0 Then
Label1.Text += "<br />" + res.searchTips + "<...
End If
'カテゴリがあるときは表示
If Not (res.directoryCategories Is Nothing) AndAl...
res.directoryCategories.Length > 0 Then
Label1.Text += "<br /><b>カテゴリ:</b><br />"
Label1.Text += "<ul>"
Dim categories As Google.DirectoryCategory
For Each categories In res.directoryCategories
Label1.Text += "<li>" + categories.fullVi...
Next categories
Label1.Text += "</ul>"
Label1.Text += "<br />"
End If
'ヒットした検索結果
If Not (res.resultElements Is Nothing) AndAlso _
res.resultElements.Length > 0 Then
Label1.Text += "<ul>"
Dim element As Google.ResultElement
For Each element In res.resultElements
'タイトルの表示(リンク付き)
Label1.Text += "<li><a href=""" + element...
If Not (element.title Is Nothing) AndAlso _
element.title.Length > 0 Then
Label1.Text += element.title
Else
Label1.Text += element.URL
End If
Label1.Text += "</a>"
'ヒットした箇所の周辺を表示
If Not (element.snippet Is Nothing) AndAl...
element.snippet.Length > 0 Then
Label1.Text += "<br />" + element.sni...
End If
Label1.Text += "<br /><small>" + element....
'キャッシュのサイズを表示
Label1.Text += " - " + element.cachedSize
'関連ページの有無を表示
If element.relatedInformationPresent Then
Label1.Text += " - 関連ページあり"
End If
Label1.Text += "</small>" + ControlChars.Lf
Next element
Label1.Text += "</ul>"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Google SOAP Search APIのサンプル</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:T...
<asp:Button ID="Button1" runat="server" OnClick="...
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" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs...
{
//キーを指定。必ず変更すること。
string key = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
//結果の開始インデックス
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.Google...
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.SoapExceptio...
{
Label1.Text = "エラー:" + Server.HtmlEncode(...
return;
}
if (res == null)
{
Label1.Text = "エラー:結果を取得できませんで...
return;
}
//結果表示
Label1.Text = "";
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " +
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " +
res.endIndex.ToString() + " 件目 (" +
res.searchTime.ToString() + " 秒)<br />";
//コメントがあるときは表示
if (res.searchComments != null && res.searchComme...
Label1.Text += "<br />" + res.searchComments ...
//Tipsがあるときは表示
if (res.searchTips != null && res.searchTips.Leng...
Label1.Text += "<br />" + res.searchTips + "<...
//カテゴリがあるときは表示
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.fullVi...
}
Label1.Text += "</ul>";
Label1.Text += "<br />";
}
//ヒットした検索結果
if (res.resultElements != null && res.resultEleme...
{
Label1.Text += "<ul>";
foreach (Google.ResultElement element in res....
{
//タイトルの表示(リンク付き)
Label1.Text += "<li><a href=\"" + element...
if (element.title != null && element.titl...
Label1.Text += element.title;
else
Label1.Text += element.URL;
Label1.Text += "</a>";
//ヒットした箇所の周辺を表示
if (element.snippet != null && element.sn...
Label1.Text += "<br />" + element.sni...
Label1.Text += "<br /><small>" + element....
//キャッシュのサイズを表示
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:T...
<asp:Button ID="Button1" runat="server" OnClick="...
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" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
まずはGoogleSearchService.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
)
}}
それぞれのパラメータの意味は次のようなものです。
:key|Googleから与えられた、Webサービスを使用するために必...
:q|検索する語句(クエリー)。
:start|取得する結果の開始インデックス番号。0から始まる。
:maxResults|取得する結果の最大数。10以下とする。
:filter|類似した結果や、同じWebホストの結果を隠すかどうか。
:restrict|国(トップレベルドメイン名と、IPアドレスの地理...
:safeSearch|アダルトコンテンツを除外するか。
:lr|検索の対象にする言語を指定する。日本語ならば、"lang_j...
:ie|入力文字コードを指定する。ただし、現在は無視され、必...
:oe|出力文字コードを指定する。ただし、現在は無視され、必...
doGoogleSearchメソッドによる検索の結果はGoogleSearchResul...
:documentFiltering|フィルタリング(類似した、あるいは同一...
:searchComments|「"???"は使用されませんでした。」のような...
:estimatedTotalResultsCount|ヒットした結果のおおよその総...
:estimateIsExact|estimatedTotalResultsCountが正確な値かど...
:resultElements|結果が格納された配列。
:searchQuery|GoogleSearchServiceのq。
:startIndex|検索結果で取得した始めの位置。1がはじめ。
:endIndex|検索結果で取得した最後の位置。
searchTips : Googleの使い方のヒント。多分「もしかして:???...
:directoryCategories|該当するODPディレクトリのカテゴリの...
:searchTime|検索にかかった時間(秒)。
ヒットしたページの情報が格納されるresultElementsプロパテ...
:summary|結果がODPディレクトリにある場合、ODPディレクトリ...
:URL|結果のURL。
:snippet|結果のページ内でヒットした部分の周囲の文。ヒット...
:title|結果のタイトル。ヒットした部分があれば<B>タグで括...
:cachedSize|キャッシュのサイズ。"100k"のような文字列とな...
:relatedInformationPresent|「関連ページ」があるかどうか。
:hostName|同一ホストの結果がフィルタリングされた場合、2番...
:directoryCategory|結果がODPディレクトリにある場合、その...
:directoryTitle|結果がODPディレクトリにある場合、ディレク...
GoogleSearchResult.directoryCategoriesプロパティやResultE...
:fullViewableName|ODPカテゴリのODPディレクトリ名。
:specialEncoding|ディレクトリ情報のエンコーディングスキー...
***その他の機能 [#z90a0595]
Google SOAP Search APIのキャッシュの取得、スペルチェック...
これらのサンプルについては、ここに載せるには長すぎますの...
-[[Google SOAP Search API>https://wiki.dobon.net/index.ph...
**コメント [#sc432d8e]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-08-25 (金) 06:00:00,DOB...
終了行:
#title(SOAPを使ったWebサービスにアクセスする)
#navi(.NETプログラミング研究)
#contents
*.NETプログラミング研究 第72号 [#p41a66dd]
**.NET Tips [#qe425db3]
DOBON.NETのWikiサイト「DoboWiki」では新たな試みとして、現...
-[[DoboWiki>https://wiki.dobon.net/]]
-[[Webサービス紹介>https://wiki.dobon.net/index.php?%BC%A...
そこで今回は、.NET FrameworkによるプログラミングでWebサー...
**SOAPを使ったWebサービスにアクセスする [#s2389c78]
現在の一般的なWebサービスのほとんどはSOAPかRESTどちらかの...
MSDNではこれに関して、以下のページ等で解説されています。
-[[マネージ コードを使用した XML Web サービスへのアクセス...
-[[XML Web サービス クライアントの構築>http://msdn2.micro...
ここでは具体例として、Googleの提供するWebサービスである、...
-[[Google SOAP Search API>http://www.google.com/apis/]]
***準備 [#mf381755]
Google SOAP Search APIサービスは登録しないと使用できませ...
-[[Create a Google Account>https://www.google.com/account...
次にDeveloper's Kitをダウンロードし、書庫を展開しておきま...
-[[Download the Google SOAP Search API Developer's Kit>ht...
***プロキシクラスを作成する [#ta1048dc]
準備が整ったところで、本番に入ります。まずは、Webサービス...
Visual Studioをご利用の方は、Webサービスを使用するプロジ...
Visual Studioを使用できない場合は、.NET Frameworkツールの...
-[[Web サービス記述言語ツール (Wsdl.exe)>http://msdn.micr...
-[[ネイティブ Web サービス プロキシ ジェネレータ>http://m...
Wsdl.exeを使って作成されたプロキシクラスは、プロジェクト...
補足:Visual Studioも内部ではWsdl.exeを使っていますので、...
***プロキシクラスを使用してWebサービスにアクセスする [#ta...
上記のようにして作成したプロキシクラスを使用すれば、Webサ...
まずは具体例を示しましょう。以下にGoogle SOAP Search API...
#code(vbnet){{
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
'キーを指定。必ず変更すること。
Dim key As String = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
'結果の開始インデックス
Dim startIndex As Integer = 0
'取得する結果の最大値
Dim maxResults As Integer = 10
'プロキシクラスのインスタンスを作成
Dim gs As New Google.GoogleSearchService()
Dim res As Google.GoogleSearchResult = Nothing
Try
'検索する
res = gs.doGoogleSearch( _
key, _
TextBox1.Text, _
startIndex, _
maxResults, _
True, _
"", _
False, _
"", _
"", _
"")
Catch ex As System.Web.Services.Protocols.SoapExc...
Label1.Text = "エラー:" + Server.HtmlEncode(...
Return
End Try
If res Is Nothing Then
Label1.Text = "エラー:結果を取得できませんで...
Return
End If
'結果表示
Label1.Text = ""
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " + _
res.estimatedTotalResultsCount.ToString() + _
"件中 " + res.startIndex.ToString() + " - " + _
res.endIndex.ToString() + " 件目 (" + _
res.searchTime.ToString() + " 秒)<br />"
'ヒットした検索結果
If Not (res.resultElements Is Nothing) AndAlso _
res.resultElements.Length > 0 Then
Label1.Text += "<ul>"
Dim element As Google.ResultElement
For Each element In res.resultElements
Label1.Text += "<li><a href=""" + element...
element.title + "</a>"
Next element
Label1.Text += "</ul>"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Google SOAP Search APIのサンプル</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:T...
<asp:Button ID="Button1" runat="server" OnClick="...
Text="検索開始" /><br />
<br />
<asp:Label ID="Label1" runat="server" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs...
{
//キーを指定。必ず変更すること。
string key = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
//結果の開始インデックス
int startIndex = 0;
//取得する結果の最大値
int maxResults = 10;
//プロキシクラスのインスタンスを作成
Google.GoogleSearchService gs = new Google.Google...
Google.GoogleSearchResult res = null;
try
{
//検索する
res = gs.doGoogleSearch(
key,
TextBox1.Text,
startIndex,
maxResults,
true,
"",
false,
"",
"",
"");
}
catch (System.Web.Services.Protocols.SoapExceptio...
{
Label1.Text = "エラー:" + Server.HtmlEncode(...
return;
}
if (res == null)
{
Label1.Text = "エラー:結果を取得できませんで...
return;
}
//結果表示
Label1.Text = "";
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " +
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " +
res.endIndex.ToString() + " 件目 (" +
res.searchTime.ToString() + " 秒)<br />";
//ヒットした検索結果
if (res.resultElements != null && res.resultEleme...
{
Label1.Text += "<ul>";
foreach (Google.ResultElement element in res....
{
Label1.Text += "<li><a href=\"" + element...
element.title + "</a>";
}
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:T...
<asp:Button ID="Button1" runat="server" OnClick="...
Text="検索開始" /><br />
<br />
<asp:Label ID="Label1" runat="server" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
補足:上記のコードは分かりやすさを優先しているため、あま...
このように、プロキシクラスGoogleSearchServiceのインスタン...
補足:Webサービスへのアクセスに認証が必要な時は、プロキシ...
補足:上記のdoGoogleSearchメソッドは同期的に行われますが...
-[[XML Web サービスとの非同期通信>http://msdn2.microsoft....
.NET Framework 2.0ではイベントドリブンの非同期パターンを...
-[[方法 : ASP.NET 2.0 を使用してイベント ドリブン非同期 W...
***Google SOAP Search APIの使い方 [#ba9ae175]
Google SOAP Search APIの使い方をさらに詳しく説明します。G...
-[[Google SOAP Search API Reference>http://www.google.com...
注意:Google SOAP Search APIは現在ベータ版です。また、将...
Google SOAP Search APIには主に3つの機能 - ウェブ検索、キ...
***ウェブ検索機能 [#o4b357f4]
早速ですが、先ほどのサンプルを書き直し、検索オプションを...
#code(vbnet){{
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
'キーを指定。必ず変更すること。
Dim key As String = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
'結果の開始インデックス
Dim startIndex As Integer = 0
'取得する結果の最大値
Dim maxResults As Integer = 10
'検索の対象にする言語
Dim lr As String = ""
If langJapanese.Checked Then
lr = "lang_ja"
End If '国などを指定
Dim restricts As String = ""
If countryJapan.Checked Then
restricts = "countryJP"
End If '入力、出力文字コード。現在は指定不可。
Dim inputEncoding As String = ""
Dim outputEncoding As String = ""
'プロキシクラスのインスタンスを作成
Dim gs As New Google.GoogleSearchService()
Dim res As Google.GoogleSearchResult = Nothing
Try
'検索する
res = gs.doGoogleSearch( _
key, _
TextBox1.Text, _
startIndex, _
maxResults, _
autoFiltering.Checked, _
restricts, _
safeSearch.Checked, _
lr, _
inputEncoding, _
outputEncoding)
Catch ex As System.Web.Services.Protocols.SoapExc...
Label1.Text = "エラー:" + Server.HtmlEncode(...
Return
End Try
If res Is Nothing Then
Label1.Text = "エラー:結果を取得できませんで...
Return
End If
'結果表示
Label1.Text = ""
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " + _
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " + _
res.endIndex.ToString() + " 件目 (" + _
res.searchTime.ToString() + " 秒)<br />"
'コメントがあるときは表示
If Not (res.searchComments Is Nothing) AndAlso _
res.searchComments.Length > 0 Then
Label1.Text += "<br />" + res.searchComments ...
End If 'Tipsがあるときは表示
If Not (res.searchTips Is Nothing) AndAlso _
res.searchTips.Length > 0 Then
Label1.Text += "<br />" + res.searchTips + "<...
End If
'カテゴリがあるときは表示
If Not (res.directoryCategories Is Nothing) AndAl...
res.directoryCategories.Length > 0 Then
Label1.Text += "<br /><b>カテゴリ:</b><br />"
Label1.Text += "<ul>"
Dim categories As Google.DirectoryCategory
For Each categories In res.directoryCategories
Label1.Text += "<li>" + categories.fullVi...
Next categories
Label1.Text += "</ul>"
Label1.Text += "<br />"
End If
'ヒットした検索結果
If Not (res.resultElements Is Nothing) AndAlso _
res.resultElements.Length > 0 Then
Label1.Text += "<ul>"
Dim element As Google.ResultElement
For Each element In res.resultElements
'タイトルの表示(リンク付き)
Label1.Text += "<li><a href=""" + element...
If Not (element.title Is Nothing) AndAlso _
element.title.Length > 0 Then
Label1.Text += element.title
Else
Label1.Text += element.URL
End If
Label1.Text += "</a>"
'ヒットした箇所の周辺を表示
If Not (element.snippet Is Nothing) AndAl...
element.snippet.Length > 0 Then
Label1.Text += "<br />" + element.sni...
End If
Label1.Text += "<br /><small>" + element....
'キャッシュのサイズを表示
Label1.Text += " - " + element.cachedSize
'関連ページの有無を表示
If element.relatedInformationPresent Then
Label1.Text += " - 関連ページあり"
End If
Label1.Text += "</small>" + ControlChars.Lf
Next element
Label1.Text += "</ul>"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Google SOAP Search APIのサンプル</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:T...
<asp:Button ID="Button1" runat="server" OnClick="...
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" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
#code(csharp){{
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional...
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Button1_Click(object sender, EventArgs...
{
//キーを指定。必ず変更すること。
string key = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
//結果の開始インデックス
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.Google...
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.SoapExceptio...
{
Label1.Text = "エラー:" + Server.HtmlEncode(...
return;
}
if (res == null)
{
Label1.Text = "エラー:結果を取得できませんで...
return;
}
//結果表示
Label1.Text = "";
Label1.Text += "<b>" + Server.HtmlEncode(res.sear...
"</b> の検索結果 約 " +
res.estimatedTotalResultsCount.ToString() + "...
res.startIndex.ToString() + " - " +
res.endIndex.ToString() + " 件目 (" +
res.searchTime.ToString() + " 秒)<br />";
//コメントがあるときは表示
if (res.searchComments != null && res.searchComme...
Label1.Text += "<br />" + res.searchComments ...
//Tipsがあるときは表示
if (res.searchTips != null && res.searchTips.Leng...
Label1.Text += "<br />" + res.searchTips + "<...
//カテゴリがあるときは表示
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.fullVi...
}
Label1.Text += "</ul>";
Label1.Text += "<br />";
}
//ヒットした検索結果
if (res.resultElements != null && res.resultEleme...
{
Label1.Text += "<ul>";
foreach (Google.ResultElement element in res....
{
//タイトルの表示(リンク付き)
Label1.Text += "<li><a href=\"" + element...
if (element.title != null && element.titl...
Label1.Text += element.title;
else
Label1.Text += element.URL;
Label1.Text += "</a>";
//ヒットした箇所の周辺を表示
if (element.snippet != null && element.sn...
Label1.Text += "<br />" + element.sni...
Label1.Text += "<br /><small>" + element....
//キャッシュのサイズを表示
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:T...
<asp:Button ID="Button1" runat="server" OnClick="...
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" EnableViewS...
</asp:Label></div>
</form>
</body>
</html>
}}
まずはGoogleSearchService.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
)
}}
それぞれのパラメータの意味は次のようなものです。
:key|Googleから与えられた、Webサービスを使用するために必...
:q|検索する語句(クエリー)。
:start|取得する結果の開始インデックス番号。0から始まる。
:maxResults|取得する結果の最大数。10以下とする。
:filter|類似した結果や、同じWebホストの結果を隠すかどうか。
:restrict|国(トップレベルドメイン名と、IPアドレスの地理...
:safeSearch|アダルトコンテンツを除外するか。
:lr|検索の対象にする言語を指定する。日本語ならば、"lang_j...
:ie|入力文字コードを指定する。ただし、現在は無視され、必...
:oe|出力文字コードを指定する。ただし、現在は無視され、必...
doGoogleSearchメソッドによる検索の結果はGoogleSearchResul...
:documentFiltering|フィルタリング(類似した、あるいは同一...
:searchComments|「"???"は使用されませんでした。」のような...
:estimatedTotalResultsCount|ヒットした結果のおおよその総...
:estimateIsExact|estimatedTotalResultsCountが正確な値かど...
:resultElements|結果が格納された配列。
:searchQuery|GoogleSearchServiceのq。
:startIndex|検索結果で取得した始めの位置。1がはじめ。
:endIndex|検索結果で取得した最後の位置。
searchTips : Googleの使い方のヒント。多分「もしかして:???...
:directoryCategories|該当するODPディレクトリのカテゴリの...
:searchTime|検索にかかった時間(秒)。
ヒットしたページの情報が格納されるresultElementsプロパテ...
:summary|結果がODPディレクトリにある場合、ODPディレクトリ...
:URL|結果のURL。
:snippet|結果のページ内でヒットした部分の周囲の文。ヒット...
:title|結果のタイトル。ヒットした部分があれば<B>タグで括...
:cachedSize|キャッシュのサイズ。"100k"のような文字列とな...
:relatedInformationPresent|「関連ページ」があるかどうか。
:hostName|同一ホストの結果がフィルタリングされた場合、2番...
:directoryCategory|結果がODPディレクトリにある場合、その...
:directoryTitle|結果がODPディレクトリにある場合、ディレク...
GoogleSearchResult.directoryCategoriesプロパティやResultE...
:fullViewableName|ODPカテゴリのODPディレクトリ名。
:specialEncoding|ディレクトリ情報のエンコーディングスキー...
***その他の機能 [#z90a0595]
Google SOAP Search APIのキャッシュの取得、スペルチェック...
これらのサンプルについては、ここに載せるには長すぎますの...
-[[Google SOAP Search API>https://wiki.dobon.net/index.ph...
**コメント [#sc432d8e]
#comment
//これより下は編集しないでください
#pageinfo([[:Category/.NET]],2006-08-25 (金) 06:00:00,DOB...
ページ名:
▲
▼
[
トップ
] [
新規
|
子ページ作成
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]