┏第72号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ──<メニュー>─────────────────────── ■.NET Tips ・SOAPを使ったWebサービスにアクセスする ・Google SOAP Search APIの使い方 ─────────────────────────────── ─────────────────────────────── ■.NET Tips ─────────────────────────────── DOBON.NETのWikiサイト「DoboWiki」では新たな試みとして、現在公 開されている有用なWebサービス(XML Webサービス)に関する情報の 収集と紹介を始めました。 [URL]DoboWiki http://wiki.dobon.net/ [URL]Webサービス紹介 http://wiki.dobon.net/index.php?%BC%AB%CD%B3%B6%E8%2FWeb%A5%B5%A1%BC%A5%D3%A5%B9%BE%D2%B2%F0 そこで今回は、.NET FrameworkによるプログラミングでWebサービス にアクセスする方法を具体例を挙げて紹介します。 ─────────────────────────────── ●SOAPを使ったWebサービスにアクセスする 現在の一般的なWebサービスのほとんどはSOAPかRESTどちらかのイン ターフェイスを採用しています。今回は.NET Frameworkでの扱いが比 較的簡単なSOAPを使ったWebサービスにアクセスする方法を紹介しま す。 MSDNではこれに関して、以下のページ等で解説されています。 [URL]マネージ コードを使用した XML Web サービスへのアクセス http://msdn2.microsoft.com/ja-jp/library/7sxekx3f.aspx [URL]XML Web サービス クライアントの構築 http://msdn2.microsoft.com/ja-jp/library/w3h45ebk.aspx ここでは具体例として、Googleの提供するWebサービスである、 Google SOAP Search APIを使用してみましょう。 [URL]Google SOAP Search API http://www.google.com/apis/ ★準備 Google SOAP Search APIサービスは登録しないと使用できません。ま ずは以下のページでアカウントを作成し、サービスの利用に必要なキー を取得します。 「URL]Create a Google Account https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey 次にDeveloper's Kitをダウンロードし、書庫を展開しておきます。 WSDLファイルや、C#やVB.NETのサンプルが含まれています。 [URL]Download the Google SOAP Search API Developer's Kit http://www.google.com/apis/download.html ★プロキシクラスを作成する 準備が整ったところで、本番に入ります。まずは、Webサービスに簡 単にアクセスできるようにするためのプロキシクラスを作成します。 Visual Studioをご利用の方は、Webサービスを使用するプロジェクト をソリューションエクスプローラで右クリックし、コンテキストメニ ューから「Web参照の追加」を選択します。すると「Web参照の追加」 ダイアログが表示されますので、この「URL」に先ほどダウンロード した「Google SOAP Search API Developer's Kit」内にあるWSDLファ イル(ファイル名は「GoogleSearch.wsdl」)のフルパスを入力し、 「移動」ボタンをクリックします。しばらくしてから、「このURLで 見つかったWebサービス」に「1個のサービスが見つかりました - GoogleSearch」と表示されるはずです。「Web参照名」に名前空間 となる文字列を入力し(名前空間が不要であれば空白でも構いません)、 「参照の追加」ボタンをクリックします。ここでは「Web参照名」を 「Google」としておきましょう。このようにして作成されたプロキシ クラスは、「Google.GoogleSearch」となります。 Visual Studioを使用できない場合は、.NET FrameworkツールのWsdl. exeを使用してプロキシクラスを作成できます(C++の場合は、SPROXY. EXEを使用します)。 [URL]Web サービス記述言語ツール (Wsdl.exe) http://msdn.microsoft.com/library/ja/cptools/html/cpgrfwebservicesdescriptionlanguagetoolwsdlexe.asp [URL]ネイティブ Web サービス プロキシ ジェネレータ http://msdn.microsoft.com/library/ja/vccore/html/vcconSProxyexe.asp Wsdl.exeを使って作成されたプロキシクラスは、プロジェクトに追加 して使用します。 補足:Visual Studioも内部ではWsdl.exeを使っていますので、Wsdl. exeがパラメータを指定できるという点を除けば同じといえます。 ★プロキシクラスを使用してWebサービスにアクセスする 上記のようにして作成したプロキシクラスを使用すれば、Webサービ スへのアクセスは驚くほど簡単です。プロキシクラスのインスタンス を作成して、適当なメソッドを呼び出すだけで済みます。 まずは具体例を示しましょう。以下にGoogle SOAP Search APIを使用 して文字列をウェブ検索するWebアプリケーションのサンプルを紹介 します。テキストボックスに入力した文字列を検索し、結果を最大10 件表示しています。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="VB" %> Google SOAP Search APIのサンプル


‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="C#" %> Google SOAP Search APIのサンプル


‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 補足:上記のコードは分かりやすさを優先しているため、あまり良い とはいえない書き方があるかもしれません。例えば、文字列の連結は 上記のようにするよりもStringBulderクラスを使った方が効率的でし ょう。 このように、プロキシクラスGoogleSearchServiceのインスタンスを 作成し、doGoogleSearchメソッドを呼び出しているだけです(パラメー タがやたらと多いですが)。サーバーから返される結果も、自分で解 析する必要がなく、GoogleSearchResultオブジェクトとして取得でき ます。 補足:Webサービスへのアクセスに認証が必要な時は、プロキシクラ スのCredentialsプロパティを設定します。 補足:上記のdoGoogleSearchメソッドは同期的に行われますが、 BegindoGoogleSearchとEnddoGoogleSearchなどを使って非同期的に行 うこともできます。非同期アクセスについては、MSDNの次のページが 参考になります。 [URL]XML Web サービスとの非同期通信 http://msdn2.microsoft.com/ja-jp/library/tz4bkcx2.aspx .NET Framework 2.0ではイベントドリブンの非同期パターンを使用す ることもできます。これについては、次に示すページが参考になりま す。 [URL]方法 : ASP.NET 2.0 を使用してイベント ドリブン非同期 Web サービス クライアントを実装する http://msdn2.microsoft.com/ja-jp/library/ms230194.aspx ─────────────────────────────── ●Google SOAP Search APIの使い方 Google SOAP Search APIの使い方をさらに詳しく説明します。Google SOAP Search APIのリファレンスは、「Google SOAP Search API Reference」にあります。これは先ほどダウンロードしたDeveloper's Kitにも含まれています。 [URL]Google SOAP Search API Reference http://www.google.com/apis/reference.html 注意:Google SOAP Search APIは現在ベータ版です。また、将来仕様 が変更される可能性があります。 Google SOAP Search APIには主に3つの機能 - ウェブ検索、キャッシ ュの取得、スペルチェック - が用意されています。まずはウェブ検 索機能について説明します。 ★ウェブ検索機能 早速ですが、先ほどのサンプルを書き直し、検索オプションを追加し てみます。具体的には、「類似の結果を隠す」「日本語のページのみ 検索する」「日本のサイトのみ検索する」「アダルトコンテンツを除 外する」という項目を追加します。さらに、結果もより詳しく表示し ます。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="VB" %> Google SOAP Search APIのサンプル






‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="C#" %> Google SOAP Search APIのサンプル






‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ まずは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 : Googleから与えられた、Webサービスを使用するために必要な キー。 q : 検索する語句(クエリー)。 start : 取得する結果の開始インデックス番号。0から始まる。 maxResults : 取得する結果の最大数。10以下とする。 filter : 類似した結果や、同じWebホストの結果を隠すかどうか。 restrict : 国(トップレベルドメイン名と、IPアドレスの地理的位 置を考慮して判断される)などを指定する。日本ならば、"countryJP"。 safeSearch : アダルトコンテンツを除外するか。 lr : 検索の対象にする言語を指定する。日本語ならば、"lang_ja"。 ie : 入力文字コードを指定する。ただし、現在は無視され、必ず UTF-8となる。 oe : 出力文字コードを指定する。ただし、現在は無視され、必ず UTF-8となる。 doGoogleSearchメソッドによる検索の結果はGoogleSearchResultオブ ジェクトとして取得されます。GoogleSearchResultクラスのプロパテ ィは次のようなものです。 documentFiltering : フィルタリング(類似した、あるいは同一Web ホストの結果を隠す)されたか。 searchComments : 「"???"は使用されませんでした。」のようなコメ ントだと思われる。 estimatedTotalResultsCount : ヒットした結果のおおよその総数。 estimateIsExact : estimatedTotalResultsCountが正確な値かどうか。 resultElements : 結果が格納された配列。 searchQuery : GoogleSearchServiceのq。 startIndex : 検索結果で取得した始めの位置。1がはじめ。 endIndex : 検索結果で取得した最後の位置。 searchTips : Googleの使い方のヒント。多分「もしかして:???」や 「ヒント:日本語 の結果のみを検索」だと思われる。 directoryCategories : 該当するODPディレクトリのカテゴリの配列。 searchTime : 検索にかかった時間(秒)。 ヒットしたページの情報が格納されるresultElementsプロパティは ResultElementクラスの配列となります。ResultElementクラスのプロ パティは次の通りです。 summary : 結果がODPディレクトリにある場合、ODPディレクトリの概 要が格納される。 URL : 結果のURL。 snippet : 結果のページ内でヒットした部分の周囲の文。ヒットした 部分はタグで括られる。 title : 結果のタイトル。ヒットした部分があればタグで括られ る。 cachedSize : キャッシュのサイズ。"100k"のような文字列となる。 relatedInformationPresent : 「関連ページ」があるかどうか。 hostName : 同一ホストの結果がフィルタリングされた場合、2番目の 結果にホスト名が格納される。 directoryCategory : 結果がODPディレクトリにある場合、そのカテ ゴリ情報。 directoryTitle : 結果がODPディレクトリにある場合、ディレクトリ でのタイトル。 GoogleSearchResult.directoryCategoriesプロパティや ResultElement.directoryCategoryプロパティではDirectoryCategory クラスが使われます。DirectoryCategoryクラスのプロパティは次の 通りです。 fullViewableName : ODPカテゴリのODPディレクトリ名。 specialEncoding : ディレクトリ情報のエンコーディングスキームを 指定する。 ★その他の機能 Google SOAP Search APIのキャッシュの取得、スペルチェック機能の 使い方はさらに簡単です。それぞれプロキシクラスの doGetCachedPage、doSpellingSuggestionメソッドを呼び出せばよい のです。 これらのサンプルについては、ここに載せるには長すぎますので、 DoboWikiにて公開しています。 [URL]Google SOAP Search API http://wiki.dobon.net/index.php?%BC%AB%CD%B3%B6%E8%2FWeb%A5%B5%A1%BC%A5%D3%A5%B9%BE%D2%B2%F0%2FGoogle%20SOAP%20Search%20API =============================== ■ここで示したコードの多くはまずC#で書き、それを「C# to VB.NET Translator」でVB.NETのコードに変換し、修正を加えたものです。 [URL]C# to VB.NET Translator http://authors.aspalliance.com/aldotnet/examples/translate.aspx ■このマガジンの購読、購読中止、バックナンバー、説明に関しては  次のページをご覧ください。  http://www.mag2.com/m/0000104516.htm ■発行人・編集人:どぼん!  (Microsoft MVP for Visual Basic, Oct 2005-Oct 2006)  http://dobon.net  dobon_info@yahoo.co.jp ■ご質問等はメールではなく、掲示板へお願いいたします。  http://dobon.net/vb/bbs.html ■上記メールアドレスへのメールは確実に読まれる保障はありません  (スパム、ウィルス対策です)。メールは下記URLのフォームメール  から送信してください。  http://dobon.net/mail.html Copyright (c) 2003 - 2006 DOBON! All rights reserved. ===============================