ちょっとした英訳を知りたい時に使える、デ辞蔵のREST APIを使った和英辞典プログラム
ロジックコードを記述する
リスト2 (MainWindow.xaml.vb)
Option Strict On
最新のHTTPアプリケーション用のプログラミングインターフェイスを提供するクラスの含まれる、System.Net.Http名前空間をインポートします。
Imports System.Net.Http
コンテキストメニューおよびメッセージダイアログのサポートを提供するクラスの含まれる、Windows.UI.Popups名前空間をインポートします。
Imports Windows.UI.Popups
dicInfoクラス内に、文字列型の「英文」、「意味」というプロパティを定義しておきます。
Public Class dicInfo Public Property 英文 As String Public Property 意味 As String End Class Public NotInheritable Class MainPage Inherits Page
「Yes」アイコンがタップされた時の処理
入力ボックスが空でない場合は、つまり入力ボックスに何らかの語句が入力された場合の処理です。 私の作者名kuniyasuをクエリに指定して、Windows ストアに公開している私のアプリ一覧を表示します。 詳細については、「自分の現在位置を取得して表示するサンプルプログラム」の記事を参照してください。 今回はここまでです。ありがとうございました。
変数dicUrにデ辞蔵のREST APIであるURLを格納します。DicにEdictJEを指定し、Wordに、エスケープ表現に変換された、dicTextBoxの値を指定します。DicにEJdictを指定すると、今の処理とは逆の英和辞典の処理が可能になります。興味のある方は、EJdictに変更してお試しください。その場合、入力ボックスには英文の語句を入力する必要があります。
新しいHttpClientのインスタンスmyHttpClientオブジェクトを作成します。
GetStringAsyncメソッドで、変数dicUriから返される結果XMLを取得して変数resultDicXmlに格納します。
返されたXMLには不要な名前空間等が付いていますので、XMLの内容を取り出す際の邪魔になります、そこでReplace関数で、ルート要素を
XElement.Parseメソッドで置換し返された結果XMLを文字列として読み込みます。変数myItemCountに
該当する単語があった場合は以下の処理になります。
dicInfoクラス型の新しいリストであるmyDicListオブジェクトを作成します。Decendantsメソッドで全ての子孫要素
新しいHttpClientのインスタンスmyDicHttpClientオブジェクトを作成し、GetStringAsyncメソッドで、変数resultDicUriから返される結果XMLを取得して変数resultMeanXmlに格納します。返されたXMLには不要な名前空間等が付いていますので、XMLの内容を取り出す際の邪魔になります、そこでReplace関数で、ルート要素を
XElement.Parseメソッドで、置換し返されたresultMeanXmlの内容を文字列として読み込みます。変数englishに要素の値を格納し、変数meanに要素の子要素
englishには英文の語句、meanには意味が格納されます。dicInfoクラスの「英文」プロパティにenglish、「意味」プロパティにmeanの値を指定して、AddメソッドでmyDicListオブジェクトに追加していきます。
GridViewのItemsSourceプロパティにmyDicListオブジェクトを指定します。これで、英文とその意味が上下に分かれて表示されます。
入力ボックスが未入力の場合は、フォーカスを入力ボックスに移します。
デ辞蔵のREST APIで返されるXMLは、最初のAPIでルート要素が
最初の
次に Private Async Sub okButton_Click(sender As Object, e As RoutedEventArgs) Handles okButton.Click
If dicTextBox.Text <> String.Empty Then
Dim dicUri = String.Format("http://public.dejizo.jp/NetDicV09.asmx/SearchDicItemLite?Dic=EdictJE&Word={0}&Scope=HEADWORD&Match=STARTWITH&Merge=AND&Prof=XML&PageSize=20&PageIndex=0", Uri.EscapeDataString(dicTextBox.Text))
Dim myHttpClient As New HttpClient
Dim resultDicXml = Await myHttpClient.GetStringAsync(dicUri)
resultDicXml = resultDicXml.Replace("<SearchDicItemResult xmlns:xsi=" & ChrW(34) & "http://www.w3.org/2001/XMLSchema-instance" & ChrW(34) & " xmlns:xsd=" & ChrW(34) & "http://www.w3.org/2001/XMLSchema" & ChrW(34) & " xmlns=" & ChrW(34) & "http://btonic.est.co.jp/NetDic/NetDicV09" & ChrW(34) & ">", "<SearchDicItemResult >")
Dim dicXmlDoc As XElement = XElement.Parse(resultDicXml)
Dim myItemCount = dicXmlDoc.Descendants("ItemCount").Value
If myItemCount = "0" Then
Dim message = New MessageDialog("該当する単語がありません。")
Await message.ShowAsync
Exit Sub
End If
Dim myDicList As New List(Of dicInfo)
For Each result In From c In dicXmlDoc.Descendants("DicItemTitle") Select c
Dim dicItem = result.Element("ItemID").Value
Dim resultDicUri = String.Format("http://public.dejizo.jp/NetDicV09.asmx/GetDicItemLite?Dic=EdictJE&Item={0}&Loc=&Prof=XML", dicItem)
Dim myDicHttpClient As New HttpClient
Dim resultMeanXml = Await myDicHttpClient.GetStringAsync(resultDicUri)
resultMeanXml = resultMeanXml.Replace("<GetDicItemResult xmlns:xsi=" & ChrW(34) & "http://www.w3.org/2001/XMLSchema-instance" & ChrW(34) & " xmlns:xsd=" & ChrW(34) & "http://www.w3.org/2001/XMLSchema" & ChrW(34) & " xmlns=" & ChrW(34) & "http://btonic.est.co.jp/NetDic/NetDicV09" & ChrW(34) & ">", "<GetDicItemResult>")
resultMeanXml = resultMeanXml.Replace("<div class=" & ChrW(34) & "NetDicBody" & ChrW(34) & " xml:space=" & ChrW(34) & "preserve" & ChrW(34) & " xmlns=" & ChrW(34) & ChrW(34) & ">", "<div>")
Dim meanXmlDoc As XElement = XElement.Parse(resultMeanXml)
Dim english = meanXmlDoc.Descendants("span").Value
Dim mean = meanXmlDoc.Descendants("Body").Elements("div").Elements("div").Value
myDicList.Add(New dicInfo With {.英文 = english, .意味 = mean})
Next
GridView1.ItemsSource = myDicList
Else
dicTextBox.Focus(Windows.UI.Xaml.FocusState.Pointer)
Exit Sub
End If
End Sub
「kuniyasuのアプリ一覧」ボタンがクリックされた時の処理
この画面から、もとの画面に戻るには、画面の左隅上にマウスカーソルを移動し、表示されるこのアプリの小さな画面をタップすると戻ることができます。 Private Async Sub myApps_Click(sender As Object, e As RoutedEventArgs) Handles myApps.Click
Dim myAppsUri = New Uri("ms-windows-store:Search?query=kuniyasu")
Await Windows.System.Launcher.LaunchUriAsync(myAppsUri)
End Sub
End Class
アイコンの作成
ちょっとした英訳を知りたい時に使える和英辞典プログラム