9
5

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 3 years have passed since last update.

プリザンターAPIモジュール(Python)

Last updated at Posted at 2021-07-17

#はじめに#
プリザンターのAPIで頻繁に使う「単一レコード取得」「複数レコード取得」「レコード作成」「レコード更新」をモジュール化したので公開します。(言語はPythonです)

#モジュール#

ModPleasanter.py
import requests
import json

"""
関数:getRecord
引数:baseUrl	str - Pleasanter APIのベースURL
	  recordId	str - PleasanterのレコードID
	 apiKey	str - Pleasanter APIのKEY
返値:辞書のリスト
	 またはHTTPエラーコード
"""
def getRecord(baseUrl, recordId, apiKey):
	# URLを作成
	url = baseUrl + '/' + recordId + '/get'
	
	# APIにリクエストするデータを作成
	payload = {
		"ApiKey": apiKey
	}
	
	# API(複数レコード取得API)にリクエスト
	r_post = requests.post(url,  data=json.dumps(payload), headers={'Content-Type': 'application/json', 'charset': 'UTF-8'})
	
	# HTTPエラーコードを返す
	if r_post.status_code != 200:
		return 'HTTP Error: ' + str(r_post.status_code)
		
	# レスポンスを連想配列に変換
	result = r_post.json()
	
	data = result['Response']['Data'][0]
	#print(data)
	
	# レコード数を返す(エラーの場合はエラーメッセージを返す)
	if result['StatusCode'] == 200:
		return data
	else:
		return 'HTTP Error: ' + str(result['StatusCode'])

"""
関数:getRecords
引数:baseUrl	str - Pleasanter APIのベースURL
	  siteId	str - PleasanterのサイトID
	 apiKey	str - Pleasanter APIのKEY
	 filter	辞書 - ColumnFilterHash
返値:dataまたはエラーメッセージ
"""
def getRecords(baseUrl, siteId, apiKey, filter):
	offset = 0
	pageSize = 200
	totalCount = 1
	records = []
	
	# URLを作成
	url = baseUrl + '/' + siteId + '/get'
	
	while offset < totalCount:
		# APIにリクエストするデータを作成
		payload = {
			"apiKey": apiKey,
			"Offset": offset,
			"View": {
				"ColumnFilterHash": filter
			}
		}
		
		# API(複数レコード取得API)にリクエスト
		r_post = requests.post(url,  data=json.dumps(payload), headers={'Content-Type': 'application/json', 'charset': 'UTF-8'})
		
		# HTTPエラーコードを返す
		if r_post.status_code != 200:
			return 'HTTP Error: ' + str(r_post.status_code)
			
		# レスポンスを連想配列に変換
		result = r_post.json()
		
		# レコード数を返す(エラーの場合はエラーメッセージを返す)
		if result['StatusCode'] == 200:
			# レコード数とページサイズを取得
			totalCount = result['Response']['TotalCount']
			pageSize = result['Response']['PageSize']
			
			# レコードを取得
			for data in result['Response']['Data']:
				records.append(data)
		else:
			return 'HTTP Error: ' + str(result['StatusCode'])
		
		# offsetをインクリメントする
		offset = offset + pageSize
		
	return records

"""
関数:createRecord
引数:baseUrl	str - Pleasanter APIのベースURL
	  siteId	str - PleasanterのサイトID
	 apiKey	str - Pleasanter APIのKEY
	 payload	辞書 - 作成するレコードに登録するデータ
返値:辞書のリスト
	 またはHTTPエラーコード
"""
def createRecord(baseUrl, siteId, apiKey, payload):
	# URLを作成
	url = baseUrl + '/' + siteId + '/create'
	
	# APIにリクエストするデータにAPIキーを追加
	payload['ApiKey'] = apiKey
	
	# API(レコード作成API)にリクエスト
	r_post = requests.post(url,  data=json.dumps(payload), headers={'Content-Type': 'application/json', 'charset': 'UTF-8'})
	
	# HTTPエラーコードを返す
	if r_post.status_code != 200:
		return r_post.status_code
		
	# レスポンスを連想配列に変換
	result = r_post.json()
	
	# HTTPレスポンスコードを返す
	return result['StatusCode']

"""
関数:updateRecord
引数:baseUrl	str - Pleasanter APIのベースURL
	  recordId	str - PleasanterのレコードID
	 apiKey	str - Pleasanter APIのKEY
	 payload	辞書 - 更新するレコードに登録するデータ
返値:辞書のリスト
	 またはHTTPエラーコード
"""
def updateRecord(baseUrl, recordId, apiKey, payload):
	# URLを作成
	url = baseUrl + '/' + recordId + '/update'
	
	# APIにリクエストするデータにAPIキーを追加
	payload['ApiKey'] = apiKey
	
	# API(レコード作成API)にリクエスト
	r_post = requests.post(url,  data=json.dumps(payload), headers={'Content-Type': 'application/json', 'charset': 'UTF-8'})
	
	# HTTPエラーコードを返す
	if r_post.status_code != 200:
		return r_post.status_code
		
	# レスポンスを連想配列に変換
	result = r_post.json()
	
	# HTTPレスポンスコードを返す
	return result['StatusCode']

#使い方#
モジュールには4つのAPIに対応した関数があります:

  • getRecord - 単一レコード取得
  • getRecords - 複数レコード取得
  • createRecord - レコード作成
  • updateRecord - レコード更新

##単一レコード取得##

getRecord.py
import ModPleasanter

baseUrl = 'http://hogehoge.com/pleasanter/api/items/'
apiKey = '012345689abcdef~'
recordId = '012345'

print(ModPleasanter.getRecord(baseUrl, recordId, apiKey))

単一レコード取得APIレスポンスのData部分を返します。
https://pleasanter.org/manual/api-record-get

{"SiteId": 1, "UpdateTime": "2021-07-17T00:00:00", ..., "Title": "タイトル", ...}

##複数レコード取得##

getRecords.py
import ModPleasanter

baseUrl = 'http://hogehoge.com/pleasanter/api/items/'
apiKey = '012345689abcdef~'
siteId = '1'
filter = {
  'ClassA': 'あいうえお'
}

print(ModPleasanter.getRecords(baseUrl, siteId, apiKey, filter))

filterはColumnFilterHashの内容になります。
https://pleasanter.org/manual/api-view

複数レコード取得APIレスポンスのData部分を返します。
https://pleasanter.org/manual/api-record-get-multi

##レコード作成##

createRecord.py
import ModPleasanter

baseUrl = 'http://hogehoge.com/pleasanter/api/items/'
apiKey = '012345689abcdef~'
siteId = '1'
payload = {
  'Title': 'タイトル',
  'ClassHash': {
    'ClassA': 'あいうえお'
  }
}

ModPleasanter.createRecord(baseUrl, siteId, apiKey, payload)

##レコード更新##

updateRecord.py
import ModPleasanter

baseUrl = 'http://hogehoge.com/pleasanter/api/items/'
apiKey = '012345689abcdef~'
recordId = '012345'
payload = {
  'Title': 'タイトル2',
  'ClassHash': {
    'ClassA': 'あいうえお'
  }
}

ModPleasanter.updateRecord(baseUrl, recordId, apiKey, payload)

#まとめ#
特に難しいことはしていませんので、他のAPIにも拡張可能だと思います。

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?