На другом форуме Discourse @sam предложил мне создать отчет об ошибке здесь: Похоже, что (по крайней мере) периодически возникает сбой при однобоксинге статей CNN. Поскольку это сайт с высоким уровнем известности, это кажется довольно значимым. Неясно, является ли это проблемой ограничения частоты запросов, блокировкой user-agent, проблемой на стороне Discourse, реальной проблемой с данными oEmbed или чем-то другим.
Примеры:
(Дополнительные примеры удалены из-за статуса нового пользователя.)
Привет @wazroth добро пожаловать в Meta. Спасибо за отчет.
Да, мне удалось воспроизвести это на моем локальном окружении для разработки и на размещенном сайте. Ссылки на CNN вообще не отображаются в виде карточек.
Сообщённые ссылки на CNN не обрабатываются как onebox, потому что размер ответа составляет 2,7 МБ, что превышает текущий лимит в 2 МБ. Мы можем исправить это, увеличив размер по умолчанию, но я хотел бы лучше понять риски такого изменения.
Зависит от движка onebox. Некоторые движки, например Amazon, извлекают определённую информацию, такую как цена товара, непосредственно из содержимого тега <body>. Для движков, использующих Open Graph, теоретически достаточно только определённых тегов, например <meta>, расположенных в <head>.
Наиболее эффективным способом будет парсинг ответа на лету по мере его поступления, однако переделка всех наших движков под такой подход потребует значительных усилий и является гораздо более сложным решением.
На самом деле, Nokogiri, который мы используем для парсинга HTML-ответов, способен обрабатывать неполный HTML-текст, поэтому нет необходимости отбрасывать весь ответ, если он слишком велик. Я считаю, что мы можем просто продолжать ограничивать размер тела ответа до 2 МБ, и если размер ответа превышает это значение, мы будем пытаться пропарсить только первые 2 МБ.