3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

QiitaAPIでCRUD with Python3

Last updated at Posted at 2018-03-27

概要

Qiita APIをPythonからリクエストして記事の作成・読込・更新・削除をするソースを記載

実行した環境

OS : CentOS7
Version : Python3.6
API : QiitaAPI v2

必要なPythonライブラリ

requestsのみ。以下でインストール。

pip install requests

事前準備

Qiitaのアクセストークン取得する必要あり

Qiitaアクセストークン取得の手順

1.右上のアイコンー>設定ー>アプリケーションー>新しくトークンを発行するを選択
2.read_qiitaとwrite_qiitaにチェックを入れる
3.発行後に表示されるアクセストークンを保存する
(※注意:アクセストークンの再表示不可)

CRUDの各ソースコード

※取得したアクセストークンをxxxxxxxxxxxxxxxxxxxxxxxの部分に記載する

実行方法

各ソースに対してpython ***.pyと実行する

1.投稿作成

create.py
import requests
import json
url = 'https://qiita.com/api/v2/items'
token = 'xxxxxxxxxxxxxxxxxxxxxxx'
headers = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
}
title = 'test Title'
body = 'test Text'
tag = [{'name': 'test'}]
post_data = {
    'body': body,
    'title': title,
    'tags': tag,
}
r = requests.post(url, headers=headers, data=json.dumps(post_data))
print(r)
print(r.text)

2.投稿取得

get.py
import requests
import json
url = 'https://qiita.com/api/v2/items?page=1&per_page=100&query=created%3A%3E2018-02-26'
token = 'xxxxxxxxxxxxxxxxxxxxxxx'
headers = {
      'Authorization': 'Bearer ' + token,
}
r = requests.get(url, headers=headers)
ans = json.loads(r.text)
maxArrayLength = len(ans)
for j in range(0,maxArrayLength):
   print( str(ans[j]["id"])  +  ":" + str(ans[j]["user"]["organization"]))

※投稿は1ページ当たり(per_page)100件が限界。101件目を見たい場合、page=2にする
※queryで抽出条件を記載することが可能

3.投稿更新(POSTではなくPATCH)

update.py
import requests
import json
qid = 'yyyyyyyyyyyy'
url = 'https://qiita.com/api/v2/items/{}'.format(qid)
token = 'xxxxxxxxxxxxxxxxxxxxxxx'
headers = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
}
title = 'update Title'
body = 'update Text'
tag = [{'name': 'test'}]
post_data = {
    'body': body,
    'title': title,
    'tags': tag,
}
r = requests.patch(url, headers=headers, data=json.dumps(post_data))
print(r)
print(r.text)

※yyyyyyyyyyyyは、更新したい記事ID(URLの最後に記載されている英数字)を入力

4.投稿削除

delete.py
import requests
import json
qid = 'yyyyyyyyyyyy'
url = 'https://qiita.com/api/v2/items/{}'.format(qid)
token = 'xxxxxxxxxxxxxxxxxxxxxxx'
headers = {
    'Authorization': 'Bearer ' + token,
    'Content-Type': 'application/json'
}

r = requests.delete(url, headers=headers)
print(r)
print(r.text)

※yyyyyyyyyyyyは、削除したい記事ID(URLの最後に記載されている英数字)を入力

(参考)QiitaAPIの公式ドキュメント

※Python3の文字コード問題

CentOSで実行すると以下のメッセージが表示されることがある

UnicodeEncodeError: 'ascii' codec can't encode character

・対応方法
まず以下のコマンドで文字コードを確認

 echo $LANG

Cと返ってくる場合、言語設定をja_JP.utf8に修正する必要がある

localectl set-locale LANG=ja_JP.utf8

上記コマンドを実行して言語設定をja_JP.utf8に変更して一度再起動

※参考:https://qiita.com/toshihikoyanase/items/47407551d8f3d4e8c39a

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?