コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
<ResultSet xmlns="urn:yahoo:jp:jlp:FuriganaService" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:jp:jlp:FuriganaService https://jlp.yahooapis.jp/FuriganaService/V1/furigana.xsd">
<Result>
<WordList>
<Word>
<Surface>山田</Surface>
<Furigana>やまだ</Furigana>
<Roman>yamada</Roman>
</Word>
<Word>
<Surface>太郎</Surface>
<Furigana>たろう</Furigana>
<Roman>tarou</Roman>
</Word>
</WordList>
</Result>
</ResultSet>
using System.Threading.Tasks;
using System.Xml;
using System.IO;
using System.Net;
public static class YahooAPI
{
private const string FuriganaUrl = "https://jlp.yahooapis.jp/FuriganaService/V1/furigana";
public static async Task<string> GetPhonetic(string accountId, string kanji)
{
string result = String.Empty;
try
{
//HttpWebRequestを用いた接続例
var request = HttpWebRequest.Create(FuriganaUrl + "?appid=" + accountId + "&sentence=" + System.Net.WebUtility.UrlEncode(kanji)) as HttpWebRequest;
request.Method = "GET";
request.Accept = "*/*";
using (HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse)
{
Stream stream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
result = reader.ReadToEnd();
}
}
//取得したXMLファイルからふりがなのフィールドを抜き出して連結する
string furigana = await Task.Run(() =>
{
//XMLをLinqで取得する方法
//var doc = XDocument.Parse(result);
//IEnumerable<string> furiganaList = from w in doc.Descendants("Word")
// select w.Attribute("Furigana").Value;
//XMLから取得できたふりがなリストの文字列を連結する
//return String.Join("", furiganaList);
//Linqでうまく取得できないため
//XmlReaderでループして読み取る
string ret = String.Empty;
using (XmlReader reader = XmlReader.Create(new StringReader(result)))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
if (reader.Name == "Furigana" &&
reader.Read() && //進む
reader.HasValue)
{
ret += reader.Value;
}
break;
}
}
}
return ret;
});
return furigana;
}
catch (System.Net.Http.HttpRequestException hre)
{
System.Diagnostics.Debug.WriteLine(hre.Message + System.Environment.NewLine + hre.StackTrace);
return String.Empty;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
return String.Empty;
}
}
}
this.txtFirstName.Completed += (async (s, e) =>
{
this.txtFirstNameKana.Text = await YahooAPI.GetPhonetic("YahooAppId", this.txtFirstName.Text);
});
this.txtLastName.Completed += (async (s, e) =>
{
this.txtLastNameKana.Text = await YahooAPI.GetPhonetic("YahooAppId", this.txtLastName.Text);
});
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。