┏第73号━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃         .NETプログラミング研究         ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ──<メニュー>─────────────────────── ■.NET Tips ・RESTを使ったWebサービスにアクセスする ・Yahoo!ウェブ検索Webサービスの使い方 ─────────────────────────────── ─────────────────────────────── ■.NET Tips ─────────────────────────────── ●RESTを使ったWebサービスにアクセスする 前回はSOAPを使ったWebサービスにアクセスする方法を紹介しました が、今回はRESTによるWebサービスにアクセスする方法について説明 します。 現在一般に公開されているWebサービスを調べてみると、RESTを採用 いるWebサービスが多いようです。AmazonのようにSOAPとRESTの両方 のインターフェイスを提供しているWebサービスでも、アクセスのほ とんどがRESTであるといいます(注)。このように現状ではWebサー ビスのインターフェイスとしてRESTはSOAPよりも広く利用されている と言えそうですが、.NET FrameworkはSOAP重視のようで、MSDNでも RESTについてはほとんど(というより私の知る限りでは全く)触れら れていません。 注:「REST vs. SOAP at Amazon」によると、85%がRESTの使用という ことです。 [URL]REST vs. SOAP at Amazon http://www.oreillynet.com/pub/wlg/3005?wlg=yes しかし、.NET FrameworkではSOAPほど簡単な方法が用意されていない とはいうものの、RESTのWebサービスへのアクセスも難しいわけでは ありません。ここでは、Yahoo! JAPANのウェブ検索Webサービスを例 に、その方法を具体的に解説します。 [URL]Yahoo!デベロッパーネットワーク - ウェブ検索 http://developer.yahoo.co.jp/search/web/V1/webSearch.html RESTを使ったWebサービスにアクセスする流れを簡単にまとめると、 次のようになります。 1.Webサービスサーバーに送信するデータを作成する。 2.データを指定されたURIにHTTPの適当なメソッド(GET、POST、 DELETE、PUT)により送信する。 3.Webサービスサーバーから返されるXMLデータを受信する。 4.受信したデータを解析する。 リクエストを送信し、レスポンスを受信する2、3の部分は、.NET FrameworkのHttpWebRequestとHttpWebResponseクラスを使用すればよ いでしょう。DOBON.NETでは、次のページでこれらの使い方を説明し ています。 [URL]WebRequest、WebResponseクラスを使ってファイルをダウンロー ドし表示する http://dobon.net/vb/dotnet/internet/webrequest.html 4の受信したXMLデータを解析する方法は、幾つか考えられます。しか し通常は、XmlDocumentクラスを使って解析するか、XMLスキーマ定義 ツールXsd.exeにより作成されたクラスを使うかになるでしょう。こ こではXsd.exeを利用する方法を紹介します(XmlDocumentクラスを使 った方法も後述します)。 ★Yahoo!ウェブ検索Webサービスにアクセスする それではYahoo!ウェブ検索Webサービスにアクセスする方法を見てい きましょう。Yahoo!のWebサービスを使用するには「アプリケーショ ンID」というものが必要ですので、もしなければ、これを登録してお きます。下記のページから登録できます。 [URL]Yahoo!デベロッパーネットワーク - アプリケーションIDの登録 http://api.search.yahoo.co.jp/webservices/register_application ☆Xsd.exe まずはXsd.exeを使ってXMLデータを解析するのに役立つクラスを作成 しておきます。Xsd.exeのパスは、Visual Studio 2005を「C: \Program Files\Microsoft Visual Studio 8」にインストールしてい るならば、 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\Xsd.exe のようになるでしょう。 [URL]XML スキーマ定義ツール (Xsd.exe) http://msdn2.microsoft.com/ja-jp/library/x6c1kb0s.aspx Xsd.exeを使用するために、まずYahoo!ウェブ検索WebサービスのXML スキーマをダウンロードしておきます。ファイル名は "WebSearchResponse.xsd"としておきます(拡張子は必ず「xsd」にし てください)。 [URL]Yahoo!ウェブ検索Webサービス XMLスキーマ http://api.search.yahoo.co.jp/WebSearchService/V1/WebSearchResponse.xsd そして次のようなコマンドを実行し、クラスを作成します。 xsd.exe /c /l:CS /n:Yahoo.jp.WebSearchResponse WebSearchResponse.xsd 「/c」は指定したスキーマと対応するクラスを作成することを意味し ます。「/c」の代わりに「/d」を使用してクラスを作成することもで きますが、その場合はDataSetから派生したクラスが作成されます(「 /d」を用いて作成したクラスの使用法は後述します)。 また「/l:CS」というのは、C#のコードを生成するという意味です。 VB.NETであれば「/l:VB」、JScriptであれば「/l:JS」、Visual J#で あれば「/l:VJS」とします。何も指定しないと、C#になります。 さらに作成されるクラスの名前空間を「Yahoo.jp.WebSearchResponse」 とするために、「/n:Yahoo.jp.WebSearchResponse」を指定していま す。「/n」を指定しないと、名前空間なしとなります。 上記のコマンドを実行することにより、WebSearchResponse.xsdのあ るフォルダにWebSearchResponse.cs(「/l:VB」としているならば WebSearchResponse.vb)というクラスファイルが作成されます(違う フォルダに作成したいのであれば、「/o」オプションを指定しましょ う)。このファイルをWebサービスを使用するプロジェクトに追加す れば、使用できるようになります。 ☆クライアントアプリケーションの作成 これで準備は整いましたので、Webサービスを使うクライアントを作 成しましょう。ここではWebアプリケーションを作成します。 さっそくですが、具体的なコードを紹介します。ここではフォームに テキストボックス(TextBox1)とボタン(Button1)を配置し、テキ ストボックスに入力された文字列をクエリーとして検索し、結果を Label1に表示しています。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="VB" %> Yahoo!ウェブ検索Webサービスのサンプル


