SwiftでApple Music APIを使用した際の備忘録

**Apple Music API**を使用して、アーティストやアルバムの検索を行うコードを実装してみました。下記の記事を参考に実装しましたが、つまづいた点がいくつかあったので、備忘録としてこの記事を書きました。

- [[iOS 11] Apple Music APIにアクセスするために必要な作業について #WWDC17](https://dev.classmethod.jp/articles/ios-11-apple-music-api-intro/)
- [[iOS 11] Apple Music APIを使用してアルバム検索アプリを作る](https://dev.classmethod.jp/articles/ios-11-apple-music-api-search/)


#目次
- 環境
- Developer Tokenの準備でつまづいたポイント①Big Sur環境でのpyenv install
- Developer Tokenの準備でつまづいたポイント②music_token.pyの実行
- Apple Music APIへのアクセスの実装
- まとめ

##環境
- macOS Big Sur11.4
- Xcode12.5.1
- iOS14.5

##Developer Tokenの準備でつまづいたポイント①Big Sur環境でのpyenv install
Apple Music APIにアクセスする為には、**Developer Token**と呼ばれるトークンを発行する必要があります。今回は上記の記事にある通り、**apple-music-token-generator**を使ってトークンを発行してみました。(詳細な手順は上記の記事をご覧ください。)

事前準備として**pip**のインストールが必要でしたが、自分の端末はPythonのバージョンが低かった為(2.7.16でした)、`python get-pip.py`が実行できず、Pythonのバージョンを3系に上げる必要がありました。

そこで[こちらの記事]((https://qiita.com/Ajyarimochi/items/ff40e57d082dd171e761))を参考に試してみましたが、`pyenv install`のところでエラーになってしまい、3系のPythonのインストールが出来ませんでした。

調べてみたところ、**Big Surでは`pyenv install`が上手く動作しない事がある様でした。**
解決策として下記の記事が非常に参考になりました。
- [macOS Big Sur にアップグレードした後にpyenv installできなくなった際の私の場合の解決方法](https://qiita.com/hisa_shim/items/abb4936f1f676fe6a7b8)
- [unable to install python 3.8.0 on macox 11 #1740](https://github.com/pyenv/pyenv/issues/1740)

ちなみに、インストールが無事完了した後のPythonの切り替えは[こちら](https://qiita.com/mckyhrs/items/94a2db3506287df0420e)を参考にしました。

##Developer Tokenの準備でつまづいたポイント②music_token.pyの実行
こちらはちょっとした事ですが、**music_token.py**を実行すると「print文の括弧がないよ！」的なエラーになるので、下記の通り修正してから実行しました。

これを

```
print "----TOKEN----"
print token
```


こんな感じにして実行しました。(もしかしたら修正せずに実行する方法があるのかも知れませんが、私は分かりませんでした...。)

```
print("----TOKEN----")
print(token)
```

##Apple Music APIへのアクセスの実装
実際のコードはこんな感じです。書き方はこちらの記事が非常に参考になりました。

- [Apple Music APIを使用したアーティト名検索を行いたい](https://teratail.com/questions/193282)

```
import UIKit
import Alamofire
import SwiftyJSON

class AppleMusicManager {
    let header: HTTPHeaders = [
        "Authorization" : "Bearer {ここにDeveloper Tokenを入れる}"
    ]
    let baseUrl = "https://api.music.apple.com/v1/catalog/jp/search" 
    let parameters = ["term": "bump", "limit": "10", "types": "albums"] // 今回は"bump"で検索したが、検索ワードは任意のものを設定する
    
    func searchAlbum() {
        AF.request(self.baseUrl, method: .get, parameters: self.parameters, encoding: URLEncoding.default, headers: header)
            .responseJSON { responce in
                switch responce.result {
                case .success:
                    if let object = responce.value {
                        let json = JSON(object)
                        print("成功したよ: \(json)")
                    }
                case .failure(let error):
                    print("エラーだよ\(error)")
            }
        }
    }
}

```

何度かエラーになりましたが、

- Developer Tokenの前に半角スペースを入れる。
- Alamofireを使用する際は、`Alamofire.request(...)`と記載している記事が多かったが、自分の場合はメソッドが上手く見つからず、` AF.request(...)`という書き方にしたら上手くいった。(参考：[Module 'Alamofire' has no member named 'request'](https://stackoverflow.com/questions/28549832/module-alamofire-has-no-member-named-request)
)

等を試してみたら正常にレスポンスが返却される様になりました。

##まとめ
Apple Music APIをいざ実装してみると、思っていたよりも調べることが沢山ありました。
この記事が少しでもApple Music APIを実装してみたいと思っている方の手助けになれば幸いです。