แปลข้อความโดยทางโปรแกรมโดยใช้ API ข้อความของนักแปล
สิ่งที่ต้องเตรียมล่วงหน้า
สร้างบัญชี Microsoft Azure ไว้ล่วงหน้า ขั้นตอนการสร้างอธิบายไว้ในหน้านี้
นอกจากนี้คราวนี้เราจะลงทะเบียนกับเวอร์ชันฟรีดังนั้นโปรดเปลี่ยนในเวลาที่เหมาะสมหากคุณต้องการใช้เวอร์ชันที่ต้องชําระเงิน
สร้างทรัพยากร API
เปิดพอร์ทัล Microsoft Azure และคลิก สร้าง ในเมนูด้านซ้าย
เลือก "อัจฉริยะ + การวิเคราะห์" จากเมนูแบบขยาย
จากเมนูแบบขยาย ให้เลือก API บริการองค์ความรู้ (ตัวอย่าง)
เมื่อหน้าจอการสร้างปรากฏขึ้นให้ป้อนชื่อที่คุณเลือก (จะเป็นชื่อที่แสดงบนแดชบอร์ด) และเลือก "ทดลองใช้ฟรี" สําหรับการสมัครสมาชิก จากนั้นคลิกประเภท API
เลือก API ข้อความนักแปลจากรายการ API
จากนั้นเลือกระดับราคา
เนื่องจากคุณใช้เวอร์ชันฟรีให้คลิก "F0 Free" แล้วคลิกปุ่ม "เลือก" เวอร์ชันฟรีสามารถแปลงอักขระได้สูงสุด 2 ล้านตัวต่อเดือน
ถ้าคุณกําลังลงทะเบียนบริการเป็นครั้งแรก ให้สร้างกลุ่มทรัพยากรใหม่ คุณสามารถจัดกลุ่มทรัพยากรที่คุณสร้างเป็นกลุ่มของชื่อใดก็ได้
สถานที่เป็นสถานที่สําหรับให้บริการ เมื่อพัฒนาส่วนใหญ่ในญี่ปุ่นมีแนวโน้มที่จะปรับปรุงประสิทธิภาพหากติดตั้งในญี่ปุ่น
สุดท้ายตรวจสอบ "ปักหมุดที่แดชบอร์ด" แล้วคลิกปุ่ม "สร้าง"
แดชบอร์ดมีทรัพยากรที่คุณสร้างไว้ก่อนหน้านี้ ดังนั้นให้คลิกเพื่อเปิด
ฉันคิดว่าภาพรวมเปิดอยู่ดังนั้นโปรดตรวจสอบ URL สําหรับ "ปลายทาง" ทางด้านขวา นี่คือ URL ของ API ที่ควรเข้าถึงโดยการตรวจสอบสิทธิ์ก่อน อย่างไรก็ตามมันไม่ค่อยมีการเปลี่ยนแปลงและอธิบายไว้ในโปรแกรมที่ฉันจะแนะนําในภายหลังดังนั้นจึงเป็นการดีที่จะจําไว้ว่ามันอยู่ที่นี่ในขณะนี้
เลือก "คีย์" จากเมนู
จดบันทึกคีย์ 1 ที่ปรากฏขึ้นและใช้เพื่อรับรองความถูกต้อง ผมคิดว่ามีสองคีย์น่าจะเป็นสํารอง อย่างไรก็ตามหากกุญแจรั่วไปด้านนอกด้วยเหตุผลบางประการคุณสามารถสร้างใหม่ได้ด้วย"Regenerate..." ข้างต้น
นี่เป็นการสรุปการตั้งค่าบนฝั่ง Azure
เข้าถึง API โดยทางโปรแกรมเพื่อแปลข้อความ
ตอนนี้ได้เวลาสร้างโปรแกรมจริง ๆ เพื่อให้คุณสามารถแปลข้อความได้ ใช้ Visual Studio 2015 เพื่อสร้างโปรแกรมประยุกต์ WPF และสร้างหน้าจอที่มีลักษณะดังนี้:
ป้อนข้อความใน จาก และในภาษา ให้ป้อนภาษาที่คุณต้องการแปลงเป็นภาษาใด และถ้าคุณคลิกที่ปุ่ม "แปลงเรียกใช้" คุณจะสามารถดูข้อความที่แปลแล้วใน "ปลายทาง" ด้านล่าง
XAML (เมนวินโดว์.xaml)
มันไม่ได้ส่งผลโดยตรงต่อการแปลดังนั้นจึงรวมเฉพาะรหัสเท่านั้น
<Window x:Class="AzureTranslatorTextApi.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AzureTranslatorTextApi"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label x:Name="label" Content="変換元" HorizontalAlignment="Left" Grid.Row="0"/>
<TextBox x:Name="textBoxInput" Margin="4" Text="ここに変換するテキストを入力します。" Grid.Row="1" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>
<Label x:Name="labelLang" Content="言語" HorizontalAlignment="Left" Grid.Row="2"/>
<Label x:Name="labelLangFrom" Content="from" HorizontalAlignment="Left" Grid.Row="2" Margin="56,0,0,0"/>
<TextBox x:Name="textBoxLangFrom" Margin="96,4,0,4" HorizontalAlignment="Left" Text="ja" Grid.Row="2" Width="50"/>
<Label x:Name="labelLangTo" Content="to" HorizontalAlignment="Left" Grid.Row="2" Margin="164,0,0,0"/>
<TextBox x:Name="textBoxLangTo" Margin="190,4,0,4" HorizontalAlignment="Left" Text="en" Grid.Row="2" Width="50" />
<Button x:Name="button" Content="変換実行" Margin="24,4" Height="24" Grid.Row="3" Click="button_Click"/>
<Label x:Name="label_Copy" Content="変換先" HorizontalAlignment="Left" Grid.Row="4"/>
<TextBox x:Name="textBoxOutput" Margin="4" Grid.Row="5" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" IsReadOnly="True" Background="#FFE8E8E8" HorizontalScrollBarVisibility="Auto"/>
</Grid>
</Window>
รับโทเค็นการเข้าถึง (MainWindow.xaml.cs)
ขั้นตอนพื้นฐานสําหรับการแปลข้อความมีดังนี้:
- โยน KEY 1 ลงใน API เพื่อรับโทเค็นการเข้าถึง
- ใช้โทเค็นการเข้าถึงเพื่อโยนข้อความไปยังบริการแปลเพื่อรับข้อความที่แปลแล้ว
- รับโทเค็นการเข้าถึงกครั้งหากจําเป็น
มันมาถึงแล้ว
ก่อนอื่นเรามากําหนดวิธีการรับโทเค็นการเข้าถึงและทําให้ใช้งานง่าย หากคุณผ่านคีย์ 1 ที่ได้รับก่อนหน้านี้เป็นอาร์กิวเมนต์ คุณสามารถรับโทเค็นการเข้าถึงได้ นอกจากนี้ยังสามารถรับได้โดยการประมวลผลแบบซิงโครนัส แต่เนื่องจากสามารถใช้ Async / await C # 5.0 ได้มาทําให้เป็นกระบวนการแบบอะซิงโครนัสได้อย่างง่ายดาย
เป็นจุด ให้ตั้งค่า URL เป็น Endpoint + "/issueToken" ตามที่ยืนยันใน Azure และตั้งค่า KEY 1 ที่ได้รับด้วย "Ocp-Apim-Subscription-Key" เป็นคีย์ในส่วนหัวที่จะส่ง
ในการตอบสนองสามารถรับสตริงของโทเค็นการเข้าถึงได้ตามที่เป็นอยู่ดังนั้นจึงใช้เป็นค่าที่ส่งคืน อย่างไรก็ตามโทเค็นการเข้าถึงนี้ใช้ได้เพียง 10 นาทีเท่านั้น
<summary>
非同期でアクセストークンを取得します。
</summary>
<param name="subscriptionKey">認証に必要なキー文字列。</param>
<returns>取得したアクセストークン。</returns>
private async Task<string> GetAccessTokenAsync(string subscriptionKey)
{
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
request.Content = new StringContent(string.Empty);
request.Headers.TryAddWithoutValidation("Ocp-Apim-Subscription-Key", subscriptionKey);
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var token = await response.Content.ReadAsStringAsync();
Trace.WriteLine($"token={token}");
return token;
}
}
}
เข้าถึง API สําหรับการแปลข้อความ (MainWindow.xaml.cs)
นอกจากนี้ยังทําเป็นวิธีการเพื่อให้ใช้งานง่าย อาร์กิวเมนต์ช่วยให้คุณสามารถระบุโทเค็นการเข้าถึงที่คุณได้รับและข้อความที่จะแปล และภาษาที่จะแปลงเป็นภาษาใด
โปรดทราบว่า URL ที่คุณเข้าถึงจะแตกต่างจาก URL ที่คุณได้รับโทเค็น ข้อความและภาษาที่จะแปลจะถูกส่งเป็นสตริงคิวรีใน URL ดังนั้นให้เรียกใช้โดยใช้ "Uri.EscapeDataString" ล่วงหน้า
เมธอด GET จะส่งการอนุญาตของส่วนหัวด้วยสคีมา "Bearer" และโทเค็นในพารามิเตอร์
เนื่องจากการตอบสนองถูกถ่ายในรูปแบบ XML XDocument จึงถูกใช้เพื่อดึงข้อความที่แปลแล้วภายใน อย่างไรก็ตาม ถ้าข้อความประกอบด้วยอักขระการหลบหนี XML อาจเป็นเพราะคุณกําลังใช้ XML พวกเขาอาจยังคงถูกหลีก แปลงตามต้องการ
<summary>
テキストを翻訳します。
</summary>
<param name="token">API のアクセスに必要なトークン。</param>
<param name="text">翻訳するテキスト、</param>
<param name="fromLang">翻訳元の言語。</param>
<param name="toLang">翻訳先の言語。</param>
<returns>翻訳されたテキスト。</returns>
private async Task<string> TranslateText(string token, string text, string fromLang, string toLang)
{
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
// URL につけて送信するのでエンコードする
var escapeText = Uri.EscapeDataString(text);
Trace.WriteLine($"escapeText={escapeText}");
var uriStr = "http://api.microsofttranslator.com/V2/Http.svc/Translate?"
+ $"text={escapeText}&from={fromLang}&to={toLang}";
request.Method = HttpMethod.Get;
request.RequestUri = new Uri(uriStr);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var resultText = await response.Content.ReadAsStringAsync();
// <string>XXXXXX</string> 形式で取得されるので XDocument で操作する
XDocument xdoc = XDocument.Parse(resultText);
Trace.WriteLine($"xdoc={xdoc.ToString()}");
// XML エスケープ対象文字が正しく変換されない場合があるので
// 必要があれば対処すること
return xdoc.Descendants().First().Value;
}
}
}
กระบวนการดําเนินการปุ่ม (MainWindow.xaml.cs)
เมื่อคุณใช้สองวิธีแล้วสิ่งที่คุณต้องทําคือโทรหาแต่ละวิธี คุณสามารถแปลข้อความได้โดยตั้งค่า KEY1 และระบุค่าที่ป้อนสําหรับแต่ละวิธี เนื่องจากเป็นกระบวนการแบบอะซิงโครนัสโปรดเพิ่ม async ลงในวิธีการจัดการปุ่ม
private async void button_Click(object sender, RoutedEventArgs e)
{
// ここに認証キー(KEY1)を入力してください
string subscriptionKey = "XXXXXXXXX";
// アクセストークンを取得します。有効時間は10分程度です。(おそらく)
var token = await GetAccessTokenAsync(subscriptionKey);
// テキストを翻訳し表示します
textBoxOutput.Text = await TranslateText(token, textBoxInput.Text, textBoxLangFrom.Text, textBoxLangTo.Text);
}
รายชื่อภาษาที่แปลได้
คุณอาจต้องการอ้างอิงถึงหน้า Micorsoft ต่อไปนี้: เนื่องจากเป็นหนึ่งในบริการคลาวด์จึงอาจมีการเปลี่ยนแปลงได้ตลอดเวลา