Delphi APP 開發入門(十)REST Client 開發<<前情
微軟的Microsoft Azure Marketplace有許多不錯的資料可以應用,今天就跟大家分享如何利用XE8搭配Microsoft Translator線上翻譯服務來做翻譯的app。
一、註冊Azure帳戶
點選 https://datamarket.azure.com/dataset/bing/microsofttranslator 上的登入,使用個人。然後依照步驗註冊就好。
二、訂閱服務
進入 https://datamarket.azure.com/dataset/bing/microsofttranslator ,點選2,000,000字元數/月的免費方案註冊。
三、註冊程式
程式中需要client_id跟client_secret ,所以到 https://datamarket.azure.com/developer/applications 註冊程式。
client_id就是用戶端識別碼
client_secret就是用戶端密碼
四、建立程式
新增一個Multi-Device Application,然後選擇Blank Application
接著在畫面上新增加三個元件,TRESTClient、TRESTRequest跟TRESTResponse。重新命名為RESTClientAuthToken、RESTRequestAuthToken跟RESTResponseAuthToken.
其中RESTClientAuthToken的BaseURL設定 https://datamarket.accesscontrol.windows.net/v2
RESTRequestAuthToken的Method改為rmPOST、然後Resource設為OAuth2-13(參考 https://msdn.microsoft.com/en-us/library/hh454950.aspx)
然後在Params增加四個參數如下
然後在畫面上佈置如下
接下來,可以下拉View的功能,去看看在不同解析度、尺寸下的樣式,然後調整。
在取得Token值的按鈕寫上以下程式
1 2 3 4 5 6 7 8 9 10 11 | var token: string; begin RESTRequestAuthToken.Params.ParameterByName( 'client_secret' ).Value := EditClient_Secret.Text; RESTRequestAuthToken.Params.ParameterByName( 'client_id' ).Value := EditClient_ID.Text; RESTRequestAuthToken.Execute; if RESTResponseAuthToken.GetSimpleValue( 'access_token' ,token) then begin EditToken_value.Text := token; end; end; |
確定成功取得Token值後我們可以開始著手寫翻譯的程式,參考的文件為(https://msdn.microsoft.com/en-us/library/ff512387.aspx),一樣增加三個元件,TRESTClient、TRESTRequest跟TRESTResponse。
重新命名為RESTClientTranslate、RESTRequestTranslate跟RESTResponseTranslate.。
RESTClientTranslate的BaseURL設為 http://api.microsofttranslator.com/v2/Http.svc
接著在RESTRequestTranslate的Resource設為Translate?text={text}&from={from}&to={to}
一樣在裡面增加四個Params,from跟to需要對應相關的語言代碼(參考https://msdn.microsoft.com/en-us/library/hh456380.aspx)
在畫面上增加combobox二個(選擇翻譯的語系),以及二個memo及button(翻譯)。
開啟view→LiveBindings Designer,將RESTRequestTranslate中的Params.text指到Memo1的Text(輸入),然後RESTResponseTranslate.的Content指向Memo2的Text(輸出)。
翻譯的按鈕程式碼如下
1 2 3 4 | RESTRequestTranslate.Params.ParameterByName( 'Authorization' ).Value := 'bearer ' +EditToken_value.Text; RESTRequestTranslate.Params.ParameterByName( 'from' ).Value := cbFrom.Selected.Text; RESTRequestTranslate.Params.ParameterByName( 'to' ).Value := cbToo.Selected.Text; RESTRequestTranslate.Execute; |
語言念出翻譯內容的方式也很簡單,參考文件語音的部份(參考 https://msdn.microsoft.com/en-us/library/ff512420.aspx)
增加一個RESTRequestPlay,然後設定Resource為 speak?text={text}&language={language}&to={to}&format=audio/mp3&options=MinSize 。
三個Param為 Authorization、text、language以及增加mediaplayer。
念出語音的原始碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | var MS: TMemoryStream; TempFile: string; begin RESTRequestPlay.Params.ParameterByName( 'Authorization' ).Value := 'bearer ' +EditToken_value.Text; RESTRequestPlay.Params.ParameterByName( 'language' ).Value := RESTRequestTranslate.Params.ParameterByName( 'to' ).Value; RESTRequestPlay.Params.ParameterByName( 'text' ).Value := RESTResponseTranslate.Content; RESTRequestPlay.Execute; MS := TMemoryStream.Create; try MS.WriteData(RESTResponsePlay.RawBytes,Length(RESTResponsePlay.RawBytes)); TempFile := TPath.ChangeExtension(TPath.GetTempFileName, '.mp3' ); MS.SaveToFile(TempFile); MediaPlayer1.FileName := TempFile; MediaPlayer1.Play; finally MS.Free; end; end; |
完整API參考網址 API參考
https://msdn.microsoft.com/en-us/library/dd576287.aspx
程式碼下載
联系客服