curlコマンドでnoteからデータを取得してみる

はじめに

使い方を公式で説明しているわけではないが、noteにはAPIがあるみたい。

【2020年度】noteのAPI一覧【完全版】

curlコマンドの使い方を学ぶついでに、noteに投稿されている記事のタイトルを取得してみる。

curlコマンドとjqコマンド


$ curl --version
curl 7.64.1

$ jq --version
jq-1.6

curlコマンドでnoteの、特定ユーザの記事タイトルを取得してみる

img2020/12/17当時

$ curl https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1

?と&をエスケープするため、\を入れている。


{"data":{"contents":[{"id":24798670,"type":"TextNote","status":"published","name":"テストタイトル2","description":null,"price":0,"key":"n4551d7093a0b","slug":"slug-n4551d7093a0b","publishAt":"2020/12/17 13:17","thumbnailExternalUrl":"","eyecatch":null,"user":{"id":3414203,"name":"こな","urlname":"kypowder","nickname":"こな","userProfileImagePath":"https://assets.st-note.com/production/uploads/images/31550000/profile_f1ad3c646727d3424b996812d90901f0.jpg?fit=bounds\u0026format=jpeg\u0026quality=45\u0026width=330","customDomain":null,"disableSupport":false,"likeAppealText":null,"likeAppealImage":null,"purchaseAppealTextNote":null,"twitterNickname":"YoKaU2"},"canRead":true,"isAuthor":false,......

見やすくするためにjqコマンドをパイプでつなげる。


$ curl https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq
imgjqをパイプでつなげた

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4473    0  4473    0     0  20612      0 --:--:-- --:--:-- --:--:-- 20612

↑ 最初の数行に表示される転送情報をスキップしたい場合、-sオプションを追加する。

しかし、エラー情報まで消えてしまうので、-Sも追加しとく。


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq

オブジェクトの部分抽出


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data"
imgdataの中身を抽出

data{

}

の中を抽出できた。

配列を抽出する場合、


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents"

とすることで

img.contentsの中身を抽出

配列に対して、.xxは適応できないので、.[]を使う。


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents[]"
img.で、外側の配列を取り除く

一番外側にある配列を除去してくれる。

.contents | .[]としなくても.contents[]で繋げられる。

".data.contents[]"でもいける。


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq ".data | .contents[] | .name"

オブジェクトになったので.xxで指定することで、

img

投稿記事のタイトルのみを抽出できた。

これをさらに整形することもでき、


$ curl -Ss https://note.com/api/v2/creators/kypowder/contents\?kind=note\&page=1 | jq "{title: [.data | .contents[].name]}"

とすることで、

img

いい感じに作り直すこともできる。

参考情報

curl コマンド 使い方メモ

jqを活用してAPIレスポンス等から欲しい情報だけを抽出する【初級編】

【2020年度】noteのAPI一覧【完全版】

IT