概要

Qiita API v2を利用して記事を投稿するのに、ハマったのでメモ。

アクセストークン

投稿するにはQiitaのアクセストークンが必要になります。

Qiitaにログインしているなら下記URLから登録ができます。

https://qiita.com/settings/tokens/new

スコープは「read_qiita」と「write_qiita」が必要になります。

POSTで投稿する

ヘッダーでAuthorizationContent-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 メソッドはありません。titlebody が必須項目みたいで、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

元記事はこちら

Qiita API v2を利用してcurlで投稿してみた