แปลข้อความโดยทางโปรแกรมโดยใช้ API ข้อความของนักแปล

วันที่สร้างเพจ :

สิ่งที่ต้องเตรียมล่วงหน้า

สร้างบัญชี Microsoft Azure ไว้ล่วงหน้า ขั้นตอนการสร้างอธิบายไว้ในหน้านี้

นอกจากนี้คราวนี้เราจะลงทะเบียนกับเวอร์ชันฟรีดังนั้นโปรดเปลี่ยนในเวลาที่เหมาะสมหากคุณต้องการใช้เวอร์ชันที่ต้องชําระเงิน

สร้างทรัพยากร API

เปิดพอร์ทัล Microsoft Azure และคลิก สร้าง ในเมนูด้านซ้าย

「新規」をクリック

เลือก "อัจฉริยะ + การวิเคราะห์" จากเมนูแบบขยาย

「Intelligence + analytics」を選択

จากเมนูแบบขยาย ให้เลือก API บริการองค์ความรู้ (ตัวอย่าง)

「Cognitive Services APIs (プレビュー)」を選択

เมื่อหน้าจอการสร้างปรากฏขึ้นให้ป้อนชื่อที่คุณเลือก (จะเป็นชื่อที่แสดงบนแดชบอร์ด) และเลือก "ทดลองใช้ฟรี" สําหรับการสมัครสมาชิก จากนั้นคลิกประเภท API

API type をクリック

เลือก API ข้อความนักแปลจากรายการ API

「Translator Text API」を選択

จากนั้นเลือกระดับราคา

Pricing tier を選択

เนื่องจากคุณใช้เวอร์ชันฟรีให้คลิก "F0 Free" แล้วคลิกปุ่ม "เลือก" เวอร์ชันฟรีสามารถแปลงอักขระได้สูงสุด 2 ล้านตัวต่อเดือน

「F0 Free」を選択

ถ้าคุณกําลังลงทะเบียนบริการเป็นครั้งแรก ให้สร้างกลุ่มทรัพยากรใหม่ คุณสามารถจัดกลุ่มทรัพยากรที่คุณสร้างเป็นกลุ่มของชื่อใดก็ได้

สถานที่เป็นสถานที่สําหรับให้บริการ เมื่อพัฒนาส่วนใหญ่ในญี่ปุ่นมีแนวโน้มที่จะปรับปรุงประสิทธิภาพหากติดตั้งในญี่ปุ่น

สุดท้ายตรวจสอบ "ปักหมุดที่แดชบอร์ด" แล้วคลิกปุ่ม "สร้าง"

作成

แดชบอร์ดมีทรัพยากรที่คุณสร้างไว้ก่อนหน้านี้ ดังนั้นให้คลิกเพื่อเปิด

リソースを開く

ฉันคิดว่าภาพรวมเปิดอยู่ดังนั้นโปรดตรวจสอบ URL สําหรับ "ปลายทาง" ทางด้านขวา นี่คือ URL ของ API ที่ควรเข้าถึงโดยการตรวจสอบสิทธิ์ก่อน อย่างไรก็ตามมันไม่ค่อยมีการเปลี่ยนแปลงและอธิบายไว้ในโปรแกรมที่ฉันจะแนะนําในภายหลังดังนั้นจึงเป็นการดีที่จะจําไว้ว่ามันอยู่ที่นี่ในขณะนี้

Endpoint

เลือก "คีย์" จากเมนู

「Keys」を選択

จดบันทึกคีย์ 1 ที่ปรากฏขึ้นและใช้เพื่อรับรองความถูกต้อง ผมคิดว่ามีสองคีย์น่าจะเป็นสํารอง อย่างไรก็ตามหากกุญแจรั่วไปด้านนอกด้วยเหตุผลบางประการคุณสามารถสร้างใหม่ได้ด้วย"Regenerate..." ข้างต้น

「KEY 1」をメモ

นี่เป็นการสรุปการตั้งค่าบนฝั่ง 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)

ขั้นตอนพื้นฐานสําหรับการแปลข้อความมีดังนี้:

  1. โยน KEY 1 ลงใน API เพื่อรับโทเค็นการเข้าถึง
  2. ใช้โทเค็นการเข้าถึงเพื่อโยนข้อความไปยังบริการแปลเพื่อรับข้อความที่แปลแล้ว
  3. รับโทเค็นการเข้าถึงกครั้งหากจําเป็น

มันมาถึงแล้ว

ก่อนอื่นเรามากําหนดวิธีการรับโทเค็นการเข้าถึงและทําให้ใช้งานง่าย หากคุณผ่านคีย์ 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 ต่อไปนี้: เนื่องจากเป็นหนึ่งในบริการคลาวด์จึงอาจมีการเปลี่ยนแปลงได้ตลอดเวลา