Ⅰ. はじめに
タイトルの通り「C#でYahooAPIのルビ振りを利用する方法」です。
Ⅱ. サンプルプログラム
using System; using System.Net.Http; using System.Threading.Tasks; using System.Xml.Linq; static async Task Main(string[] args) { var grade = 1; var appId = "YOUR_APP_ID"; var sentence = "漢字だけにルビを振る。ひらがなカタカナalphabet"; // YahooAPI側のcharset指定が不正なのでGetStringAsyncするとSystem.InvalidOperationExceptionが発生する var bytes = await new HttpClient().GetByteArrayAsync($"https://jlp.yahooapis.jp/FuriganaService/V1/furigana?appid={appId}&grade={grade}&sentence={Uri.EscapeUriString(sentence)}"); var str = Encoding.UTF8.GetString(bytes); var xml = XElement.Parse(str); var ns = xml.GetDefaultNamespace(); Console.WriteLine("■ローマ字"); foreach (var word in xml.Element(ns + "Result").Element(ns + "WordList").Elements(ns + "Word")) { Console.WriteLine(word.Element(ns + "Roman")?.Value); if (word.Element(ns + "SubWordList")?.HasElements ?? false) { foreach (var subWord in word.Element(ns + "SubWordList").Elements(ns + "SubWord")) { Console.WriteLine($"\t{subWord.Element(ns + "Roman")?.Value}"); } } } Console.WriteLine("■ひらがな"); foreach (var word in xml.Element(ns + "Result").Element(ns + "WordList").Elements(ns + "Word")) { Console.WriteLine(word.Element(ns + "Furigana")?.Value); if (word.Element(ns + "SubWordList")?.HasElements ?? false) { foreach (var subWord in word.Element(ns + "SubWordList").Elements(ns + "SubWord")) { Console.WriteLine($"\t{subWord.Element(ns + "Furigana")?.Value}"); } } } }
Ⅲ. 出力