fusonic/opengraph
, (*1)
A simple library to read Open Graph data from the web and generate HTML code to publish your own Open Graph objects. A fallback mode enables you to read data from websites that do not implement the Open Graph protocol., (*2)
Using this library you can easily retrieve stuff like meta data, video information from YouTube or Vimeo or image information from Flickr without using site-specific APIs since they all implement the Open Graph protocol., (*3)
See ogp.me for information on the Open Graph protocol., (*4)
Requirements
Installation
The most flexible installation method is using Composer:, (*5)
``` bash
composer require fusonic/opengraph, (*6)
Install composer and run install command:
``` bash
curl -s http://getcomposer.org/installer | php
php composer.phar install
Once installed, include vendor/autoload.php in your script., (*7)
``` php
require "vendor/autoload.php";, (*8)
## Usage
### Retrieve Open Graph data from a URL
``` php
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
There are some more properties but these are the basic and most commonly used ones., (*9)
Publish own Open Graph data
``` php
use Fusonic\OpenGraph\Elements\Image;
use Fusonic\OpenGraph\Elements\Video;
use Fusonic\OpenGraph\Publisher;
use Fusonic\OpenGraph\Objects\Website;, (*10)
$publisher = new Publisher();
$object = new Website();, (*11)
// 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";, (*12)
// Images
$image = new Image("https://i1.ytimg.com/vi/P422jZg50X4/maxresdefault.jpg");
$object->images[] = $image;, (*13)
// 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;, (*14)
// Generate HTML code
echo $publisher->generateHtml($object);
//
//
//
//
//
//
//
//
// , (*15)
_HTML code is formatted just for displaying purposes. You may choose between HTML5/XHTML output using the ```$publisher->doctype``` property._
## Running tests
You can run the test suite by running `phpunit` from the command line.
## FAQ
**I don't get any information from a webpage, but Facebook shows information for the same URL. What do I do wrong?**
It seems that some pages (like Twitter) only publish OpenGraph information if Facebook's user agent string `facebookexternalhit/1.1` is used (see #28). So you should configure your PSR-18 client to use this user agent string:
```php
$client = new Psr18Client(new NativeHttpClient([ "headers" => [ "User-Agent" => "facebookexternalhit/1.1" ] ]));
License
This library is licensed under the MIT license., (*16)