2 回答
- 10-1
返信ありがとうございます。
ページ更新は、クラウド版ですので、自動化のルール定義の「Web リクエストを送信」を使用して、
ページ更新のAPIに従い、URLを指定し、PUTメソッドで、カスタムデータの記述部分に以下を記述しました。
そうすると、11行目の最初のダブルコーテーション部分でエスケープが必要とのエラーが発生します。
{
"version": {
"number": 2
},
"status": "current",
"type":"page",
"title":"test",
"body":{
"storage":{
"value":"<h1>REAT API のサンプルです。</h1>\n \
<p>今の時刻です:" + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "</p>",
"representation":"storage"
}
}
}以上、宜しくお願い致します。
- 青山明
如何でしょうか?
- Shuzaburo Doba
Jira の Automation をお使いとのことですので、現在時刻を取得している
datetime.now().strftime("%Y-%m-%d %H:%M:%S")
の部分は Automation のスマートバリューを使用した形式に書き換える必要があります。
例えば以下のようなデータにすれば、日本での現在時刻をページ本文に含めることができるかと思います。
{ "version": { "number": 5 }, "status": "current", "type": "page", "title": "test", "body": { "storage": { "value": "<h1>REAT API のサンプルです。</h1><p>今の時刻です:{{now.convertToTimeZone("Asia/Tokyo").jqlDateTime}}</p>", "representation": "storage" } } }
Automation のスマートバリューは以下をご参照ください。
- 青山明
返信ありがとうございます。サンプルデータのものは更新できましたが、
本当にしたいことは、以下のように更新したいデータを既存のページからbody.storage.value値
として取得し、値を更新した後、先ほどの自動化+APIを使用してページ更新処理したいです。
しかし、以下のデータでは、1行目の"details"の部分でエラーが発生します。
(予期しない文字とのこと)ダブルコーテーションはエスケープする必要があるのでしょうか?
なお、以下のデータではページプロパティマクロを使用し、そこに表を記述しています。
{
"version": {
"number": 2
},
"status": "current",
"type":"page",
"title":"test",
"body":{
"storage":{
"value": "<p /><p /><ac:structured-macro ac:name="details" ac:schema-version="1" data-layout="default" ac:local-id="43d00a26-f1c8-4aff-aac1-8e2e01ab48af" ac:macro-id="b8fd8013-6d21-4966-9497-6dc605cc3856"><ac:rich-text-body><table data-layout="default" ac:local-id="bd85e98a-27b9-437f-8332-33d136701948"><colgroup><col style="width: 323.0px;" /><col style="width: 323.0px;" /></colgroup><tbody><tr><td><p>test1</p></td><td><p>12345</p></td></tr><tr><td><p>test2</p></td><td><p>abcdefg</p></td></tr></tbody></table></ac:rich-text-body></ac:structured-macro>",
"representation": "storage"
}
}以上、宜しくお願い致します。
- Shuzaburo Doba
詳細のご説明ありがとうございます。
JSON エンコード のようにしていただくのがよろしいかと思いました。
値が変数に格納されているようでしたら
{{variable.jsonEncode}}
のようにしていただけますし、値が文字列そのままでしたら
{{#jsonEncode}}<p><ac:structured-macro ac:name="details" ac:schema-version="1" data-layout="default" ac:local-id="43d00a26-f1c8-4aff-aac1-8e2e01ab48af" ac:macro-id="b8fd8013-6d21-4966-9497-6dc605cc3856"><ac:rich-text-body><table data-layout="default" ac:local-id="bd85e98a-27b9-437f-8332-33d136701948"><colgroup><col style="width: 323.0px;" /><col style="width: 323.0px;" /></colgroup><tbody><tr><td><p>test1</p></td><td><p>12345</p></td></tr><tr><td><p>test2</p></td><td><p>abcdefg</p></td></tr></tbody></table></ac:rich-text-body></ac:structured-macro></p>{{/}}
というように "{{#jsonEncode}} ... {{/}}" で囲っていただくことで
JSON のテキスト形式に最適化された値に変換されます。payload 全体としては以下のようなイメージです。
- 青山明
返信ありがとうございます。やりたいことができました。深謝致します。
最後に確認ですが、エンコードの仕方は、スマートバリューのマニュアルに
記載されていたのでしょうか?
以上、宜しくお願い致します。
- Shuzaburo Doba
ありがとうございます!
無事に実現できたとのことでよかったです。エンコードの仕方は、スマートバリューのマニュアルに記載されておりました。
Jira スマート バリュー - テキスト フィールド のテキストに対して実施できる操作一覧内の、
JSON エンコード の項目を参考にいたしました。
コメントを追加... - 210
ご参考にされたページと同様に、Python から Confluence Cloud のページ更新をされたということで合っておりますでしょうか...?
その場合、リクエストを送信する際の
json.dumps(json_data)
の部分で Json データ (Python の dict) が変換されているので
特に問題なく更新できるはずなのかと見受けられました。もしよろしければ、以下の点を教えていただけますと幸いです。
- ページ更新をされている方法 (Python スクリプト, curl コマンド 等...)
- 実際に実行したコマンドやプログラムの内容
コメントを追加...
confluence(クラウド)のAPIを使用してページ更新がしたいですが、以下のURLページを参考にして
もうまくいきませんでした。
それは、ページ更新の記載部分で、page_textのデータが例で記載されたいますが、そのデータを
エラー内容は、ダブルコーテーションがデータ内に含まれるため、エスケープが必要とのことです。
このデータ例のように、ダブルコーテーションが含めれる場合、エスケープする方法は何でしょうか?
また、エスケープできたとしても更新するデータにダブルコーテーションが含まれる場合、いちいち
修正する必要があるのであれば、APIを使用して自動化などでは使えないと思います。
REST API で Confleunce のページを生成 – リックソフト公式ブログ(Ricksoft Blog)
以上、宜しくお願い致します。