Загрузка изображений onebox локально

Всем привет,

Я создал плагин, расширяющий функционал onebox для сайта, которым пользуются многие участники моего форума.

Этот onebox также отображает изображение с указанного сайта. Есть ли способ сохранять изображение локально, чтобы onebox не ломался при изменении изображения на исходном сайте?

Я видел, что такая функция доступна на форуме, но не могу найти, как получить к ней доступ в созданном мной плагине.

Заранее большое спасибо! :smiley:


PS: Вот репозиторий GitHub с моим плагином. Любые отзывы по моему коду будут очень кстати.

(Это мой первый опыт написания кода на Ruby, хотя я работаю с бэкендом на NodeJS).

Onebox и Discourse сделают это нативно без каких-либо дополнительных плагинов.

Вам просто нужно убедиться, что целевой веб-сайт генерирует соответствующие мета-теги og. Если что-то нужно изменять, то это должен быть целевой веб-сайт, а не Discourse, если вы хотите, чтобы это работало.

Например:

Веб-сайт BBC генерирует эти мета-теги для каждой страницы. Discourse и Onebox извлекут site_name, image, description и title и сгенерируют onebox.

Просто убедитесь, что ваш целевой веб-сайт следует этому стандарту, и вам, вероятно, не нужно будет делать ничего другого.

Это имеет смысл, потому что тогда ваш веб-сайт будет охвачен для всех предпросмотров на других платформах, например, в Facebook.

Я предполагаю, что у вас есть контроль над этим веб-сайтом или влияние на него, хотя это может быть большим предположением!

Если это невозможно, вам придется создать собственный движок в Onebox, который сможет распознавать уникальность этого веб-сайта и собирать с него соответствующие метаданные. Для этой задачи подходит библиотека Nokogiri.

К сожалению, нет :sweat_smile:

К сожалению, нет :confused: Кроме того, я хочу немного настроить представление onebox. Это было бы невозможно при использовании стандартного движка.

Но…
Я уже разработал расширение onebox. Оно выполняет всю работу по загрузке данных и работает отлично!

Вопрос в следующем: Как я могу быть уверен, что загруженное изображение будет сохранено локально? Предполагаю, что мне нужно написать дополнительный код для плагина.

Вот несколько направлений для исследования:

The Cooked Post Processor ставит в очередь задачу для выполнения этого действия, см.:

Код задач находится здесь: discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Если вам удалось вернуть изображения по прямым ссылкам в пост, изображения соответствуют критериям, а настройки гарантируют загрузку внешних изображений, это должно сработать.

image

Критерии здесь: discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Если это пока не работает, но вы успешно отображаете внешние изображения в onebox, я предполагаю, что изображения не соответствуют критериям для загрузки.