Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

YahooAPIを利用してルビを振る

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

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

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

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

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

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

ルビ振りAPIの仕様

https://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html

「漢字かな交じり文にふりがなを振ること。」を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;
        }
    }
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした