実現したいこと
Notionのdatabaseに新規pageを作成した後にpage内部にblockを作成したい。
前提
title, contents,categoryといった内容のjsonファイルを入力してNotionDatabaseのtitle、category
に上記データを入力してpageを作成したのち、pagen内にblockを作成してcontentsを入力したいのですが、どうしてもうまくいきません。
解決方法をご教示いただけると助かります。
発生している問題・エラーメッセージ
エラーメッセージ {'object': 'error', 'status': 400, 'code': 'invalid_request_url', 'message': 'Invalid request URL.'}
該当のソースコード
python
1# coding: utf-82import os 3import json 4#import clipboard5import requests 6import re 7from datetime import datetime 8 9 10class NotionConnection:11 def __init__(self):12 # config.json から設定を読み込む13 with open('config.json') as config_file:14 config = json.load(config_file)15 self.NOTION_TOKEN = config["NOTION_TOKEN"]16 self.NOTION_DATABASE_ID = config["NOTION_STUDYMEMO_DATABASE_ID"]17 18 self.parent_page_id = None19 20 # Notion API へのリクエストヘッダー21 self.headers = {22 "Authorization": f"Bearer {self.NOTION_TOKEN}",23 "Content-Type": "application/json",24 "Notion-Version": "2022-06-28"25 }26 def check_block_type(self, id):27 url = f'https://api.notion.com/v1/blocks/{id}'28 r = requests.get(url, headers=self.headers)29 result_dict = r.json()30 print(result_dict)31 return result_dict['type']32 33 def get_notion_page(self):34 url = f'https://api.notion.com/v1/databases/{self.NOTION_DATABASE_ID}/query'35 payload = {'page_size': 100}36 r = requests.post(url, json=payload, headers=self.headers)37 38 result_dict = r.json()39 40 with open('db.json', 'w', encoding='utf8') as f:41 json.dump(result_dict, f, ensure_ascii=False, indent=4)42 results = result_dict['results']43 return results 44 45 def insert_title_and_category_study_memo(self, json_data):46 # Notion API の URL47 url = "https://api.notion.com/v1/pages"48 49 # input_data50 notion_data = {51 "parent": {"database_id": self.NOTION_DATABASE_ID}, # self.database_id を使用52 "properties": {53 "title": {54 "title": [55 {"text":56 {"content": json_data["title"]}57 }58 ]59 },60 "category": {61 "select": {62 "name": json_data["category"]63 }64 },65 }66 }67 68 # Notion API にデータを送信69 create_page_response = requests.post(url, headers=self.headers, json=notion_data)70 create_page_data = create_page_response.json()71 print(create_page_data)72 # 親ページのIDを取得73 self.parent_page_id = create_page_data["id"].replace("-", "")74 75 def insert_contents_study_memo_to_notion(self, json_data):76 if self.parent_page_id is None:77 print("親ページのIDが取得できていません。")78 return79 80 # 親ページ内にコンテンツを追加するリクエスト81 add_content_url =f'https://api.notion.com/v1/blocks/{self.parent_page_id}/children'82 83 84 print(add_content_url)85 86 add_content_payload = {87 'children': [88 {89 'object': 'block',90 'type': 'paragraph',91 'paragraph': {92 'rich_text': [93 {94 'type': 'text',95 'text': {96 'content': json_data["contents"],97 },98 },99 ],100 },101 },102 ],103 }104 105 print(add_content_payload)106 107 add_content_response = requests.post(add_content_url, json=add_content_payload, headers=self.headers)108 print(add_content_response.json())109 110 111if __name__ == "__main__":112 # クリップボードから JSON データを取得113 #clipboard_data = clipboard.get()114 #print(clipboard_data)115 clipboard_data=r'{"title":"サポートの機能","category":"SC","contents":"\nITIL v2の構成要素の1つであった「サービスサポート」の機能はITILv3になり「サービス運用」と「サービス移行」という2つの領域に分散していますが、それぞれの管理プロセスの役割はv2とほぼ変わらず次のようになっています。\n\nインシデント管理\nシステムの異常終了や構成機器の障害発生などのようにサービスの中断やサービス品質の低下につながるような事象が発生した時に、サービスの中断時間を最小限に抑えて速やかに回復することを目指すプロセス\n問題管理\nインシデントや障害原因の追及と恒久的な対策、および再発防止策の策定を目的としたプロセス\n変更管理\n変更作業にともなうリスクを管理し、リスクとメリットを考慮して変更作業の管理とリリース管理プロセスへ引き継ぐかどうかの評価を行うプロセス\nリリース及び展開管理\n変更管理プロセスで承認された変更作業について、実際のサービス提供システムへ変更作業を行うプロセス"}'116 json_data = json.loads(clipboard_data)117 118 # Notion にデータを挿入119 notion_conn = NotionConnection()120 notion_conn.insert_title_and_category_study_memo(json_data)121 #notion_conn.check_block_type(notion_conn.parent_page_id)122 notion_conn.insert_contents_study_memo_to_notion(json_data)123
試したこと
pageIDは問題なく取得できているようです。
databeseにpageは作成できていますので、apiキーなどの問題ではないと思います。
どうぞよろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

0 コメント