Swift - 从URL获取OpenGraph元标记

4
我正在尝试从一个URL中提取og(OpenGraph)标签并在应用程序中显示。我可以正确地获取大多数网站的标签,但对于某些网站,我却无法获取标签。
例如:此URL 当我在浏览器上渲染它并进行检查时,会显示meta标签,但是当我尝试通过cURL获取html时,它返回一个没有任何meta的html内容。但是,当我在Slack或FB中分享URL时,它会呈现具有OG标记的预览。
我该如何在iOS上实现这个功能?
感谢您的任何帮助。
1个回答

3
你分享的URL存在问题,因为该网站需要启用Javascript。
如果未启用Javascript,则只会返回一个基本页面,提示您需要启用Javascript才能浏览该网站(因此没有Open Graph标签)。
您的浏览器、Slack和Facebook执行Javascript,但cURL不支持。在iOS中,URLSession也不支持。
在iOS中,您唯一能够访问此类网站HTML的方法是使用WKWebView来渲染页面。
然后,在加载完成后,使用evaluateJavascript(_:completionHandler:)执行一些Javascript以获取OG标签。
这是使用iOS库解决这些情况的唯一可行解决方案。
Facebook、LinkedIn等社交媒体的iOS客户端不会在其iOS客户端上执行此操作。他们的iOS客户端调用后端,传递URL进行处理,并接收预览。Javascript是作为此后端过程的一部分执行的。
有一些公共API可以帮助您做同样的事情,例如:

https://opengraph.io


谢谢回答。但是Facebook、LinkedIn和其他移动应用程序都可以正确显示预览。你的意思是它们都在WKWebView中呈现URL并从那里获取标签吗? - melaka
1
不,这些公司并没有在他们的iOS客户端上处理URL。Facebook的预览功能是一个后端过程。他们的应用程序调用他们的后端,传递URL进行处理,然后接收预览返回。他们甚至有缓存,所以如果URL再次共享,他们就不必再去解析网站的HTML了。WKWebView并不是一个理想的解决方案,但它是你在使用iOS框架时唯一可行的解决方案(根据你的问题)。有公共API可以从你的iOS应用程序中使用后端来完成这项工作,就像Facebook等公司所做的那样。请查看:https://www.opengraph.io - Pete Morris
由于问题的范围已经改变,我已经更新了我的答案。 - Pete Morris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接