Delphi APP 開發入門(十一)Microsoft Azure Translator實戰 by superlevin | CodeData
top

Delphi APP 開發入門(十一)Microsoft Azure Translator實戰

分享:

Delphi APP 開發入門(十)REST Client 開發<<前情

微軟的Microsoft Azure Marketplace有許多不錯的資料可以應用,今天就跟大家分享如何利用XE8搭配Microsoft Translator線上翻譯服務來做翻譯的app。
一、註冊Azure帳戶

點選 https://datamarket.azure.com/dataset/bing/microsofttranslator 上的登入,使用個人。然後依照步驗註冊就好。

tran002-300x139

 

二、訂閱服務
進入 https://datamarket.azure.com/dataset/bing/microsofttranslator ,點選2,000,000字元數/月的免費方案註冊。

tran001 tran004 tran005 tran006

 

三、註冊程式
程式中需要client_id跟client_secret ,所以到 https://datamarket.azure.com/developer/applications 註冊程式。

client_id就是用戶端識別碼

client_secret就是用戶端密碼

tran007

 

四、建立程式

新增一個Multi-Device Application,然後選擇Blank Application

001

接著在畫面上新增加三個元件,TRESTClient、TRESTRequest跟TRESTResponse。重新命名為RESTClientAuthToken、RESTRequestAuthToken跟RESTResponseAuthToken.

002

其中RESTClientAuthToken的BaseURL設定 https://datamarket.accesscontrol.windows.net/v2

003

 

RESTRequestAuthToken的Method改為rmPOST、然後Resource設為OAuth2-13(參考 https://msdn.microsoft.com/en-us/library/hh454950.aspx

004

然後在Params增加四個參數如下

005

 

然後在畫面上佈置如下

010

 

接下來,可以下拉View的功能,去看看在不同解析度、尺寸下的樣式,然後調整。

 

012

 

013 014

在取得Token值的按鈕寫上以下程式

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

007

接著在RESTRequestTranslate的Resource設為Translate?text={text}&from={from}&to={to}

008 

一樣在裡面增加四個Params,from跟to需要對應相關的語言代碼(參考https://msdn.microsoft.com/en-us/library/hh456380.aspx

009 

在畫面上增加combobox二個(選擇翻譯的語系),以及二個memo及button(翻譯)。

015

開啟view→LiveBindings Designer,將RESTRequestTranslate中的Params.text指到Memo1的Text(輸入),然後RESTResponseTranslate.的Content指向Memo2的Text(輸出)。

010

翻譯的按鈕程式碼如下

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。

念出語音的原始碼

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

程式碼下載

https://github.com/superlevin/XE8microsofttranslator

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

本名林壽山,目前為自由開發者,也喜歡研究易經、奇門遁甲,從事資料庫程式設計、網頁設計、餐飲POS系統開發、iOS Swift行動裝置開發。使用Delphi 16年的7年級前段班生,致力於學習新的事物,希望讓更多人踏入寫程式的不歸路。近期在學校的產業學院講師,主要為PHP Laravel/Codeigniter的網站開發教學教育訓練,希望讓產業跟學術更加無縫接軌。 電子郵件: superlevin@gmail.com 林壽山的部落格

熱門論壇文章

熱門技術文章