swift — получение метатегов OpenGraph из URL-адреса

Я пытаюсь получить теги og (OpenGraph) из URL-адреса и отобразить в приложении. Я правильно получаю теги для большинства веб-сайтов, но для некоторых нет.

бывший. Этот URL

Когда я отображаю его в браузере и проверяю, он показывает мне метатеги, но когда я пытаюсь получить html через cURL, он возвращает html-контент без каких-либо мета. Но когда я делюсь URL-адресом в Slack или FB, он отображает предварительный просмотр с тегами OG.

Как мне это сделать на iOS?

Любая помощь приветствуется.


person melaka    schedule 20.08.2018    source источник


Ответы (1)


Проблема с URL-адресом, которым вы поделились, заключается в том, что сайт требует включения Javascript.

Если у вас не включен Javascript, вы просто получите базовую страницу с сообщением о том, что вам нужно включить Javascript для просмотра сайта (следовательно, без тегов Open Graph).

Ваш браузер, Slack и Facebook выполняют Javascript, а cURL — нет. Также не будет URLSession в iOS.

В iOS единственный способ получить доступ к HTML для такого веб-сайта — использовать WKWebView для отображения страницы.

Затем, когда он загрузится, выполните какой-нибудь Javascript, используя evaluateJavascript(_:completionHandler:), чтобы получить теги OG.

Это единственное работоспособное решение для этих случаев с использованием библиотек iOS.

Клиент iOS для Facebook, LinkedIn и т. д. не делает этого на своем клиенте iOS. Их iOS-клиент вызывает их серверную часть, передавая URL-адрес для обработки, и получает предварительный просмотр. Javascript выполняется как часть этого внутреннего процесса.

Существуют общедоступные API, которые помогут вам сделать то же самое, например:

https://opengraph.io

person Pete Morris    schedule 20.08.2018
comment
Спасибо за ответ. Но Facebook, LinkedIn и другие мобильные приложения показывают предварительный просмотр правильно. Вы имеете в виду, что все они отображают URL-адрес в WKWebView и извлекают оттуда теги? - person melaka; 21.08.2018
comment
Нет, эти компании не обрабатывают URL-адреса в своих клиентах для iOS. Предварительный просмотр Facebook показывает внутренний процесс. Их приложение вызывает их серверную часть, передавая URL-адрес для обработки, а затем получает обратно предварительный просмотр. У них даже есть кеширование, поэтому, если URL-адрес снова будет передан, им не придется снова анализировать HTML-код сайта. WKWebView не является идеальным решением, но это единственное, которое вы найдете работоспособным с использованием фреймворков iOS (согласно вашему вопросу). Существуют общедоступные API, которые вы можете использовать из своего iOS-приложения, чтобы сделать это на бэкэнде, например, Facebook и т. д. Проверьте: opengraph.io - person Pete Morris; 21.08.2018
comment
Я обновил свой ответ, так как объем вопроса изменился. - person Pete Morris; 21.08.2018