alank
(Andrew Lank)
10월 4, 2019, 3:01오후
1
이해하기 위해, Discourse API 문서에는 다음과 같은 구조가 언급되어 있습니다…
{
"post[raw]": "string",
"post[raw_old]": "string",
"post[edit_reason]": "string",
"post[cooked]": "string"
}
시도하기 전에, 이것이 무엇을 의미하는지, 혹은 정확히 어떤 의미인지 알고 싶습니다.
이것이 {post: {raw: ..., raw_old: ... }}를 의미하는 건가요?
아니면 단순히 {raw: "", raw_old: ""...}를 의미하는 건가요?
그리고 raw_old는 무엇인가요? JSON 바디에 PUT해야 하는 각 요소가 "string"이라는 것만 나와 있을 뿐입니다.
저는 단순히 게시글 상단에 한 줄을 추가하려는 것입니다(해당 게시글은 처음에 봇에 의해 생성되었습니다). 다른 사이트로의 링크를 추가해야 하는 부분이 있습니다. 또한, 첫 번째 단락이 카테고리 제목 아래에 표시되도록 하거나, 카테고리 제목 바로 아래에 정의된 cooked
요소에 표시되도록 하는 것이 목표입니다.
이해가 되셨으면 좋겠습니다. 만약 그렇지 않다면 설명을 요청해 주세요.
blake
(Blake Erickson)
10월 4, 2019, 3:17오후
2
현재 raw_old 필드의 용도가 정확히 무엇인지 확실하지 않지만, raw 필드를 사용하면 게시글 전체가 대체됩니다. 따라서 코드에서는 수정하려는 게시글을 가져온 뒤, 맨 위에 원하는 줄을 추가하고, raw 필드를 사용하여 게시글을 업데이트하면 됩니다.
Discourse가 어떻게 처리하는지 확인하는 데 도움이 될 수 있습니다. 사이트에서 게시글을 실시간으로 편집한 후 브라우저 호출을 검사해 보세요:
Discourse is backed by a complete JSON api. Anything you can do on the site you can also do using the JSON api.
The API is documented at docs.discourse.org . You can also use the discourse_api Ruby gem as a client library. However, not every endpoint is documented.
To determine how to do something with the JSON API here are some steps you can follow.
Example: recategorize a topic.
Go to a topic and start editing a category:
[image]
Open Chrome dev tools, switch to the Network tab, select …
discourse_api 지엄도 동일한 방식으로 작동합니다:
def posts(args = {})
args = API.params(args).default(before: 0)
response = get("/posts.json", args)
response[:body]
end
def wikify_post(id)
put("/posts/#{id}/wiki", wiki: true)
end
def edit_post(id, raw)
put("/posts/#{id}", post: { raw: raw })
end
def delete_post(id)
delete("/posts/#{id}.json")
end
def destroy_post_action(post_id, post_action_type_id)
delete("/post_actions/#{post_id}.json", post_action_type_id: post_action_type_id)
alank
(Andrew Lank)
10월 8, 2019, 12:58오후
3
이 부분에 대해 질문이 있는데, Discourse API Docs 에 정의된 것과 다른 문서를 말씀하시는 건가요? 그렇다면 흥미롭네요… 하지만 저는 API 문서에만 의존하고 있습니다.
제 단순한 목표는 카테고리 이름 아래에 댓글 + 링크를 추가하는 것입니다. Discourse가 "About … " 토픽의 첫 번째 게시물에서 가져온다고 생각하는데,
… 요소에 무엇이 삽입되는지 또는 제 게시물이 그곳에 나타나게 하려면 무엇을 해야 하는지 찾고 있습니다. 제 설명이 이해되시나요?
alank
(Andrew Lank)
10월 10, 2019, 12:47오후
4
위 내용과 직접 시도해 본 결과, API 문서에 명시된 대로 "cooked"를 사용하여 게시물을 업데이트할 수 없음을 알 수 있습니다. 반면 "raw"를 사용하면 업데이트가 가능합니다. "cooked"를 사용해 여러 번 시도해 보았으나, 모두 게시물이 20자 미만이거나 명확한 문장이 아니라는 이유로 유효하지 않다는 오류가 반환되었습니다.
다만 "raw"와 관련하여 추가적인 문제가 있으며, 이는 이 주제와 직접적으로 관련이 없으므로 별도의 게시물로 다룰 예정입니다.
도움 주셔서 감사합니다.
API 문서 에 약간의 불일치가 있습니다:
문서에는 페이로드와 함께 PUT /posts/{id}.json이라고 되어 있습니다:
Content type: application/json
{
"post[raw]": "string",
"post[raw_old]": "string",
"post[edit_reason]": "string",
"post[cooked]": "string"
}
하지만 이는 PUT /posts/{id}와 Content-Type: application/x-www-form-urlencoded로만 작동합니다.
PUT /posts/{id}.json의 올바른 페이로드는 다음과 같아야 합니다:
Content type: application/json
{
"post": {
"raw": "string",
"raw_old": "string",
"edit_reason": "string",
"cooked": "string"
}
}
raw 파라미터만으로도 전체 게시글을 대체하는 데 충분합니다.
alank
(Andrew Lank)
1월 6, 2020, 12:54오후
7
네, 감사합니다. Postman으로 몇 가지 요청을 시도해 보고 직접 만져보면서야 이 부분을 깨달았어요… 또한 제 시도에서도 “cooked” 옵션은 아무런 효과를 내지 않는 것 같았고, "raw_old"가 정확히 무엇인지도 아직 확신이 서지 않습니다.
simon
10월 31, 2023, 8:29오후
9
오늘 이 이슈가 다시 올라와서 내게 할당되었습니다. 혹시 할당을 해제해도 될까요?
어쨌든, 문서가 이제 정확합니다: https://docs.discourse.org/#tag/Posts/operation/updatePost .