プリザンターAPIモジュール（Python）

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

#モジュール#
```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 - レコード更新

##単一レコード取得##
```python: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": "タイトル", ...}
```

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

```python: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

##レコード作成##

```python: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)
```

##レコード更新##

```python:updateRecord.py
import ModPleasanter

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

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

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