ASP.NET 徹底活用術(Part2)のホームへ戻る

■検索した書籍を図書館で予約する

 

ジャンル別の検索結果から書籍のタイトルをクリックするとアマゾンのサイトから購入することができます。ところが、購入したい本がすでに絶版になっていたり、プレミアムが付いて定価の数倍の値段で販売されていることがあります。このような場合、図書館から予約して借りると便利です。ここで紹介するサンプルは、アマゾンから検索した書籍を図書館から予約できるように図書館へのリンクを追加します。ここでは、東京都豊島区と板橋区の図書館にリンクさせます。

 

DataListItemTemplateに「豊島区図書館」と「板橋区図書館」のリンクを追加します。HyperLinkNavigateUrlプロパティには、データ連結式を記述してGetToshimakuUrlメソッド、GetItabashikuUrlメソッドを呼び出すようにします。これらのメソッドの引数には書籍の著者名を指定します。豊島区と板橋区のWebサイトでは、ISBNで書籍を検索することができませんので「著者名」で検索します。書籍の書名(タイトル)で検索する方法もありますが、書名が統一されていないため不一致になることがあります。

 

豊島区のWebサイトでは、書籍を検索するときHTTPGETメソッドを採用していますので、URLにクエリ文字列(著者名)を追加して送信します。

 

Public Function GetToshimakuUrl(strAuthor As String) As String

  Dim strUrl As String = "http://www.library.toshima.tokyo.jp/cgi-bin/search?ITEM1=CD&COMP1=3&KEY1={0}&COND=2&MAXVIEW=10"

  Return String.Format(strUrl, strAuthor)

End Function

 

板橋区のWebサイトは、HTTPPOSTメソッドを採用していますので、ランタイム時に<form>…</form>タグをダイナミックに生成して送信します。

 

Public Function GetItabashikuUrl(strAuthor As String) As String

  Dim strUrl As String = "itabashiku.aspx?author={0}"

  Return String.Format(strUrl, strAuthor)

End Function

 

Itabashiku.aspxPage_Loadイベントハンドラでは、ResponseオブジェクトのWriteメソッドでHTML<form>…</form>タグを生成して送信します。また、JavaScript<script>condition.submit();</script>も同時に送信してWebページがロードされたら自動的にポスト(submit)されるようにします。

 

※インラインコード(HTMLとコードが混在する)で、<script>…</script>タグを送信するときは、<script>タグを分割して送信しないとエラーになります。

 

Sub Page_Load()

  Dim strAuthor As String = Request.Params("Author")

  Response.Write("<form Action='http://www.lib.city.itabashi.tokyo.jp/ITWLIB/servlet/search.result' method='POST'  name='condition'>")

  Response.Write("<input type=hidden name=author1 value='" & strAuthor & "'>")

  Response.Write("<inpur type=hidden name=author2 value=''>")

  Response.Write("</form>")

  Response.Write("<s" & "cript>condition.submit();</s" & "cript>")

End Sub

 

<ItemTemplate>

    <td valign="top">

      <asp:HyperLink runat="server" Text="豊島区図書館" Target="_blank"

        NavigateUrl='<%# GetToshimakuUrl(Container.DataItem("Author")) %>' />

      <asp:HyperLink runat="server" Text="板橋区図書館" Target="_blank"

       NavigateUrl='<%# GetItabashikuUrl(Container.DataItem("Author"))  %>' />

    </td>

</ItemTemplate>

 

ブラウザを起動してWebページを表示したらジャンルからノードをクリックして書籍を検索します。検索結果がDataListに表示されます(7)[豊島区図書館]のリンクをクリックすると著者の蔵書が表示されます(8)。図書館の蔵書リストから「タイトル」のリンクをクリックすると書籍を予約することができます。書籍が準備できると図書館からメールが送信されます。

 

図7 書籍の検索結果に図書館のリンクが表示される

 

 

図8 豊島区図書館の蔵書を検索した結果(タイトルをクリックすると予約できる)

 

Repeaterのカスタムコントロールを使用すると、書籍をトランプのカードのように1冊づつダイナミックに表示することも可能です。興味のある方は、著者のサイトから[ASP.NET Top 10]のリンクをクリックしてみてください。

 

http://accessnet.japan.webmatrixhosting.net/SearchAspNetBooks.aspx

 

 

ASP.NET 徹底活用術(Part2)のホームへ戻る