Webサービス by Yahoo! JAPAN ‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ <%@ Page Language="C#" %> Yahoo!ウェブ検索Webサービスのサンプル


Webサービス by Yahoo! JAPAN ‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ Yahoo!ウェブ検索Webサービスではリクエストの送信にHTTP GETを使 用しますので、まずはWebサービスサーバーにデータを送信するため のURLを構築します。 次にHttpWebRequestとHttpWebResponseクラスを使用してサーバーに アクセスし、結果として返されるXMLデータを取得します。 サーバーから返されたXMLデータは、XmlSerializer.Deserializeメソ ッドにより、xsd.exeで作成されたResultSetクラスに逆シリアル化さ れます。こうして作成されたResultSetオブジェクトを参照すれば、 結果を簡単に取得できるようになります。 参考: [URL][HOW TO] XML のシリアル化を使用してオブジェクトの読み込み と書き込みを行う方法 http://support.microsoft.com/default.aspx?scid=kb;ja;301223 ☆xsd.exeでDataSetから派生したクラスを作成した場合 xsd.exeでクラスを作成するときに「/c」ではなく「/d」として DataSetから派生したクラスを作成した場合は、DataSet.ReadXmlメソ ッドを使ってXMLデータを読み込みます。 以下に例を示します。これは先に示したサンプルと全く同じことをす るものです。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ '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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 'で公開します。 ‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ //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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 //で公開します。 ‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ☆XmlDocumentクラスでXMLデータを解析する xsd.exeで作成したクラスを使わずに、Webサービスが返したXMLデー タを解析するには、XmlDocumentクラスを使うのが適当でしょう。上 記のサンプルと同じことをxsd.exeで作成したクラスを使わずに、 XmlDocumentクラスにより解析する例を以下に示します。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ '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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 'で公開します。 ‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ //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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 //で公開します。 ‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ─────────────────────────────── ●Yahoo!ウェブ検索Webサービスの使い方 Yahoo!ウェブ検索Webサービスの使い方をもう少し詳しく説明しまし ょう。リクエストパラメータとレスポンスフィールドに関する説明は Yahoo!デベロッパーネットワークにありますので、ここでは具体的な コードを示します。 [URL]Yahoo!デベロッパーネットワーク - ウェブ検索 http://developer.yahoo.co.jp/search/web/V1/webSearch.html 以下に示すWebアプリケーションでは、検索に使うクエリー文字のほ かに、指定検索の種類(クエリー文字をすべて含むか、いずれかを含 むか、文章として含むか)、表示件数、ファイル形式(HTML、PDFな ど)、アダルトコンテンツの表示、類似の結果の表示、日本語のペー ジのみの表示、日本にあるウェブサイトのみの表示、検索するドメイ ンといったオプションを指定して検索できます。また、結果も詳しく (要約、キャッシュ情報、更新日、MIMEタイプなど)表示しています。 ‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ '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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 'で公開します。 ‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ ‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ //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%2FYahoo%21%B8%A1%BA%F7Web%A5%B5%A1%BC%A5%D3%A5%B9 //で公開します。 ‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 最後にYahoo!ウェブ検索Webサービスを使用する際の注意点を幾つか 挙げます。 Yahoo!デベロッパーネットワークにはlanguageリクエストパラメータ のデフォルトは「ja」と書いてありますが、実際にはデフォルトは「す べての言語」であるようです。上のサンプルで「日本語のページのみ」 を選択するとlanguageリクエストパラメータをjaとしますが、何も指 定しない時と比べて明らかに結果が異なります。 また、Yahoo!のWebサービスを利用するすべてのサイトやアプリケー ションにはクレジットを表示する必要があることにも注意してくださ い(上のサンプルでは表示しています)。詳しくは、Yahoo!デベロッ パーネットワークをご覧ください。 Webサービスで検索した結果と、実際にYahoo! JAPANで検索した結果 が若干違いますが、これがなぜなのかは分かりません。Yahoo!の提供 するWebサービスの一つである画像検索Webサービスなどは検索結果が 大きく異なり、Webサービスで検索した方が圧倒的に検索件数が少な くなります。本家米国のYahoo!でも同様のWebサービスを提供してい ますが、この米国のWebサービス「Image Search Web Services」を利 用した時の結果はYahoo! JAPANで実際に検索した結果に近くなります。 少なくとも画像検索Webサービスについていえば、Yahoo! JAPANのWeb サービスを使うよりも、米国Yahoo!のWebサービスを使った方がよさ そうです。 [URL]Image Search Documentation for Yahoo! Search Web Services http://developer.yahoo.com/search/image/V1/imageSearch.html ちなみにYahoo! JAPANのウェブ検索Webサービスでは検索結果を最大 50件までしか取得できませんが、米国Yahoo!のWebサービスでは100件 まで取得できます。(画像、動画の検索では、両方とも50件までです。) =============================== ■ここで示したコードの多くはまず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. ===============================