Soshot/vendor/embed/embed/src/Providers/Dcterms.php

76 lines
1.6 KiB
PHP

<?php
namespace Embed\Providers;
use Embed\Adapters\Adapter;
/**
* Provider to get the data from the Dublin Core data elements in the HTML
*/
class Dcterms extends Provider
{
/**
* {@inheritdoc}
*/
public function __construct(Adapter $adapter)
{
parent::__construct($adapter);
if (!($html = $adapter->getResponse()->getHtmlContent())) {
return;
}
foreach ($html->getElementsByTagName('meta') as $meta) {
$name = trim(strtolower($meta->getAttribute('name')));
$value = $meta->getAttribute('content');
if (empty($name) || empty($value)) {
continue;
}
foreach (['dc.', 'dc:', 'dcterms:'] as $prefix) {
if (stripos($name, $prefix) === 0) {
$name = substr($name, strlen($prefix));
$this->bag->set($name, $value);
}
}
}
}
/**
* {@inheritdoc}
*/
public function getTitle()
{
return $this->bag->get('title');
}
/**
* {@inheritdoc}
*/
public function getDescription()
{
return $this->bag->get('description');
}
/**
* {@inheritdoc}
*/
public function getAuthorName()
{
return $this->bag->get('creator') ?: $this->bag->get('author');
}
/**
* {@inheritdoc}
*/
public function getPublishedTime()
{
foreach (['date', 'date.created', 'date.issued'] as $key) {
if ($found = $this->bag->get($key)) {
return $found;
}
}
}
}