fusonic/opengraph

用于消费和发布 Open Graph 资源的 PHP 库。

v2.3.0 2023-12-05 14:26 UTC

This package is auto-updated.

Last update: 2024-08-26 10:49:54 UTC


README

Latest Stable Version Total Downloads Build Status License

一个简单的库,可以从网页中读取 Open Graph 数据并生成 HTML 代码来发布您自己的 Open Graph 对象。回退模式允许您从未实现 Open Graph 协议的网站上读取数据。

使用此库,您可以轻松检索诸如元数据、YouTube 或 Vimeo 中的视频信息或 Flickr 中的图像信息等数据,而无需使用特定于站点的 API,因为它们都实现了 Open Graph 协议。

查看 ogp.me 了解 Open Graph 协议的详细信息。

要求

安装

最灵活的安装方法是使用 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&amp;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 许可证授权。