#google-apps-script #confluence-rest-api
#google-apps-script #confluence-rest-api
Вопрос:
Примечание: Я также разместил этот вопрос на форуме Atlassian здесь: https://community.atlassian.com/t5/Confluence-questions/Google-Apps-Script-to-Create-Confluence-Page-HTTP-500-Error/qaq-p/1039040#M66094
Я обращаюсь к более широкой аудитории здесь, на SO.
Я использую следующий код скрипта Google Apps в таблице Google для создания страницы слияния:
headers = {"Authorization" : "Basic " Utilities.base64Encode(user ':'
pswd), "Content-Type": "application/json"};
url = "https://confluence.asdf.com/rest/api/content/";
var params = {
"method":"POST",
"headers":headers,
"muteHttpExceptions": false,
"type":"page",
"title":newTitle,
"space":{"key":"DOC"},
"body":{"storage":{"value": "<p>This is <br/> a new page</p>" },
"representation":"storage"}
};
var createResponse = UrlFetchApp.fetch(url, params);
Однако, когда я отправляю запрос, я получаю этот ответ:
Request failed for https://confluence.atlas.asdf.com/rest/api/content/
returned code 500.
Truncated server response: {"statusCode":500,"
message":"<?> No content to map to Object due to end of
input","reason":"Internal Server Error"} (use muteHttpExceptions option to
examine full response)
Я понимаю, что есть образцы curl, которые я видел, но они мне не помогают.
Что я делаю не так?
Редактировать: 25 марта @Tanaike Я изменил код, как вы предложили:
headers = {"Authorization" : "Basic " Utilities.base64Encode(user ':' pswd) };
var payload = {
"type": "page",
"title": newTitle,
"space": {"key": "DOC"},
"body": {
"storage": {
"value": "<p>This is <br/> a new page</p>"
},
"representation": "storage"
}
};
var params = {
"method": "POST",
"headers": headers,
"muteHttpExceptions": false,
"payload": JSON.stringify(payload),
"contentType": "application/json"
};
var createResponse = UrlFetchApp.fetch(url, params);
Я получаю ту же ошибку, что и раньше.
Ответ №1:
Как насчет этой модификации?
Модифицированный сценарий:
Пожалуйста, измените params
следующим образом и протестируйте еще раз. Судя по сообщению об ошибке в вашем вопросе, тело запроса было передано в свойство payload
.
var payload = {
"type": "page",
"title": newTitle,
"space": {"key": "DOC"},
"body": {
"storage": {
"value": "<p>This is <br/> a new page</p>"
},
"representation": "storage"
}
};
var params = {
"method": "POST",
"headers": headers,
"muteHttpExceptions": false,
"payload": JSON.stringify(payload)
};
Примечание:
- Эта модификация предполагает, что каждое значение в
payload
иheaders
является правильным. "Content-Type": "application/json"
заголовки in также могут быть вставленыparams
как"contentType": "application/json"
.
Ссылки:
Я не могу протестировать это изменение. Итак, если это не сработало, можете ли вы предоставить сообщение об ошибке? Я хотел бы подумать об этой проблеме.
Редактировать:
Из официального документа кажется, что свойство body
является "body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}
. Поэтому, пожалуйста, измените следующим образом.
Модифицированный скрипт:
headers = {"Authorization" : "Basic " Utilities.base64Encode(user ':' pswd) };
var payload = {
"type": "page",
"title": newTitle,
"space": {"key": "DOC"},
"body": {
"storage": {
"value": "<p>This is <br/> a new page</p>",
"representation": "storage" // Modified
}
}
};
var params = {
"method": "POST",
"headers": headers,
"muteHttpExceptions": false,
"payload": JSON.stringify(payload),
"contentType": "application/json"
};
var createResponse = UrlFetchApp.fetch(url, params);
Примечание:
- В моей среде я мог подтвердить, что результат был таким же, как в официальном примере скрипта. Если это не сработало, пожалуйста, подтвердите каждое значение
payload
иheaders
еще раз.
Комментарии:
1. @Steve Murphy Приношу извинения за доставленные неудобства. Я заметил, что существует проблема со свойством
body
. Итак, не могли бы вы, пожалуйста, подтвердить это?2. Я внедрил ваши изменения, и скрипт работает. Только одна проблема: когда я создаю страницу, она видна только на моей панели мониторинга, и оттуда мне нужно переместить ее на нужную дочернюю страницу в нужном месте. (Это не оптимально.) Как мне создать страницу таким образом, чтобы она размещалась на дочерней странице в пространстве?
3. @Steve Murphy Спасибо за ответ. Я рад, что ваша первая проблема была решена. Что касается вашей новой проблемы, можете ли вы опубликовать ее как новый вопрос? Потому что ваш первоначальный вопрос заключается в устранении ошибки вашего скрипта, а ваша новая проблема связана со спецификацией API. Это отличается от первого. Поэтому, пожалуйста, закройте этот вопрос и опубликуйте свою новую проблему как новый вопрос. При публикации нового вопроса, пожалуйста, указывайте подробную информацию. Благодаря этому он будет полезен другим пользователям, у которых такая же проблема. Я рад, если вы можете сотрудничать для решения вашей проблемы.
4. Чтобы поместить страницу в нужное место, добавьте это в полезную нагрузку: «ancestors»:[{«id»:<идентификатор родительской страницы>}] И спасибо, что помогли мне. Я действительно ценю потраченное вами время.!
5. Это самое близкое, что я нашел к моей проблеме, но вместо создания страницы слияния я хотел бы получить страницу слияния на основе ID и получить результат в формате Json, чтобы я мог проанализировать основное содержимое confluence. @SteveMurphy не могли бы вы дать какой-нибудь намек на то, как это сделать? Спасибо