ふらふらと Code Recipe をさまよっていると見慣れないサンプルがあったので、それをそのままアクティビティ化してみました。本当にそのままですw
1: Imports System.Activities
2: Imports System.Net
3: Imports System.Text
4:5: Public Class BingTranslaterActivity6: Inherits AsyncCodeActivity
7:8: Public Property OriginalStrings As InArgument(Of String)9: Public Property EncodeFrom As String = "ja"10: Public Property EncodeTo As String = "en"11:12: Public Property TranslatedStrings As OutArgument(Of String)13:14: Private Delegate Function translateUseBingDelegate(ByVal original As String) As String15:16: Public Sub New()17: Me.DisplayName = "Bing で翻訳"18: End Sub19:20: Protected Overrides Function BeginExecute(ByVal context As System.Activities.AsyncCodeActivityContext, ByVal callback As System.AsyncCallback, ByVal state As Object) As System.IAsyncResult21: Dim inputStrings = context.GetValue(Me.OriginalStrings)22: Dim asyncTranslateDel = New translateUseBingDelegate(AddressOf TranslateUseBing)23: context.UserState = asyncTranslateDel24:25: Return asyncTranslateDel.BeginInvoke(inputStrings, callback, state)
26: End Function27:28: Protected Overrides Sub EndExecute(ByVal context As System.Activities.AsyncCodeActivityContext, ByVal result As System.IAsyncResult)29: Dim asyncTranslateDel = TryCast(context.UserState, translateUseBingDelegate)30: Dim resultStrings = asyncTranslateDel.EndInvoke(result)
31: TranslatedStrings.Set(context, resultStrings)
32: End Sub33:34: Private Function TranslateUseBing(ByVal original As String) As String35: Dim bingApiKey = "取得したBingAPIキー"36: Dim result = ""
37: Dim escStrings = Uri.EscapeDataString(original)
38:39: Using webCl As New WebClient40: webCl.Encoding = Encoding.UTF841: Dim bingAddress As String = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId={0}&text={1}&from={2}&to={3}"42: Dim callAddress As String = String.Format(bingAddress, bingApiKey, escStrings, Me.EncodeFrom, Me.EncodeTo)43:44: Try
45: Dim resultBody = webCl.DownloadString(callAddress)
46: result = XDocument.Parse(resultBody).Elements.First.Value47: Catch ex As Exception48:49: End Try50: End Using51:52: Return result
53: End Function54:55: End Class
以前に書いた非同期での Web 通信方法をまったくそのまま利用し、このような形で BingAPI を呼び出します。
このような形でワークフローにアクティビティを配置、プロパティを設定し・・・
実行するとこのように翻訳結果が得られます。ワークフローにおけるアクティビティは別にそれほど難しいことをやるものを用意する必要はなく、今回のように一つ一つは簡単な処理だけども、組み合わせて利用する事で色々面白いことができるのがキモだと思っています。ただここでどの程度の粒度でアクティビティにするか、そこが非常にセンスの問われるところだと。
0 件のコメント:
コメントを投稿