4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【swift5】漢字をひらがなにするAPIを使ってアプリ作ってみた

Last updated at Posted at 2020-01-12

今回はAPIを使用してテキストフィールドに入力した漢字を平仮名にするといったものです。

OpenWeatherのAPIを使って天気予報のアプリを作ることはできたのですが、あれは位置情報を取得して自動的に天気をGETするというシンプルなものだったので今回はPOSTしたものをAPIを使って編集するといったものを作成しようと思いました。

文字にするとすごく簡単に見えるのですがとても大変でした。。。

Githubにソースをアップしているので全体像を知りたい方はこちらから

説明

ひらがなAPIキーの取得

gooさんのひらがなAPIというのを使用しました。

APIキーを以下から取得してください。

ソース

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var convertText: UITextField!
    @IBOutlet weak var convertedText: UILabel!
    @IBOutlet weak var errorText: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func convertButton(_ sender: Any) {
        
        let convertTextForApi = convertText.text!
        
        if convertTextForApi == "" {
            errorText.text = "漢字を入力してください。"
            return
        } else {
            errorText.text = ""
        }
    
        // URLRequstの設定
        var request = URLRequest(url: URL(string: "https://labs.goo.ne.jp/api/hiragana")!)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        //POSTするデータをURLRequestに持たせる
        let postData = PostData(app_id: "xxxxxxxxxxxxxxxxxxxxxxx", request_id: "record003", sentence: convertTextForApi, output_type: "hiragana")
        guard let uploadData = try? JSONEncoder().encode(postData) else {
            print("json生成に失敗しました")
            return
        }
        request.httpBody = uploadData
        //APIへPOSTしてresponseを受け取る
        let task = URLSession.shared.uploadTask(with: request, from: uploadData) {
            data, response, error in
            if let error = error {
                print ("error: \(error)")
                return
            }
            guard let response = response as? HTTPURLResponse,
                (200...299).contains(response.statusCode) else {
                    print ("server error")
                    return
            }
            if response.statusCode == 200 {
                guard let data = data, let jsonData = try? JSONDecoder().decode(Rubi.self, from: data) else {
                    print("json変換に失敗しました")
                    return
                }
                print(jsonData.converted)
                DispatchQueue.main.async {
                    self.convertedText.text = jsonData.converted
                }
            } else {
                print("サーバエラー ステータスコード: \(response.statusCode)\n")
            }
        }
        task.resume()
    }
}

struct Rubi:Codable {
    var request_id: String
    var output_type: String
    var converted: String
}
struct PostData: Codable {
    var app_id:String
    var request_id: String
    var sentence: String
    var output_type: String
}

storyboard

スクリーンショット 2020-01-12 16.19.29.png

シンプルなUIになっています。

テキストボックスで漢字を入力すると「変換後のテキスト」の部分に入力した漢字が平仮名になって返ってきます。

ちなみに何も入力せずに「変換!」をクリック(タップ)をするとエラーが表示されます。

GIF

圧縮したらなんかゆっくりになったけど笑

10emd-y9ykc.gif

参考URL

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?