SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows Azure MarketPlace DataMarket入門

Windows Azure MarketPlace DataMarketを使用した開発事始め

Windows Azure MarketPlace DataMarket入門(後編)

C#でフレキシブルクエリデータを使用する

 まず、自由に抽出条件を指定できるデータから説明していきます。

準備

 前回同様に「2006 - 2008 Crime in the United States (Data.gov)」のデータを使用していきます。DataMarketのトップ画面から[My Data]をクリックして、[My Data]画面を表示してください。[2006 - 2008 Crime in the United States (Data.gov)]をクリックして表示された画面で[Details]をクリックして画面を表示してください。

 画面の上部に「Service root URL」が表示されているので、表示されたURLをメモしておいてください。また、前回同様アカウントキーが必要となるので[My Data]→[Account Keys]で表示されたアカウントキーをメモしておいてください。

「Service root URL」の表示箇所
「Service root URL」の表示箇所

ソリューション作成

 折角なのでAzureになぞらえてWindows Azureプロジェクトを使用して開発を行います。もちろん通常のASP.NETやコンソールアプリケーションなどでも、インターネットに接続している環境であれば、データを取得するアプリケーションは開発可能なので、それぞれの環境に合うように開発してください。

 まず、Windows Azureプロジェクトのテンプレートを使用してソリューションを作成してください。ソリューション名を「AzureDataMarketTest」とします。ロールはASP.NET Webロールを使用します。今回はロール名を「DataMarket」と指定します。

サービス参照の追加

 サービス参照を追加して、プロキシクラスを作成します。ソリューションエクスプローラーの[参照設定]を右クリックして、[サービス参照の追加]をクリックします。

[サービス参照の追加]の画面
[サービス参照の追加]の画面

 アドレス欄に「Service root URL」で表示されたURLを入力して[移動]をクリックしてください。サービスが見つかると思います。なお、[操作]には表示されませんが問題ありません。[名前空間]に「DataGovCrimes」を入力して[OK]をクリックしてください。以下のように[Service References]に「DataGovCrimes」が追加されて表示されます。

サービス参照を追加後のプロジェクトの状態
サービス参照を追加後のプロジェクトの状態

コンテキストの作成

 データを操作するクラスを実装するためのソースコードとして、新規に「DataMarketContext.cs」を作成して以下のコードを実装します。

[リスト1]DataMarketContext.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Net;
using DataMarket.DataGovCrimes;

namespace DataMarket
{
    [DataObject]
    public class CrimeDataContext
    {
        private string YOURLIVEID = "";
        private string YOURACCOUNTKEY = "";

        private static Uri serviceURI;
        private static datagovCrimesContainer context;

        public CrimeDataContext()
        {
            serviceURI = new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes/");
            context = new datagovCrimesContainer(serviceURI);
            context.Credentials = new NetworkCredential(
                YOURLIVEID,
                YOURACCOUNTKEY);
        }

        [DataObjectMethod(DataObjectMethodType.Select)]
        public IEnumerable<CityCrime> GetCrimeData(string state, string city)
        {
            return (from crimes in context.CityCrime
                    where crimes.State == state && crimes.City == city
                    orderby crimes.Year ascending
                    select crimes);

        }
    }
}

 このコードでは、CrimeDataクラス内のコンストラクタでコンテキストを定義しています。参照先を定義しているserviceURIでは「Service root URL」で表示されたURLを設定します。認証情報を定義するNetworkCredentialクラスでは、それぞれの環境に合わせて、第1引数にDataMarketに登録しているLiveIDに、第2引数にアカウントキーを設定してください。

フォーム画面の作成

 次に、データの入力・表示を行うフォーム画面(DataGovCrimeData.aspx)を作成します。今回は州名と都市名を元に検索を行うため、2つの入力項目の入力を行うテキストボックス、検索結果を表示するGridView、データバインドのためのObjectDataSource、検索を行うためのボタンを配置します。

[リスト2]DataGovCrimeData.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataGovCrimeData.aspx.cs" Inherits="DataMarket.DataGovCrimeData" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>DataMarket CrimeData</title>
</head>
<body>
  <form id="form1" runat="server">
     <h1>Crimeデータのリスト</h1>
     <dl>
    <dt>State</dt>
    <dd><asp:TextBox ID="StateTextBox"
       runat="server" >Texas</asp:TextBox>
    </dd>
    <dt>City</dt>
    <dd><asp:TextBox ID="CityTextBox"
       runat="server" >Dallas</asp:TextBox>
    </dd>
     </dl>
     <asp:Button ID="GetDataButton" runat="server" Text="検索" />
     <br />
     <br />

      <asp:ObjectDataSource ID="CrimeData" runat="server"
       TypeName="DataMarket.CrimeDataContext"
       SelectMethod="GetCrimeData" OldValuesParameterFormatString="original_{0}">
       <SelectParameters>
        <asp:ControlParameter
         Name="state"
         ControlID="StateTextBox" PropertyName="Text" 
               Type="String" DefaultValue="Texas" />
           <asp:ControlParameter ControlID="CityTextBox" Name="city" 
               PropertyName="Text" Type="String" DefaultValue="Dallas" />
       </SelectParameters>
      </asp:ObjectDataSource>
     <asp:GridView ID="CrimeDataGridView" runat="server" AutoGenerateColumns="False" DataSourceID="CrimeData">
         <Columns>
             <asp:BoundField DataField="State" HeaderText="State" SortExpression="State" />
             <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
             <asp:BoundField DataField="Year" HeaderText="Year" 
                 SortExpression="Year" />
             <asp:BoundField DataField="Population" HeaderText="Population" 
                 SortExpression="Population" />
             <asp:BoundField DataField="ViolentCrime" HeaderText="ViolentCrime" 
                 SortExpression="ViolentCrime" />
         </Columns>
     </asp:GridView>
  </form>
</body>
</html>

 今回は画面レイアウトの都合上、犯罪情報はViolentCrime(暴力犯罪)のみを表示しますが、他の項目もすべて取得済みなので容易に表示できます。

サンプルアプリケーションの表示結果
サンプルアプリケーションの表示結果

 きちんとDataMarketから受け取ったデータを表示できたでしょうか。後はこのWebアプリケーションをAzureのコンピュートサービスにデプロイすることで簡単に公開できます。

次のページ
C#でフィックスクエリデータを使用する

この記事は参考になりましたか?

Windows Azure MarketPlace DataMarket入門連載記事一覧
この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト bird982000(bird982000)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5763 2011/03/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー