"Onebox Assistant", crawl for those previews reliably!

What it does

Turns this kind of result:

(where your server has failed to bring back the page source so cannot extract the required tags to build the onebox)

Into this!:

It simply provides an alternative path for onebox to get its page source with which to look for meta-data when the target server refuses your connection.

It changes nothing about how onebox then processes the page source to find the meta-data and render the box.

It’s meant to allow you to enter the details and credentials of a third party API to bring back the page instead of doing a normal http call directly to the target page.

Why

I found my servers were being forbidden access to a number of commercial sites so oneboxes would fail to be rendered. It essentiallly helps leverage the trustworthiness of the 3rd party API, a bit like a mail service.

Why it’s cost effective

You can use a relatively cheap VPS but still get reliable one-boxing functionality, even if your IP or user agent is somehow ‘blacklisted’.

You don’t need it if

You are oneboxing all your target content ok with the vanilla install and all users are happy

Pre-requisites

You need an account with a suitable 3rd part API.

Settings

onebox assistant api base address:  https://api.embed.rocks/api/

Above example uses embed.rocks, but in the future support for other API’s might be added, however, embed.rocks is relatively good value atm.

onebox assistant api base query:   ?url=

onebox assistant api options:   &skip=article,description,oembed,imextra&include=source

onebox assistant api page source field:   source

You will also need to enter your API key provided by embed.rocks

See example below

This setting allows you to ignore the prefetch (to check if the direct crawl returns a result) and use the API from the get-go.

image
default OFF

I recommend setting this to TRUE.

This is more expensive of course but often yields better results as there are some cases where the pre-fetch gets redirected to the wrong page because you are not trusted.

Support Information

Remember, if you’ve previously attempted to onebox a link, Discourse core will cache the result.

You can add a random querystring on the end to overcome the cache: https://mylink.com/todaynews?random=random

You can also check the API is responding with, e.g.:

curl -X GET "https://api.embed.rocks/api/?url=https%3A%2F%2Fnews.bbc.co.uk%0A&skip=article,description,oembed,imextra&include=source" -H "x-api-key: %%%your-api-key%%%"

You need to url encode the site you are calling (the url parameter value) using some site like this (not vouched for!)

Known Limitations

  • It’s only been tested with one provider at the moment and not tested on others. That provider is https://embed.rocks (with whom I have no affiliation). I’m happy to consider supporting more services if the work is sponsored.

  • The monkey patching is done at method level. This overrides more code than it needs to which leads to a greater risk of the plugin breaking after a core update. However I don’t think there’s a way to minimise this further?

How to install plugins

See the guide here: Install plugins on a self-hosted site

This repo is: https://github.com/merefield/discourse-onebox-assistant

All feedback welcome. Please :star: it on GitHub if you find it useful.

41 лайк

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

@WaitroseCarpark Я ничего подобного не заполнял. Шаги, которые я выполнил:

Шаг 1:

Шаг 2:

Шаг 3:

Шаг 4:
пройдите проверку «я не робот»

Шаг 5:
добавьте oEmbed API


подпишите всё, что требуется

зелёная галочка для oEmbed

Шаг 6:
получите учётные данные в разделе Настройки > Основные

Шаг 7:
получите токен приложения

используя учётные данные из предыдущего шага, выполните:

curl -X GET "https://graph.facebook.com/oauth/access_token?client_id={your-app-id}&client_secret={your-app-secret}&grant_type=client_credentials"

это вернёт:

{"access_token":"378384926723309|xxxxxx","token_type":"bearer"}

проверьте ваш токен авторизации:

curl -X GET \ "https://graph.facebook.com/v9.0/instagram_oembed?url=https://www.instagram.com/p/fA9uwTtkSN/&access_token=xxxx..."

это вернёт:

{"version":"1.0","author_name":"diegoquinteiro","provider_name":"Instagram","provider_url":"https:\/\/www.instagram.com\/","type":"rich","width":658,"html":"\u003Cblockquote class=\"instagram-media\" data-instgrm-captioned data-instgrm-permalink=\"https:\/\/www.instagram.com\/p\/fA9uwTtkSN\/?utm_source=ig_embed&utm_campaign=loading\" ....

Добавьте это в Discourse — и всё готово!

6 лайков

Вау…

Окей, сработало…

Спасибо, бро :bowing_man:

4 лайка

С установленным плагином? @Richie

1 лайк

@znedw Большое спасибо за то, что нашли время пошагово объяснить (с картинками! :heart_eyes:) как это сделать! На мой взгляд, всё работает как по маслу!

3 лайка

с установленным плагином?

1 лайк

Я только что заметил, что вы создали этот плагин… Я его не использовал, извините, что захватил вашу тему.

НО я попробую его сегодня позже, если смогу найти немного свободного времени…

2 лайка

Я потратил сегодня вечером около получаса, пробуя всевозможные комбинации, Роберт @merefield

Следуя инструкциям от @znedw (ещё раз спасибо, друг!), похоже, что этот метод работает как с включённым Onebox Assistant, так и с выключенным (через панель администратора, раздел плагинов, галочка).

Я не пробовал пересобирать свой Discourse с полностью удалённым плагином.

Стоит отметить, что у меня не включена опция «Всегда использовать прокси-сканирование, независимо от прямого ответа».

Кстати, похоже, amazon.co.uk снова блокирует множество запросов — как напрямую (при отключённом плагине), так и через страницу «попробовать» на embed.rocks, которая тоже зависает :roll_eyes:

3 лайка

Спасибо. Да, я ожидал, что это будет работать хотя бы без «всегда использовать прокси».

2 лайка

Что касается Amazon, я всегда вручную использую их партнерские ссылки, которые не блокируются.

Однобоксовое размещение нарушает их правила и условия, если вы являетесь партнером.

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

1 лайк

Возможно ли использовать этот плагин только для ссылок на YouTube? Не понимаю, какие настройки для этого нужно применить.

Также подскажите, где можно найти больше информации о возможных настройках?

Спасибо!

Нет. Вам придется форкнуть проект и доработать код.

Просто скопируйте их из первого поста (OP) в точности. У вас будет свой собственный ключ.

2 лайка

Как я могу проверить, работает ли плагин и отправляются ли запросы через https://embed.rocks?
Я активировал его, но ошибка не исчезла.

Я протестировал следующие видео:

https://www.youtube.com/watch?v=_2wfBNUnOVY
https://www.youtube.com/watch?v=qLNhVC296YI
1 лайк

Дашборд на embed.rocks должен начать отображать ваши вызовы (локальный счетчик был бы приятным дополнением, но пока не реализован)

Обе эти ссылки работают у меня через плагин.

Если это не работает, попробуйте проверить эту опцию:

image

2 лайка

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

1 лайк

Я добавил обычный текст в первое сообщение для тебя.

3 лайка

Спасибо. Я проверил, и всё было в порядке. На странице «Панель управления» в разделе «Использование» я не вижу никаких вызовов. Это значит, что что-то не так? Должно ли количество вызовов всегда быть видимым?

1 лайк

Этот вопрос нужно задать разработчикам embed.rocks. Возможно, я добавлю дополнительное логирование в плагин, что поможет прояснить ситуацию. Вы также можете установить уровень логирования вашего сайта на ‘info’, чтобы получить больше информации, так как уже есть вызовы Rails.logger.info.

1 лайк

Да, это было бы здорово. Потому что сейчас я активировал плагин и настроил параметры, но YouTube не работает, и в панели управления нет никакой активности. Я отправил письмо в поддержку embed.rocks.

1 лайк

Будет ли этот плагин корректно работать, если я буду хранить файлы в Amazon S3?

У меня всё ещё возникают с этим трудности, и я не могу заставить его работать. Видео не загружаются — только ссылки. Кроме того, на панели использования (Usage Panel) в Embed.rocks нет никакой информации.

У меня есть тестовый сервер. Файлы хранятся локально на нём. Но плагин тоже не работает, и на панели использования (Usage dashboard) нет никакой активности. При этом видео сохраняются на сайте.

Поэтому я не понимаю, как и что проверить, чтобы решить проблему.

Пожалуйста, поделитесь своими идеями.

2 лайка