6月 212023
https://developer.yahoo.co.jp/webapi/jlp/furigana/v2/furigana.html
https://developer.yahoo.co.jp/webapi/jlp/sample/sample10.html
yahoo さんの API で 漢字にルビを振ってくれるAPIがありこれを使ってみます。
Andorid Text to Speech が日本語だとかなりへんてこりんな読み方をするので、漢字にルビを振って利用します。
import 'dart:convert'; import 'package:http/http.dart' as http; Future<List<String>> getFurigana(String text, String appId) async { final apiUrl = Uri.parse('https://jlp.yahooapis.jp/FuriganaService/V2/furigana'); final requestBody = jsonEncode({ 'id': '1', 'jsonrpc': '2.0', 'method': 'jlp.furiganaservice.furigana', 'params': { 'q': text, 'grade' : 1 }, }); final response = await http.post(apiUrl, headers: {'Content-Type': 'application/json', 'User-Agent': 'Yahoo AppID: $appId'},body: requestBody); // print(response.body); final jsonData = jsonDecode(response.body); final wordList = jsonData['result']['word'] as List<dynamic>; // print(wordList); List<String> textList = []; String _text = ''; for (var word in wordList) { var singleWord = word.containsKey('furigana') ? word['furigana'] : word['surface']; _text += singleWord; print (_text); // 改行文字を比較 if (singleWord == '\n') { textList.add(_text); _text = ''; } } return textList; } void main() async { const appId = ''; // 自分のアプリケーションIDに置き換えてください const text = ''' 私はケンです。 私は学生です。 私は旅行者です。 '''; final furiganaText = await getFurigana(text, appId); print(furiganaText); }
// 結果 [わたしはケンです。 , わたしはがくせいです。 , わたしはりょこうしゃです。 ]
response の json がいまいち直感的でない感じでした。
ChatGPT さんに相談しながら作りました。