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

Swift初心者がJSON解析をやってみる

JSON解析ってかっこいい響き!

JSON解析って言葉かっこいい。賢そう!
APIとかもよく分からない。そんなswift歴1週間の私がSwiftを使ってJSON解析をやりますよ〜
ここではpixabayってサイトから画像を取ってきます。

pixabayでAPIの仕様書を確認しよう。

pixabay←こちらどす
サインアップする必要があります。

image.png

右上のExploreってとこからAPIってとこ押すと、

image.png

こんなのが出るからGetStartedを押しちゃう

スクリーンショット 2020-07-24 18.58.22.png
ちょっとしたにスクロールするとkeyと書かれているのがある。APIを叩く時にはここのkeyを指定してアクセスする必要がある。

image.png

APIを叩いて返ってくるJSONはこんな感じ。13行目のWebFormatURLがお目当ての画像のURL。こいつをもらうよ!

準備からはじめよう

まずは準備から。cocoapodというものをインストールする。
https://qiita.com/ShinokiRyosei/items/3090290cb72434852460
そして、Alamofire, SwiftyJSON, SDWebImageをcocoaposdを使ってインストールしましょう。

じゃあ実際にコード書こうね。

//画像を扱うのもあってこいつらをインポートするぜ!
import UIKit
import Alamofire
import SwiftyJSON
import SDWebImage
import Photos

class ViewController: UIViewController {
    //テキストフィールド。ここに入れたキーワードに関する画像を取得するぜ!
    @IBOutlet weak var searchTextField: UITextField!
    //画像を表示するイメージビュー
    @IBOutlet weak var imageView: UIImageView!

    //テキストフィールドに文言を入れてボタンをポチッとやった時。入力された文言で検索した画像を取得するよん
    @IBAction func searchAction(_ sender: Any) {
        if searchTextField.text == "" {
            //何も文言が入っていなかった時、一旦dogで検索するよ。
            getImages(keyword: "dog")
        } else {
            //文言が入っていたらそのキーワードで画像を取得してくるわ!
            getImages(keyword: searchTextField.text!)
        }    
    }

    //検索キーワードをもとに画像を取得するメソッドを読んでる。
    func getImages(keyword: String) {
        //ここにアクセスしたら画像あげるよ!!っていうURLをここに書く。sampleって書いてあるところはkeyで置き換えてくれよな!
        let url = "https://pixabay.com/api/?key=sample=\(keyword)"
        //Alamofireを使ってAPIリクエストを出す。Alamofireについては詳しくは知らない。
        //下のAFはAlmofireの略。このurlに対してGETメソッドでJSON形式でリクエストするで!っていってる(多分)。そんで返ってきたレスポンスに対する処遇をクロージャーで記述する!
        AF.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON {(response) in
            switch(response.result) {
            //API通信成功した時〜
            case.success:
                //返ってきたJSONを変数にぶち込むで!
                let json:JSON = JSON(response.data as Any)
                //JSONの中から欲しい情報だけ抽出
                var imageString = json["hits"][0]["webformatURL"].string
                //画面に表示しまっせ。
                self.imageView.sd_setImage(with: URL(string: imageString!), completed: nil)
            //失敗した時〜
            case.failure(let error):
                //失敗したらエラー文が返ってくるのでそれを表示しちゃう。
                print(error)
            }
        }
    }
}
Furuta03
Wi-Fiと空調と餃子が好き。
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
ユーザーは見つかりませんでした