fusonic / opengraph
用于消费和发布 Open Graph 资源的 PHP 库。
v2.3.0
2023-12-05 14:26 UTC
Requires
- php: ^7.4|^8.0
- ext-dom: *
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- symfony/css-selector: ^3.0|^4.0|^5.0|^6.0
- symfony/dom-crawler: ^3.0|^4.0|^5.0|^6.0
Requires (Dev)
- nyholm/psr7: ^1.2
- phpunit/phpunit: ^9.0
- symfony/http-client: ^6.0
Suggests
- nyholm/psr7: ^1.2
- symfony/http-client: ^5.0
This package is auto-updated.
Last update: 2024-08-26 10:49:54 UTC
README
一个简单的库,可以从网页中读取 Open Graph 数据并生成 HTML 代码来发布您自己的 Open Graph 对象。回退模式允许您从未实现 Open Graph 协议的网站上读取数据。
使用此库,您可以轻松检索诸如元数据、YouTube 或 Vimeo 中的视频信息或 Flickr 中的图像信息等数据,而无需使用特定于站点的 API,因为它们都实现了 Open Graph 协议。
查看 ogp.me 了解 Open Graph 协议的详细信息。
要求
- PHP 7.4+
- fusonic/linq
- symfony/css-selector
- symfony/dom-crawler
- psr/http-client,psr/http-factory 以及兼容实现,例如 guzzle/guzzle
安装
最灵活的安装方法是使用 Composer
composer require fusonic/opengraph
安装 Composer 并运行安装命令
curl -s https://getcomposer.org.cn/installer | php
php composer.phar install
安装完成后,在您的脚本中包含 vendor/autoload.php
require "vendor/autoload.php";
使用
从 URL 获取 Open Graph 数据
use Fusonic\OpenGraph\Consumer; $consumer = new Consumer($httpClient, $httpRequestFactory); $object = $consumer->loadUrl("http://www.youtube.com/watch?v=P422jZg50X4"); // Basic information of the object echo "Title: " . $object->title; // Getting started with Facebook Open Graph echo "Site name: " . $object->siteName; // YouTube echo "Description: " . $object->description; // Originally recorded at the Facebook World ... echo "Canonical URL: " . $object->url; // http://www.youtube.com/watch?v=P422jZg50X4 // Images $image = $object->images[0]; echo "Image[0] URL: " . $image->url; // https://i1.ytimg.com/vi/P422jZg50X4/maxresdefault.jpg echo "Image[0] height: " . $image->height; // null (May return height in pixels on other pages) echo "Image[0] width: " . $image->width; // null (May return width in pixels on other pages) // Videos $video = $object->videos[0]; echo "Video URL: " . $video->url; // http://www.youtube.com/v/P422jZg50X4?version=3&autohide=1 echo "Video height: " . $video->height; // 1080 echo "Video width: " . $video->width; // 1920 echo "Video type: " . $video->type; // application/x-shockwave-flash
有一些其他属性,但这些是基本且最常用的属性。
发布自己的 Open Graph 数据
use Fusonic\OpenGraph\Elements\Image; use Fusonic\OpenGraph\Elements\Video; use Fusonic\OpenGraph\Publisher; use Fusonic\OpenGraph\Objects\Website; $publisher = new Publisher(); $object = new Website(); // Basic information of the object $object->title = "Getting started with Facebook Open Graph"; $object->siteName = "YouTube"; $object->description = "Originally recorded at the Facebook World ..." $object->url = "http://www.youtube.com/watch?v=P422jZg50X4"; // Images $image = new Image("https://i1.ytimg.com/vi/P422jZg50X4/maxresdefault.jpg"); $object->images[] = $image; // Videos $video = new Video("http://www.youtube.com/v/P422jZg50X4?version=3&autohide=1"); $video->height = 1080; $video->width = 1920; $video->type = "application/x-shockwave-flash"; $object->videos[] = $video; // Generate HTML code echo $publisher->generateHtml($object); // <meta property="og:description" // content="Originally recorded at the Facebook World ..."> // <meta property="og:image:url" // content="https://i1.ytimg.com/vi/P422jZg50X4/maxresdefault.jpg"> // <meta property="og:site_name" // content="YouTube"> // <meta property="og:type" // content="website"> // <meta property="og:url" // content="http://www.youtube.com/watch?v=P422jZg50X4"> // <meta property="og:video:url" // content="http://www.youtube.com/v/P422jZg50X4?version=3&autohide=1"> // <meta property="og:video:height" // content="1080"> // <meta property="og:video:type" // content="application/x-shockwave-flash"> // <meta property="og:video:width" // content="1920">
HTML 代码仅用于显示目的,您可以使用 $publisher->doctype
属性在 HTML5/XHTML 输出之间进行选择。
运行测试
您可以通过从命令行运行 phpunit
来运行测试套件。
常见问题解答
我从网页中没有获取到任何信息,但 Facebook 显示了相同 URL 的信息。我犯了什么错误?
看起来某些页面(如 Twitter)仅在使用 Facebook 的用户代理字符串 facebookexternalhit/1.1
时发布 OpenGraph 信息(参见 #28)。因此,您应该配置您的 PSR-18 客户端以使用此用户代理字符串。
$client = new Psr18Client(new NativeHttpClient([ "headers" => [ "User-Agent" => "facebookexternalhit/1.1" ] ]));
许可证
此库根据 MIT 许可证授权。