データの作成
SPREADによる画面作成を行う前に、画面に表示するデータを取得するコードを記述しましょう。今回は、SPREAD for WPFのときに作ったサンプルアプリケーションと同じものを作成してみます。そのためにまずはWPF版のサンプルと同様にModelsフォルダ、ViewModelsフォルダ、Viewsフォルダを作成し、MainPage.vbをViewsフォルダに移動します。
coneco.netを利用するための準備
WPFでも使った、検索用APIがJSONで公開されているconeco.comを利用します。利用に際しては、利用者登録をしてAPIキーを取得しておく必要があります。サンプルコードではこの部分でコンパイルエラーがでるようにしてありますので、取得して行末のセミコロン(;)を削除して対応してください。
APIキーは、次のような手順で取得できますので、そのAPIキーを指定してアクセスする必要があります。
- https://www.coneco.net/api/にアクセスして、メールアドレスとパスワードを設定
- 本登録用URLのお知らせメールに書かれたAPIキー取得用URLをクリック
- APIキー発行完了のお知らせメールにある「あなたのAPIキー」をプログラムにセット
参照設定の追加
次に、coneco.netのAPIを使うために参照設定を追加します。
ソリューションエクスプローラーでプロジェクト名を右クリックして、[参照の追加]メニューでダイアログを表示し、System.Net.HttpとSystem.Runtime.Serializationを追加します。
Modelsフォルダに配置するコード
商品検索結果の形式
coneco.comの製品検索結果は、JSON形式で返却できます。返却されてくるJSON形式に合わせたクラス定義は、次のようになります。
Public Class ResultContext <System.Runtime.Serialization.DataContract()> _ Public Class TResult <System.Runtime.Serialization.DataMember()> _ Public Property Item As List(Of TItem) End Class <System.Runtime.Serialization.DataContract()> _ Public Class TItem <System.Runtime.Serialization.DataMember()> _ Public Property ComId As String : (略) : <System.Runtime.Serialization.DataMember()> _ Public Property Specifications As List(Of TSpecifications) End Class <System.Runtime.Serialization.DataContract()> _ Public Class TSpecifications <System.Runtime.Serialization.DataMember()> _ Public Property Id As String <System.Runtime.Serialization.DataMember()> _ Public Property Title As String <System.Runtime.Serialization.DataMember()> _ Public Property Spec As String End Class End Class
APIの呼び出し
商品検索APIは、次のようなURLにアクセスして行います。
http://api.coneco.net/cws/v1/SearchProducts_json?apikey=xxxx&categoryId=10120&sort=ranking
キーワード検索を行うときは、このURLの後ろに『&freeword=キーワード』のパラメタを付与します。
このようにして組み立てたURLを指定し、GetStringAsyncを実行してJSON形式のデータを受信します。
Public Class ConecoContext Public Property Ranking As String Public Property ComId As String Public Property Name As String Public Property Manufacturer As String Public Property LowestPrice As String Public Property HighestPrice As String Public Property CPU As String Public Property Disk As String Public Property Memory As String Public Property Display As String Public Property ImageUrl As String Public Property Img As Image End Class Public Class ConecoModel Implements INotifyPropertyChanged Public Property Items As New List(Of ConecoContext) : (略) : Private Sub GetItemContext(ByVal result As String) Using Stream As New MemoryStream(System.Text.Encoding.UTF8.GetBytes(result)) Dim serializer As New DataContractJsonSerializer(GetType(ResultContext.TResult)) Dim jsonDataValue As ResultContext.TResult = CType(serializer.ReadObject(Stream), ResultContext.TResult) Me.Items = (From item In jsonDataValue.Item Where item.SellerCount > 0 Order By CType(IIf(item.CategoryRanking.Length = 0, Integer.MaxValue, item.CategoryRanking), Integer) Select New ConecoContext With { : (中略) : }).ToList End Using End Sub : (略) : End Class
このコードにより、Itemsプロパティに画面表示に必要なデータがセットできます。