Notion API × Python

18533 단어 PythonAPINotiontech

1. 시작

  • 이 글은 파이톤에서Notion API
  • 를 어떻게 호출하는지 총결하였다.
  • 이전에 설정한 방법 외에 데이터베이스를 어떻게 읽고 쓰는지 구체적인 예
  • 도 소개했다.

    2. 설정


    2-1. Integration 생성


  • 먼저 Integration을 만듭니다.이 절차에 관하여 아래의 글에서 상세하게 소개하였다
  • https://tektektech.com/notion-api/#Notionintegration

  • 이번에 "Test API"라는 Integration을 만들었어요.


  • 제가 Integration의 Token을 컨트롤하겠습니다.


  • 환경 변수 NOTION - Python에서 Integration 사용 가능Integration의 Token을 TOKIO 멤버로 합니다.bash_프로필 등에 기재하다
  • export NOTION_TOKEN="Integration Token"
    

    2-2. Notion 페이지 만들기


  • 데이터베이스로 Notion 페이지 만들기

  • 이번에는 다음 그림의 채소 데이터베이스 페이지를 만들었습니다.


  • 각 열의 구성은 다음과 같다.
  • Name(PROPERTY TYPE : title)
  • 개수(PROPRTY TYPE: Number)

  • 생성된 데이터베이스에 Integration API 액세스

  • Share 버튼을 누릅니다.


  • Invite 버튼을 누릅니다.


  • Invite Invite Integration“Test API”

  • 2-3. Notion SDK for Python 설치


    Python용 SDK를 설치합니다.픽으로 장착.
    pip install notion-client
    
  • GitHub :   https://github.com/ramnes/notion-sdk-py
  • 3. 데이터베이스 읽기

  • 라이브러리의 import
  • import os
    from pprint import pprint
    
    from notion_client import Client
    
  • API 센터 생성
  • notion = Client(auth=os.environ['NOTION_TOKEN'])
    
  • 읽기 데이터베이스
  • 아래 코드에서 얻으려는 데이터베이스의 데이터베이스 ID를 지정하면 얻을 수 있습니다
  • 데이터베이스 ID는 제작된 페이지의 URL에서 다음과 같은 정보를 얻을 수 있습니다.
  • URL : https://www.notion.so/yskst/c8e925b380314faa8f3ed6b6f08c030e?v=dd56d05ac5e243a4b9834980442ad8c7
  • 데이터베이스 ID: c8e 925b 380314 faa8f3ed6f8c030e
  • notion.databases.query(
        **{
            'database_id' : ''  # データベースID
           }
    )
    
  • 구하고 안에 있는 것 좀 봐
  • db = notion.databases.query(
        **{
            'database_id' : 'c8e925b380314faa8f3ed6b6f08c030e'  # データベースID
           }
    )
    pprint(db)
    
  • 데이터베이스 정보는 dict형으로 저장
  • {'has_more': False,
     'next_cursor': None,
     'object': 'list',
     'results': [{'archived': False,
                  'created_time': '2021-06-18T02:38:06.679Z',
                  'id': '2a6be367-6063-432c-8397-14415a63f083',
                  'last_edited_time': '2021-06-18T02:41:00.000Z',
                  'object': 'page',
                  'parent': {'database_id': 'c8e925b3-8031-4faa-8f3e-d6b6f08c030e',
                             'type': 'database_id'},
                  'properties': {'Name': {'id': 'title',
                                          'title': [{'annotations': {'bold': False,
                                                                     'code': False,
                                                                     'color': 'default',
                                                                     'italic': False,
                                                                     'strikethrough': False,
                                                                     'underline': False},
                                                     'href': None,
                                                     'plain_text': 'トマト',
                                                     'text': {'content': 'トマト',
                                                              'link': None},
                                                     'type': 'text'}],
                                          'type': 'title'},
                                 '個数': {'id': 't_nx',
                                        'number': 3,
                                        'type': 'number'}}},
                 {'archived': False,
                  'created_time': '2021-06-18T02:38:06.679Z',
                  'id': 'b2355c50-8823-4a6a-ae02-0fa647a78014',
                  'last_edited_time': '2021-06-18T02:41:00.000Z',
                  'object': 'page',
                  'parent': {'database_id': 'c8e925b3-8031-4faa-8f3e-d6b6f08c030e',
                             'type': 'database_id'},
                  'properties': {'Name': {'id': 'title',
                                          'title': [{'annotations': {'bold': False,
                                                                     'code': False,
                                                                     'color': 'default',
                                                                     'italic': False,
                                                                     'strikethrough': False,
                                                                     'underline': False},
                                                     'href': None,
                                                     'plain_text': 'にんじん',
                                                     'text': {'content': 'にんじん',
                                                              'link': None},
                                                     'type': 'text'}],
                                          'type': 'title'},
                                 '個数': {'id': 't_nx',
                                        'number': 2,
                                        'type': 'number'}}},
                 {'archived': False,
                  'created_time': '2021-06-18T02:38:06.679Z',
                  'id': '16896051-1be9-4a33-a7e9-1ca21950c1cc',
                  'last_edited_time': '2021-06-18T02:41:00.000Z',
                  'object': 'page',
                  'parent': {'database_id': 'c8e925b3-8031-4faa-8f3e-d6b6f08c030e',
                             'type': 'database_id'},
                  'properties': {'Name': {'id': 'title',
                                          'title': [{'annotations': {'bold': False,
                                                                     'code': False,
                                                                     'color': 'default',
                                                                     'italic': False,
                                                                     'strikethrough': False,
                                                                     'underline': False},
                                                     'href': None,
                                                     'plain_text': 'じゃがいも',
                                                     'text': {'content': 'じゃがいも',
                                                              'link': None},
                                                     'type': 'text'}],
                                          'type': 'title'},
                                 '個数': {'id': 't_nx',
                                        'number': 1,
                                        'type': 'number'}}}]}
    
  • 데이터베이스의 각 레코드를 가져오고 표시
  • for idx in range(len(db['results'])):
        name = db['results'][idx]['properties']['Name']['title'][0]['text']['content']
        quantity = db['results'][idx]['properties']['個数']['number']
        print('{} : 個数 {}'.format(name, quantity))
    
  • 순서는 보장되지 않지만 각 기록과 열의 값을 얻을 수 있다
  • トマト : 個数 3
    にんじん : 個数 2
    じゃがいも : 個数 1
    

    4. 데이터베이스 쓰기


    이어서 데이터베이스에 써 보았다.
    읽을 때와 마찬가지로 다음 코드에서 지정한 대상의 데이터베이스 ID를 쓸 수 있습니다
    notion.pages.create(
        **{
            'parent': {'database_id': ''},  # データベースID
            'properties': {}  # ここにカラム名と値を記載 
        }
    )
    
    '열명과 수치기재'의 부분은 이해하기 어려우니 다음에 구체적인 예를 들자.
    여기에 채소 데이터베이스에 다음과 같은 두 가지 기록을 추가한 예가 열거되어 있다.
  • 오이: 개수 4
  • 가지: 개수 3
  • # 追加する野菜と個数の辞書を作成
    append_dict = {'きゅうり' : 4, 'なす' : 5}
    
    # 1レコードずつデータベースにInsertする
    for vegetable,amount in append_dict.items():
        notion.pages.create(
            **{
                'parent': { 'database_id': 'c8e925b380314faa8f3ed6b6f08c030e'},
                'properties': {
                    'Name': {
                        'title': [
                            {
                                'text': {
                                    'content': vegetable  # 野菜名を指定
                                }
                            }
                        ]
                    },
                    '個数': {
                        'number' : amount  # 個数を指定
                    }
                }
            }
        )
    
    데이터베이스에서 볼 수 있듯이 두 개의 기록이 순조롭게 추가되었다.

    5. 끝말


    이번에는 파이톤과 노티온 API를 이용한 데이터베이스 읽기와 쓰기 방법에 대해 정리했다.
    이 기사에서 소개한 코딩을 기반으로 하면 노션의 효율적 활용 폭이 한꺼번에 확대될 것으로 생각한다.
    예를 들어 아래의 글은 파이톤과 노션 API를 이용하여 주택 관리를 반자동화하는 방법을 총괄하였으며, 가능하다면 참고하시기 바랍니다.
    https://yskst.notion.site/Notion-c10a55f41b914fbcbbfb45c2d581f4f4

    좋은 웹페이지 즐겨찾기