Экспонировать external_id в embed.js

Мне нужно загрузить посты на внешнем сайте, где я не знаю post_id, но Я ЗНАЮ external_id, который я настроил при создании темы.

Может ли кто-нибудь, пожалуйста, сделать переменную external_id доступной в логике embed.js или объяснить, чего мне не хватает?

Пример необходимой поддержки:

window.DiscourseEmbed = {
discourseUrl: ‘https://forums.blah.org/’,
external_id: ‘2023-4’
};

Я предполагаю, что вы создали темы через API и установили параметр external_id.

Не уверен, поможет ли это, но в Discourse есть маршрут t/external_id/:external_id. Похоже, он возвращает только данные в формате JSON:

Так что вы можете получить JSON-данные темы, например, по адресу:

/t/external_id/2023-4.json

Это вернёт содержимое и id темы в Discourse. Однако, думаю, это не решит вашу проблему.

Прямо сейчас тестирую: данные в формате JSON возвращаются, но Discourse автоматически перенаправляет на фактический URL темы в Discourse при выполнении запроса. Например, GET-запрос к http://localhost:4200/t/external_id/1.json перенаправляет меня на http://localhost:4200/t/testing-the-external-id-param/206.json

Я хочу получить что-то в формате встроенных постов. Discourse уже отлично справляется с такой разметкой, и я не хочу изобретать велосипед.

Если не разрешить поиск по external_id, мне придётся хранить ID темы форума в своей базе данных и искать по нему. Это кажется избыточным, поскольку при создании темы через API мы уже сохраняем уникальный идентификатор в поле external_id.

1 лайк

Я думаю, теперь я понимаю. Вы хотите использовать скрипт, показанный здесь: https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#alternate-configuration-linking-to-existing-topics-6. Но вместо использования параметра topicId вы хотите использовать параметр external_id.

Возможно, это можно добавить как новую функцию.

Также возможно, что можно сделать запрос на стороне клиента (например):
http://localhost:4200/t/external_id/1.json
Затем извлечь фактический URL темы из ответа и либо разобрать этот URL, чтобы извлечь id темы, либо сделать второй запрос к URL темы, чтобы получить id темы.
Это, вероятно, будет подвержено ошибкам.

Если вы добавляете скрипт встраивания на сервере, а не на клиенте, вы можете просто сделать GET-запрос к http://localhost:4200/t/external_id/1.json, выполнить любые необходимые действия для получения id темы Discourse, а затем вставить скрипт на вашу веб-страницу, используя этот id.

Это отличная обратная связь, она даёт мне повод для размышлений. Запрос на добавление функции самый простой, но мне нравятся некоторые ваши идеи, о которых я даже не думал!

1 лайк