概要
Qiita API v2を利用して記事を投稿するのに、ハマったのでメモ。
アクセストークン
投稿するにはQiitaのアクセストークンが必要になります。
Qiitaにログインしているなら下記URLから登録ができます。
https://qiita.com/settings/tokens/new
スコープは「read_qiita」と「write_qiita」が必要になります。
POSTで投稿する
ヘッダーでAuthorization
とContent-Type
を渡して上げましょう。[Qiitaのアクセストークン]
は置き換えてください。
ハマりポイントはtags
の指定方法でしょうか。サイトからの投稿もタグ必須ですので、APIからの投稿でも必要になります。versions
は指定しなくても投稿できました。
> curl -v -X POST "https://qiita.com/api/v2/items" \ -H "Authorization: Bearer [Qiitaのアクセストークン]" \ -H "Content-Type: application/json" \ -d "{\"body\": \"# テスト\",\"private\": true,\"title\": \"テスト\",\"tags\":[{\"name\": \"hoge\",\"versions\": []}]}" {"rendered_body": (略)
JSONは整形すると、こんな感じです。パラメータの詳細は公式をご参考ください。
Qiita API v2ドキュメント – Qiita:Developer
https://qiita.com/api/v2/docs
{ "body": "# テスト", "private": true, "title": "テスト", "tags":[ { "name": "hoge", "versions": [] } ] }
投稿に成功すると記事情報がJSON形式で返ってきます。
パラメータに間違いがあった場合はステータスコードが500
でエラーになります。4xx
でお知らせしてくれません。悲しい。
なので、-i
や-v
オプションを付けて、ステータスコードを確認しましょう。
GETで記事を取得する
こちらはシンプルです。もしviewsが欲しい場合には、ヘッダーでAuthorization
を渡す必要があります。(自分の記事に限る)
> curl -v "https://qiita.com/api/v2/items/[記事のID]" {"rendered_body": (略)
PATCHで記事を更新する
記事を更新する場合は、PATCH
メソッドです。PUT
メソッドはありません。title
とbody
が必須項目みたいで、tags
などは省略しても更新してくれます。
curl -v -X PATCH "https://qiita.com/api/v2/items/[記事のID]" \ -H "Authorization: Bearer [Qiitaのアクセストークン]" \ -H "Content-Type: application/json" \ -d "{\"body\": \"# テスト2\",\"private\": true,\"title\": \"テスト2\"}"
DELETEで記事を削除する
ほんとに記事が削除されるので、お試しにはご注意ください。
> curl -v -X DELETE "https://qiita.com/api/v2/items/[記事のID]" \ -H "Authorization: Bearer [Qiitaのアクセストークン]" \
ポイント?としては削除後に、削除した記事にアクセスすると500
エラーになるってことでしょうか。なぜだろう?
まとめ
間違ったパラメータ指定をした場合に、500
エラーでしか返ってこないので、ハマると大変な感じでした。
参考
Qiita API v2ドキュメント – Qiita:Developer
https://qiita.com/api/v2/docs
Qiita api v2の投稿ができない
https://teratail.com/questions/5212