SwiftでWordPressの各記事のアイキャッチ画像URLを取得

## WordPress REST APIについて

WordPress REST APIでWordPressの記事情報をJSONで受け取る。

基本となるURLはこれ。

> http://◯◯◯.◯◯/wp-json/wp/v2/posts

ただこのURLだとWordPressの表示設定で設定した記事数分しか表示されないし上限は100記事。

このURLにパラメーターを付けることで、取得できる記事の数やアイキャッチ画像情報などをカスタマイズできる。

例えばこれ。

> https://◯◯◯.◯◯/wp-json/wp/v2/posts?per_page=15&page=\1&_embed=1

これは1ページあたり15記事の情報があるJSONの1ページ目＆アイキャッチ画像を追加という意味。

JSONを見やすくしたい時はこちらがおすすめ。

https://tools.m-bsys.com/development_tooles/json-beautifier.php


## SwiftでWordPress REST APIのJSON情報を受け取る

使うライブラリは「Alamofire」と「SwiftyJSON」

ライブラリの導入については他の記事を御覧ください。

https://qiita.com/ShinokiRyosei/items/3090290cb72434852460

適当なファイルに以下の記事を書く。

```swift
    func getArticles() {
        
        AF.request("https://◯◯◯.◯◯/wp-json/wp/v2/posts?per_page=15&page=\(self.count)&_embed=1").responseJSON { response in
        
            guard let data = response.data else {
                return
            }
            do {
                var articleinfo: [ArticleModel] = try JSONDecoder().decode([ArticleModel].self, from: data)
                
                if let jsonObject = response.value {
        
                        let json = JSON(jsonObject)
                        for i in 0..<json.count {
                            let array = json[i]
                            //記事のURL
                            let link = array["link"].stringValue

                            //アイキャッチ画像のURL
                            var thumbnailURL = array["_embedded"]["wp:featuredmedia"][0]["media_details"]["sizes"]["medium"]["source_url"].stringValue
                            //記事によって読み取れない場合があるので代替手段
                            if thumbnailURL == "" {
                                thumbnailURL = array["_embedded"]["wp:featuredmedia"][0]["source_url"].stringValue
                            }
                            //取得したアイキャッチ画像URLをprint
                            print(thumbnailURL)                            
                        }
                    } 
                //ページング用変数の数字を増やす               
                self.count += 1
            } catch let error {
                print("ERROR: \(error)")
            }
        }
    }

```

アイキャッチ画像のURLの場所は複雑なので見つけるのが割と大変。
＊今回取得した画像はmediumで300×200の長方形画像。
＊WordPressテーマによって異なる場合もある。

count変数をパラメーターに入れておくことでページングを繰り返し処理できる。

ここでは書いていないが、ページングが終了したときには繰り返し処理を終了させると良いかも。

画像のサイズの種類を変えたい人は以下のJSONを参考に。

```json

"medium": {
	"file": "◯◯◯◯◯◯.jpeg",
	"width": 300,
	"height": 200,
	"mime_type": "image/jpeg",
	"source_url": "◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯.jpeg"
},
"large": {
	"file": "◯◯◯◯◯◯.jpeg",
	"width": 1024,
	"height": 683,
	"mime_type": "image/jpeg",
	"source_url": "◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯.jpeg"
},
"medium_large": {
	"file": "◯◯◯◯◯◯.jpeg",
	"width": 768,
	"height": 512,
	"mime_type": "image/jpeg",
	"source_url": "◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯.jpeg"
},
"full": {
	"file": "◯◯◯◯◯◯.jpeg",
	"width": 1300,
	"height": 867,
	"mime_type": "image/jpeg",
	"source_url": "◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯.jpeg"
}

```

正直iPhone対象なら、fullほど大きなファイルは読み込みに時間がかかるだけで要らない気もします。

また使用しているWordPressテーマによっては画像のサイズや縦横比の種類項目が増えていることもあるので適宜活用してみると良いかもしれません。

## 参考記事

https://qiita.com/HarukaNishiyama/items/be4b0f45d427c8c14119

## Swiftのお役立ち情報

https://wagtechblog.com/programing/swift-iphone-application-school

https://wagtechblog.com/programing/swift-textbook.html