LoginSignup
1
5

More than 5 years have passed since last update.

Yahoo apiを利用してルビを振る

Last updated at Posted at 2017-06-15

YahooAPIを利用してルビを振る

 YahooAPIに文字を送ると平仮名などをつけてXMLで返すAPIがある。XMLであってJSONはないので、クロスドメイン制限があり使いづらい。

YQLを利用してクロスドメイン制限を回避

ルビ振りAPI(Yahoo! API使用)を試すではYQLを利用してクロスドメイン制限を回避している。

このプログラムでは漢字が含まれている文章を開いてひらがなの文章に変えている。このプログラムを少し変えてみる、具体的には

  • 漢字にルビをふる
  • ルビの種類をHTML、青空文庫、PIXIV、でんでんマークダウンと選ぶ
  • 漢字にルビをふるレベルを小学校から一般レベルまでを選択

文字にルビをふる
ルビ振りAPIではXMLなのでクロスドメイン制限を回避するためにYQLを利用している。ただ、GETリクエストしかできず文字数制限が厳しい。

ルビ振りAPIの仕様

「漢字かな交じり文にふりがなを振ること。」をAPIにリクエストすると次のようなXMLを返す。

<?xml version="1.0" encoding="UTF-8"?>
<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>kanzi</Roman>
      </Word>
      <Word>
        <Surface>かな交じり</Surface>
        <Furigana>かなまじり</Furigana>
        <Roman>kanamaziri</Roman>
        <SubWordList>
          <SubWord>
            <Surface>かな</Surface>
            <Furigana>かな</Furigana>
            <Roman>kana</Roman>
          </SubWord>
          <SubWord>
            <Surface></Surface>
            <Furigana></Furigana>
            <Roman>ma</Roman>
          </SubWord>
          <SubWord>
            <Surface>じり</Surface>
            <Furigana>じり</Furigana>
            <Roman>ziri</Roman>
          </SubWord>
        </SubWordList>
      </Word>
      <Word>
        <Surface></Surface>
        <Furigana>ぶん</Furigana>
        <Roman>bun</Roman>
      </Word>
      <Word>
        <Surface></Surface>
      </Word>
      <Word>
        <Surface>ふりがな</Surface>
      </Word>
      <Word>
        <Surface></Surface>
      </Word>
      <Word>
        <Surface>振る</Surface>
        <Furigana>ふる</Furigana>
        <Roman>huru</Roman>
        <SubWordList>
          <SubWord>
            <Surface></Surface>
            <Furigana></Furigana>
            <Roman>hu</Roman>
          </SubWord>
          <SubWord>
            <Surface></Surface>
            <Furigana></Furigana>
            <Roman>ru</Roman>
          </SubWord>
        </SubWordList>
      </Word>
      <Word>
        <Surface>こと</Surface>
      </Word>
      <Word>
        <Surface></Surface>
      </Word>
    </WordList>
  </Result>
</ResultSet>

WSHのJScriptでYahooAPIにリクエストを送る

 POSTリクエストを可能にするために、ブラウザではなくWSHでJScriptを使って行う。
https://github.com/kyukyunyorituryo/add_ruby

XMLHttpRequest
JScriptでHTTPアクセス - Qiita
XMLのパース
JScriptでDOM(XML)操作 - Qiita
を参考にして作っている。

「漢字」「かんじ」であれば、Surface とFuriganaを連結すればいいが。かな交じりの場合はSubwordの方を見る必要がある。SubwordがあればSubwordの方を見に行く。Subwordの個数は決まっていないので個数の分だけ処理するようにしている。

    for (var i = 0; i < elements.length; i++) {
        // エレメント取得
        var element = elements[i];
        // 子取得
        var child = element.childNodes;
        switch (element.childNodes.length) {
            case 1: str += child[0].text; break;
            case 3:
                if (child[0].text == child[1].text) {
                    str += child[0].text;
                } else {
                    str += ruby[r][0] + child[0].text + ruby[r][1] + child[1].text + ruby[r][2];
                } break;
            case 4: var subwords = child[3].childNodes;
                for (var j = 0; j < subwords.length; j++) {
                    var subword = subwords[j];
                    var subchild = subword.childNodes;
                    switch (subchild.length) {
                        case 1: str += subchild[0].text; break;
                        case 3:
                            if (subchild[0].text == subchild[1].text) {
                                str += subchild[0].text;
                            } else {
                                str += ruby[r][0] + subchild[0].text + ruby[r][1] + subchild[1].text + ruby[r][2];
                            }
                            break;

                    }
                }
                break;
        }
    }
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5