LoginSignup
3

More than 1 year has 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にも拡張可能だと思います。

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