curl入門 - GET編

## はじめに
curlはCLIでHTTPリクエストなどを実行するためのコマンドです。
 [curl公式HP](https://curl.haxx.se/) 

いろいろできるcurlですが、今回はHTTPリクエストの`GET`に絞って書いていきます。
仕事でAPIレスポンスを確認する作業があったので、それの備忘録も兼ねてます。

コマンドの挙動は[ShangriLaAnime API Server](https://github.com/Project-ShangriLa/sora-playframework-scala)を使わせていただきながら確認しました。

## 基本コマンド
まずは2019年3期のアニメタイトルを取得してみます。
やり方は、curlコマンドの引数にAPIのリクエストURLを持たすだけ。

```
curl 'http://api.moemoe.tokyo/anime/v1/master/2019/3'
```

以下はレスポンス。長いので途中以降は省略してます。

```
[{"id":972,"title":"アグレッシブ烈子 シーズン2","title_short1":"アグレッシブ烈子","title_short2":"","title_short3":"","public_url":"https://www.netflix.com/jp/title/80198505","twitter_account":"retsuko_sanrio","twitter_hash_tag":"アグレッシブ烈子","cours_id":0,"created_at":"2019-06-30T14:03:33Z","updated_at":"2019-06-30T14:03:33Z","sex":0,"sequel":0,"city_code":0,"city_name":"","product_companies":"ファンワークス"},{"id":973,"title":"7SEEDS","title_short1":"7SEEDS","title_short2":"","title_short3":"","public_url":"http://7seeds.jp/","twitter_account":"7SEEDS_anime","twitter_hash_tag":"7seeds","cours_id":0,"created_at":"2019-06-30T14:03:33Z","updated_at":"2019-06-30T14:03:33Z","sex":0,"sequel":0,"city_code":0,"city_name":"","product_companies":"GONZO"},
...続く
]
```

返ってきた。簡単ですね。

### jqを使う

curlだけだとレスポンスが平文なので、jsonを整形してくれる[jq](https://stedolan.github.io/jq/manual/)というライブラリを使います。

まずはHomebrewでインストール。

```
brew install jq
```

Homebrewを使用してない場合は、jqの[ダウンロードページ](https://stedolan.github.io/jq/download/)を確認してください。

インストールできたら、curlコマンドの末にjqコマンドを追加します。

```
curl 'http://api.moemoe.tokyo/anime/v1/master/2019/3' | jq .
```

`jq .`の`.`はrootの意味で、要するにレスポンス全部整形するよ、という感じです。
ここを`jq '.items.name'`とか様々な指定の仕方ができるんですが、詳細は公式HPや他記事をご参考ください。

※参考:[jq コマンドを使う日常のご紹介 - Qiita](https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af)

以下レスポンスです。

```
[
  {
    "id": 972,
    "title": "アグレッシブ烈子 シーズン2",
    "title_short1": "アグレッシブ烈子",
    "title_short2": "",
    "title_short3": "",
    "public_url": "https://www.netflix.com/jp/title/80198505",
    "twitter_account": "retsuko_sanrio",
    "twitter_hash_tag": "アグレッシブ烈子",
    "cours_id": 0,
    "created_at": "2019-06-30T14:03:33Z",
    "updated_at": "2019-06-30T14:03:33Z",
    "sex": 0,
    "sequel": 0,
    "city_code": 0,
    "city_name": "",
    "product_companies": "ファンワークス"
  },
  {
    "id": 973,
    "title": "7SEEDS",
    "title_short1": "7SEEDS",
    "title_short2": "",
    "title_short3": "",
    "public_url": "http://7seeds.jp/",
    "twitter_account": "7SEEDS_anime",
    "twitter_hash_tag": "7seeds",
    "cours_id": 0,
    "created_at": "2019-06-30T14:03:33Z",
    "updated_at": "2019-06-30T14:03:33Z",
    "sex": 0,
    "sequel": 0,
    "city_code": 0,
    "city_name": "",
    "product_companies": "GONZO"
  },
 ...続く
]
```

無事返ってきました。見やすいですね。

## ファイルに出力する
レスポンスが多い場合、CLIの画面では見づらいことがあります。
なのでファイルに出力してレスポンスデータを操作しやすくしてみましょう。

使いオプションは`-o`です。

```
curl 'http://api.moemoe.tokyo/anime/v1/master/2019/3' -o response
```

これで`response`という名前のファイルにレスポンスが書き出されました。（ファイルは無ければ作成されます）
エディタ等で操作できて便利ですね。

## まとめ
GETは、以下の書き方すればOK。必要によってjqはつけ外ししましょう。

```
curl 'http://api.moemoe.tokyo/anime/v1/master/2019/3' | jq .
```

他にもオプションがたくさんあるので、公式HPや[curl コマンド 使い方メモ - Qiita](https://qiita.com/yasuhiroki/items/a569d3371a66e365316f)を参考にしてみてください。

## 参考

[curl公式HP](https://curl.haxx.se/) 
[jq公式HP](https://stedolan.github.io/jq/manual/)
[curl コマンド 使い方メモ - Qiita](https://qiita.com/yasuhiroki/items/a569d3371a66e365316f)
[jqコマンドでjsonを扱う - Qiita](https://qiita.com/tomitz/items/f48a6bfae1123cadc69a)
[ShangriLaAnime API Server](https://github.com/Project-ShangriLa/sora-playframework-scala)