diff --git a/src/LinkedData.php b/src/LinkedData.php index 1e3962d6..41f6c533 100644 --- a/src/LinkedData.php +++ b/src/LinkedData.php @@ -4,6 +4,7 @@ namespace Embed; use Exception; +use ML\JsonLD\JsonLD; use ML\JsonLD\Document as LdDocument; use ML\JsonLD\DocumentInterface; use ML\JsonLD\GraphInterface; @@ -16,7 +17,9 @@ class LinkedData private ?DocumentInterface $document; - private function get(string ...$keys) + private array $allData; + + public function get(string ...$keys) { $graph = $this->getGraph(); @@ -39,6 +42,15 @@ private function get(string ...$keys) return null; } + public function getAll() + { + if (!isset($this->allData)) { + $this->fetchData(); + } + + return $this->allData; + } + private function getGraph(string $name = null): ?GraphInterface { if (!isset($this->document)) { @@ -50,20 +62,58 @@ private function getGraph(string $name = null): ?GraphInterface } } - return $this->document->getGraph(); + return $this->document->getGraph($name); } protected function fetchData(): array { + $this->allData = []; + $document = $this->extractor->getDocument(); - $content = $document->select('.//script', ['type' => 'application/ld+json'])->str(); + $nodes = $document->select('.//script', ['type' => 'application/ld+json'])->strAll(); - if (empty($content)) { + if (empty($nodes)) { return []; } try { - return json_decode($content, true) ?: []; + $data = []; + $request_uri = (string)$this->extractor->getUri(); + foreach ($nodes as $node) { + $ldjson = json_decode($node, true); + if (!empty($ldjson)) { + + // some pages with multiple ld+json blocks will put + // each block into an array (Flickr does this). Most + // appear to put an object in each ld+json block. To + // prevent them from stepping on one another, the ones + // that are not arrays will be put into an array. + if (!array_is_list($ldjson)) { + $ldjson = [$ldjson]; + } + + foreach ($ldjson as $node) { + if (empty($data)) { + $data = $node; + } elseif (isset($node['mainEntityOfPage'])) { + $url = ''; + if (is_string($node['mainEntityOfPage'])) { + $url = $node['mainEntityOfPage']; + } elseif (isset($node['mainEntityOfPage']['@id'])) { + $url = $node['mainEntityOfPage']['@id']; + } + if (!empty($url) && $url == $request_uri) { + $data = $node; + } + } + } + + + $this->allData = array_merge($this->allData, $ldjson); + } + } + + return $data; } catch (Exception $exception) { return []; } diff --git a/src/functions.php b/src/functions.php index 93c18edf..85db16d8 100644 --- a/src/functions.php +++ b/src/functions.php @@ -10,7 +10,7 @@ function clean(string $value, bool $allowHTML = false): ?string $value = trim($value); if (!$allowHTML) { - $value = html_entity_decode($value); + $value = html_entity_decode($value, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401); $value = strip_tags($value); } @@ -154,3 +154,25 @@ function isEmpty(mixed ...$values): bool return false; } + +if (!function_exists("array_is_list")) { + /** + * Polyfil for https://www.php.net/manual/en/function.array-is-list.php + * which is only available in PHP 8.1+ + * + * @param array $array The array + * + * @return bool + */ + function array_is_list(array $array): bool + { + $i = -1; + foreach ($array as $k => $v) { + ++$i; + if ($k !== $i) { + return false; + } + } + return true; + } +} diff --git a/tests/PagesTest.php b/tests/PagesTest.php index 1df17959..2161c4b8 100644 --- a/tests/PagesTest.php +++ b/tests/PagesTest.php @@ -188,8 +188,8 @@ public function testSoundCloud() public function testSpotify() { - $this->assertEmbed('https://play.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV'); $this->assertEmbed('https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV'); + $this->assertEmbed('https://play.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV'); } public function testTwitch() diff --git a/tests/PagesTestCase.php b/tests/PagesTestCase.php index 56d90a01..7abdb0ff 100644 --- a/tests/PagesTestCase.php +++ b/tests/PagesTestCase.php @@ -107,6 +107,7 @@ private static function getData(Extractor $extractor): array if (method_exists($extractor, 'getApi')) { $data['api'] = $extractor->getApi()->all(); } + $data['allLinkedData'] = $extractor->getLinkedData()->getAll(); return $data; } diff --git a/tests/cache/consent.google.es.ml.0bcc06470676961770c2d2357693454b.php b/tests/cache/consent.google.es.ml.0bcc06470676961770c2d2357693454b.php new file mode 100644 index 00000000..237e70c7 --- /dev/null +++ b/tests/cache/consent.google.es.ml.0bcc06470676961770c2d2357693454b.php @@ -0,0 +1,56 @@ + [ + 'content-type' => [ + 'text/html; charset=utf-8' + ], + 'cache-control' => [ + 'no-cache, no-store, max-age=0, must-revalidate' + ], + 'pragma' => [ + 'no-cache' + ], + 'expires' => [ + 'Mon, 01 Jan 1990 00:00:00 GMT' + ], + 'date' => [ + 'Sun, 04 Apr 2021 15:20:47 GMT' + ], + 'p3p' => [ + 'CP="This is not a P3P policy! See g.co/p3phelp for more info."' + ], + 'content-security-policy' => [ + 'script-src \'nonce-g9/eaYJePAYsVh50Jyl0EQ\' \'unsafe-inline\';object-src \'none\';base-uri \'self\';report-uri /_/IdentityNotFoundHttp/cspreport;worker-src \'self\'', + 'script-src \'nonce-g9/eaYJePAYsVh50Jyl0EQ\' \'self\' https://apis.google.com https://ssl.gstatic.com https://www.google.com https://www.gstatic.com https://www.google-analytics.com;report-uri /_/IdentityNotFoundHttp/cspreport' + ], + 'content-encoding' => [ + 'gzip' + ], + 'server' => [ + 'ESF' + ], + 'x-xss-protection' => [ + '0' + ], + 'x-content-type-options' => [ + 'nosniff' + ], + 'set-cookie' => [ + 'NID=212=dAlC8GKROGQ6cWC5EeQ92vga0m4ReROz1kMl9BrboOg7GfaE3zvV7pmmgCmsXsJ7vya8tJGI4jioBfUTai-FbFjJPm264-_PY9-GEu66UJhCsRvBiDJVz3O5Ckjox4e0LsT9RZ2vuLADiJTrbw7nzwn4qwyWUF3duIq6_ZUnLhA; expires=Mon, 04-Oct-2021 15:20:47 GMT; path=/; domain=.google.es; Secure; HttpOnly; SameSite=none' + ], + 'alt-svc' => [ + 'h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"' + ], + 'Content-Location' => [ + 'https://consent.google.es/\'https:/consent.google.es/ml?continue=https://www.google.es/maps/place/Tordoia,%2BA%2BCoru%25C3%25B1a/@43.0871207,-8.5710004,12z/data%3D!3m1!4b1!4m2!3m1!1s0xd2ef4006f1ef489:0x404f58273ca55a0&gl=ES&hl=es&pc=m&src=1&rffu=true\'' + ], + 'X-Request-Time' => [ + '0.112 ms' + ] + ], + 'statusCode' => 404, + 'reasonPhrase' => 'Not Found', + 'body' => 'Error 404 (No se ha encontrado.)!!1

404. Se trata de un error.

No se ha encontrado la URL solicitada en este servidor. Esa es toda la información de la que disponemos.

' +]; diff --git a/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.ph b/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.ph new file mode 100644 index 00000000..20837910 --- /dev/null +++ b/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.ph @@ -0,0 +1,50 @@ + [ + 'content-type' => [ + 'text/html; charset=utf-8' + ], + 'cache-control' => [ + 'no-cache, no-store, max-age=0, must-revalidate' + ], + 'pragma' => [ + 'no-cache' + ], + 'expires' => [ + 'Mon, 01 Jan 1990 00:00:00 GMT' + ], + 'date' => [ + 'Sun, 04 Apr 2021 15:23:17 GMT' + ], + 'content-security-policy' => [ + 'script-src \'nonce-vsx63Xooae1XpA8j6kEGNA\' \'unsafe-inline\';object-src \'none\';base-uri \'self\';report-uri /_/IdentityNotFoundHttp/cspreport;worker-src \'self\'', + 'script-src \'nonce-vsx63Xooae1XpA8j6kEGNA\' \'self\' https://apis.google.com https://ssl.gstatic.com https://www.google.com https://www.gstatic.com https://www.google-analytics.com;report-uri /_/IdentityNotFoundHttp/cspreport' + ], + 'content-encoding' => [ + 'gzip' + ], + 'server' => [ + 'ESF' + ], + 'x-xss-protection' => [ + '0' + ], + 'x-content-type-options' => [ + 'nosniff' + ], + 'alt-svc' => [ + 'h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"' + ], + 'Content-Location' => [ + 'https://consent.youtube.com/\'https:/consent.youtube.com/ml?continue=https://www.youtube.com/channel/UCuZeHD5SGecQomz2pVDHGzg&gl=ES&hl=es&pc=yt&uxe=23983172&src=1&rffu=true\'' + ], + 'X-Request-Time' => [ + '0.127 ms' + ] + ], + 'statusCode' => 404, + 'reasonPhrase' => 'Not Found', + 'body' => 'Error 404 (No se ha encontrado.)!!1

404. Se trata de un error.

No se ha encontrado la URL solicitada en este servidor. Esa es toda la información de la que disponemos.

' +]; diff --git a/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.php b/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.php new file mode 100644 index 00000000..20837910 --- /dev/null +++ b/tests/cache/consent.youtube.com.ml.96e9b7b22bbf367fbeaa2ae77c21e90d.php @@ -0,0 +1,50 @@ + [ + 'content-type' => [ + 'text/html; charset=utf-8' + ], + 'cache-control' => [ + 'no-cache, no-store, max-age=0, must-revalidate' + ], + 'pragma' => [ + 'no-cache' + ], + 'expires' => [ + 'Mon, 01 Jan 1990 00:00:00 GMT' + ], + 'date' => [ + 'Sun, 04 Apr 2021 15:23:17 GMT' + ], + 'content-security-policy' => [ + 'script-src \'nonce-vsx63Xooae1XpA8j6kEGNA\' \'unsafe-inline\';object-src \'none\';base-uri \'self\';report-uri /_/IdentityNotFoundHttp/cspreport;worker-src \'self\'', + 'script-src \'nonce-vsx63Xooae1XpA8j6kEGNA\' \'self\' https://apis.google.com https://ssl.gstatic.com https://www.google.com https://www.gstatic.com https://www.google-analytics.com;report-uri /_/IdentityNotFoundHttp/cspreport' + ], + 'content-encoding' => [ + 'gzip' + ], + 'server' => [ + 'ESF' + ], + 'x-xss-protection' => [ + '0' + ], + 'x-content-type-options' => [ + 'nosniff' + ], + 'alt-svc' => [ + 'h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"' + ], + 'Content-Location' => [ + 'https://consent.youtube.com/\'https:/consent.youtube.com/ml?continue=https://www.youtube.com/channel/UCuZeHD5SGecQomz2pVDHGzg&gl=ES&hl=es&pc=yt&uxe=23983172&src=1&rffu=true\'' + ], + 'X-Request-Time' => [ + '0.127 ms' + ] + ], + 'statusCode' => 404, + 'reasonPhrase' => 'Not Found', + 'body' => 'Error 404 (No se ha encontrado.)!!1

404. Se trata de un error.

No se ha encontrado la URL solicitada en este servidor. Esa es toda la información de la que disponemos.

' +]; diff --git a/tests/cache/www.wired.com..1202600986b37d2c6a30336f82c671f8.php b/tests/cache/www.wired.com..1202600986b37d2c6a30336f82c671f8.php index a8fe8f83..97fb8c39 100644 --- a/tests/cache/www.wired.com..1202600986b37d2c6a30336f82c671f8.php +++ b/tests/cache/www.wired.com..1202600986b37d2c6a30336f82c671f8.php @@ -134,116 +134,116 @@ - - - - - - - - - - - - - - - - - - - - Yi 4K Action Camera Review: Price, Specs | WIRED - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + Yi 4K Action Camera Review: Price, Specs | WIRED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - +}] + + @@ -320,480 +320,480 @@ - + - -
+ +
- +
- Skip to: Start of article - - - - - - - - Go to Wired Home Page. - - - - - - - - - - - + Skip to: Start of article + + + + + + + + Go to Wired Home Page. + + + + + + + + + + +
- + - + - +
- +
-
+
- - + + - Skip Article Header. Skip to: Start of Article. - -
- - - -

Review: Yi 4K Action Camera

Sub Title: Better Than the Real Thing

-
-
-
- -
-
- -

For nearly two years GoPro’s Hero4 Black has been the standard-bearer for action cameras. It can shoot 4K at 30 frames per second, 1080p at a blistering 120fps, and the footage from both looks fantastic. Two years is a long time to be sitting on a throne, though, and it gives potential usurpers ample time to learn your secrets. That’s just what’s happened with the Yi 4K Action Camera.

+ Skip Article Header. Skip to: Start of Article. + +
+ + + +

Review: Yi 4K Action Camera

Sub Title: Better Than the Real Thing

+
+
+
+ +
+
+ +

For nearly two years GoPro’s Hero4 Black has been the standard-bearer for action cameras. It can shoot 4K at 30 frames per second, 1080p at a blistering 120fps, and the footage from both looks fantastic. Two years is a long time to be sitting on a throne, though, and it gives potential usurpers ample time to learn your secrets. That’s just what’s happened with the Yi 4K Action Camera.

- - -
-

Yi 4K Action Camera

-

8/10

-
Wired
-

Same specs as the Hero4 Black but half the cost. Adds a nice touchscreen and better battery life. Works with GoPro accessories.

-
Tired
-

Entirely unoriginal and it makes you feel bad for buying it. Hard to tell when rolling. Can’t change settings in waterproof housing, and housing is sold separately.

-
- -
-
- -
- - - -

How We Rate

-
-
    -
  • - 1/10A complete failure in every way -
  • -
  • - 2/10Sad, really -
  • -
  • - 3/10Serious flaws; proceed with caution -
  • -
  • - 4/10Downsides outweigh upsides -
  • -
  • - 5/10Recommended with reservations -
  • -
  • - 6/10Solid with some issues -
  • -
  • - 7/10Very good, but not quite great -
  • -
  • - 8/10Excellent, with room to kvetch -
  • -
  • - 9/10Nearly flawless -
  • -
  • - 10/10Metaphysical perfection -
  • -
-
-
+ + +
+

Yi 4K Action Camera

+

8/10

+
Wired
+

Same specs as the Hero4 Black but half the cost. Adds a nice touchscreen and better battery life. Works with GoPro accessories.

+
Tired
+

Entirely unoriginal and it makes you feel bad for buying it. Hard to tell when rolling. Can’t change settings in waterproof housing, and housing is sold separately.

+
+ +
+
+ +
+ + + +

How We Rate

+
+
    +
  • + 1/10A complete failure in every way +
  • +
  • + 2/10Sad, really +
  • +
  • + 3/10Serious flaws; proceed with caution +
  • +
  • + 4/10Downsides outweigh upsides +
  • +
  • + 5/10Recommended with reservations +
  • +
  • + 6/10Solid with some issues +
  • +
  • + 7/10Very good, but not quite great +
  • +
  • + 8/10Excellent, with room to kvetch +
  • +
  • + 9/10Nearly flawless +
  • +
  • + 10/10Metaphysical perfection +
  • +
+
+
The Yi is almost exactly a GoPro. It looks exactly like a GoPro. Everybody I showed it to thought it was a GoPro. Even the font in its menu system is suspiciously familiar, as is the latch on the waterproof housing. It can shoot at the same high speeds as the Hero4 Black. The pattern of beeps for starting and stopping recording is the same. So what’s the difference? The Hero4 Black costs $500, and the Yi 4K costs $250. But wait, there’s more.

When GoPro made the Hero4 line, it decided that the mid-tier Silver edition would have a touchscreen on the back, but that the top-tier Black edition would not. The Yi 4K basically took the Black edition and put the Silver edition’s screen on it, but it’s larger (2.19 inches versus 1.5 inches), higher resolution (330 pixels per inch), and more responsive than GoPro’s.

@@ -812,153 +812,153 @@

But for now, I guess I’m saying, yes, the Yi is the better buy for most consumers. I just don’t feel good about saying it.

When you buy something using the retail links in our product reviews, we earn a small affiliate commission. Read more about how this works.

- Go Back to Top. Skip To: Start of Article. + Go Back to Top. Skip To: Start of Article. -
+
- -
+ - - +
+ + -
+
-
  • - - - Yes, Chainmail Is Really Hard to Draw +} + + Yes, Chainmail Is Really Hard to Draw - - -
  • + +
    + + -
    +
    -
  • - - - ‘Blood of Zeus’ Combines Myth With Saturday Morning Cartoons +} + + ‘Blood of Zeus’ Combines Myth With Saturday Morning Cartoons - - hera -
  • + Geek's Guide to the Galaxy + + + -
    +
    -
  • - - - What Would It Take to Actually Settle an Alien World? +} + + What Would It Take to Actually Settle an Alien World? - - dinosaur -
  • + Geek's Guide to the Galaxy + + + -
    +
    -
  • - - - Mrs. Coulter Is One of the Best Villains on TV +} + + Mrs. Coulter Is One of the Best Villains on TV - - Ruth Wilson -
  • + Geek's Guide to the Galaxy + + + -
    +
    - - - - More Stories - + + + + More Stories + - + @@ -1421,22 +1421,22 @@
    - +
    -
    - Skip Comments. Skip to: Footer. + + + + View comments + +
    -
    -
    -
    - +
    +
    +
    +
    @@ -1471,52 +1471,52 @@ })(); -
    -
    -
    +
    +
    +
    +
    - - + - - - - - - - + + + + + + + @@ -2352,21 +2352,21 @@ "site": { "appVersion": "1.0.0" } -}; - - +}; + + - - - - - + + + + + - - - - - + + + diff --git a/tests/cache/www.wired.com.wp-json-oembed-1.0-embed.f979e136668a2b1f8801a26690847913.php b/tests/cache/www.wired.com.wp-json-oembed-1.0-embed.f979e136668a2b1f8801a26690847913.php index b7f232e2..029468bd 100644 --- a/tests/cache/www.wired.com.wp-json-oembed-1.0-embed.f979e136668a2b1f8801a26690847913.php +++ b/tests/cache/www.wired.com.wp-json-oembed-1.0-embed.f979e136668a2b1f8801a26690847913.php @@ -100,5 +100,5 @@ ], 'statusCode' => 200, 'reasonPhrase' => 'OK', - 'body' => '{"version":"1.0","provider_name":"WIRED","provider_url":"https:\\/\\/www.wired.com","author_name":"Wired Staff","author_url":"https:\\/\\/www.wired.com\\/author\\/wired-staff\\/","title":"Review: Yi 4K Action Camera","type":"rich","width":600,"height":338,"html":"
    Review: Yi 4K Action Camera<\\/a><\\/blockquote>\\n', 'height' => null, 'width' => 540 + ], + 'allLinkedData' => [ + [ + '@type' => 'SocialMediaPosting', + 'url' => 'https://he-who-photographs-rather-ok.tumblr.com/post/165326273724', + 'mainEntityOfPage' => true, + 'datePublished' => '2017-09-14T10:20:35-04:00', + 'author' => 'he-who-photographs-rather-ok', + 'image' => 'https://64.media.tumblr.com/0a0fac1ef8faa0c466d9224567af06aa/tumblr_ow8r0nMybA1spmyulo1_1280.jpg', + '@context' => 'http://schema.org' + ] ] ]; diff --git a/tests/fixtures/i.imgur.com.x6rkcc5.jpg.php b/tests/fixtures/i.imgur.com.x6rkcc5.jpg.php index 7f542388..dd477e85 100644 --- a/tests/fixtures/i.imgur.com.x6rkcc5.jpg.php +++ b/tests/fixtures/i.imgur.com.x6rkcc5.jpg.php @@ -35,5 +35,6 @@ 'width' => 540, 'height' => 500, 'html' => '
    Picture of a Mountain Gorilla right before he punched the photographer
    ' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/ideone.com.whjntg.php b/tests/fixtures/ideone.com.whjntg.php index 4d2ac785..ea481374 100644 --- a/tests/fixtures/ideone.com.whjntg.php +++ b/tests/fixtures/ideone.com.whjntg.php @@ -44,5 +44,6 @@ 'title' => 'Ideone.com', 'url' => 'https://ideone.com/Whjntg', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/imageshack.com.i-ip7wo0v7j.php b/tests/fixtures/imageshack.com.i-ip7wo0v7j.php index 25fa7c59..9adef1df 100644 --- a/tests/fixtures/imageshack.com.i-ip7wo0v7j.php +++ b/tests/fixtures/imageshack.com.i-ip7wo0v7j.php @@ -72,5 +72,6 @@ ], 'next_images' => [], 'prev_images' => [] - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/infogr.am.7743c36a-f3ca-4465-9a80-a8abbd5d8dc4.php b/tests/fixtures/infogr.am.7743c36a-f3ca-4465-9a80-a8abbd5d8dc4.php index 65805016..086d148c 100644 --- a/tests/fixtures/infogr.am.7743c36a-f3ca-4465-9a80-a8abbd5d8dc4.php +++ b/tests/fixtures/infogr.am.7743c36a-f3ca-4465-9a80-a8abbd5d8dc4.php @@ -41,5 +41,6 @@ 'height' => 600, 'author_url' => 'https://infogram.com/sabjnewsroom01', 'author_name' => 'Tony Quesada' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/jeanjean.bandcamp.com.track-coquin-l-l-phant.php b/tests/fixtures/jeanjean.bandcamp.com.track-coquin-l-l-phant.php index 606fc73b..7576c24a 100644 --- a/tests/fixtures/jeanjean.bandcamp.com.track-coquin-l-l-phant.php +++ b/tests/fixtures/jeanjean.bandcamp.com.track-coquin-l-l-phant.php @@ -177,5 +177,151 @@ ] ] ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + 'copyrightNotice' => 'All Rights Reserved', + '@id' => 'https://jeanjean.bandcamp.com/track/coquin-l-l-phant', + 'inAlbum' => [ + '@id' => 'https://jeanjean.bandcamp.com/album/symmetry', + '@type' => 'MusicAlbum', + 'name' => 'Symmetry' + ], + '@type' => [ + 'MusicRecording', + 'Product' + ], + 'byArtist' => [ + 'subjectOf' => [ + [ + '@type' => 'WebSite', + 'url' => 'https://jeanjean.bandcamp.com/music', + 'name' => 'music' + ], + [ + '@type' => 'WebSite', + 'url' => 'https://jeanjean.bandcamp.com/merch', + 'name' => 'merch' + ], + [ + '@type' => 'WebSite', + 'url' => 'https://jeanjean.bandcamp.com/community', + 'name' => 'community' + ] + ], + '@id' => 'https://jeanjean.bandcamp.com', + 'genre' => 'https://bandcamp.com/tag/rock', + '@type' => 'MusicGroup', + 'image' => 'https://f4.bcbits.com/img/0012283751_10.jpg', + 'additionalProperty' => [ + [ + 'value' => 1235691216, + '@type' => 'PropertyValue', + 'name' => 'band_id' + ], + [ + 'value' => 'EUR', + '@type' => 'PropertyValue', + 'name' => 'currency' + ] + ], + 'sameAs' => [ + 'http://www.facebook.com/jeanjeanmusic', + 'https://www.instagram.com/wearejeanjean/', + 'http://www.youtube.com/channel/UCOsMtEsuiqbqkFQ9oyqJhHg', + 'http://jeanjeanband.com/', + 'https://twitter.com/jeanjeanband' + ], + 'name' => 'Jean Jean' + ], + '@context' => 'https://schema.org', + 'duration' => 'P00H03M46S', + 'offers' => [ + 'priceSpecification' => [ + 'minPrice' => 1.0 + ], + 'priceCurrency' => 'EUR', + '@type' => 'Offer', + 'additionalProperty' => [ + [ + 'value' => 2, + '@type' => 'PropertyValue', + 'name' => 'download_pref' + ], + [ + 'value' => 1000.0, + '@type' => 'PropertyValue', + 'name' => 'max_price' + ], + [ + 'value' => 1.0, + '@type' => 'PropertyValue', + 'name' => 'min_price' + ] + ], + 'url' => 'https://jeanjean.bandcamp.com/track/coquin-l-l-phant#buy', + 'price' => 1.0, + 'availability' => 'OnlineOnly' + ], + 'additionalProperty' => [ + [ + 'value' => 2592086951, + '@type' => 'PropertyValue', + 'name' => 'track_id' + ], + [ + 'value' => 226.251, + '@type' => 'PropertyValue', + 'name' => 'duration_secs' + ], + [ + 'value' => 'https://t4.bcbits.com/stream/3a7928de52d6fa132b127481f7d9a0ea/mp3-128/2592086951?p=0&ts=1617636205&t=bec14e3e148c574bf56676ba4812a85d61d12561&token=1617636205_d1a065da6309e56a0174b61186b74b9e383f81d3', + '@type' => 'PropertyValue', + 'name' => 'file_mp3-128' + ], + [ + 'value' => 'all_rights_reserved', + '@type' => 'PropertyValue', + 'name' => 'license_name' + ], + [ + 'value' => true, + '@type' => 'PropertyValue', + 'name' => 'streaming' + ] + ], + 'dateModified' => '13 Sep 2013 18:03:29 GMT', + 'image' => 'https://f4.bcbits.com/img/a3289609405_10.jpg', + 'name' => 'Coquin L\'éléphant', + 'datePublished' => '15 Sep 2013 08:45:29 GMT', + 'keywords' => [ + 'Rock', + 'ambient', + 'electro-rock', + 'instrumental', + 'interstellar', + 'Sept Sorts' + ], + 'sponsor' => [ + [ + '@type' => 'Person', + 'url' => 'https://bandcamp.com/jaredremillard', + 'image' => 'https://f4.bcbits.com/img/0001850798_10.jpg', + 'name' => 'Jared ReMillard' + ], + [ + '@type' => 'Person', + 'url' => 'https://bandcamp.com/sheebypanda', + 'image' => 'https://f4.bcbits.com/img/0004764347_10.jpg', + 'name' => 'SheebyPanda' + ], + [ + '@type' => 'Person', + 'url' => 'https://bandcamp.com/tylerthornhill', + 'image' => 'https://f4.bcbits.com/img/0001705921_10.jpg', + 'name' => 'Tyler Thornhill' + ] + ] + ] + ] ]; diff --git a/tests/fixtures/jsfiddle.net.zhm5rjnz.php b/tests/fixtures/jsfiddle.net.zhm5rjnz.php index 70e32d57..8c016ab3 100644 --- a/tests/fixtures/jsfiddle.net.zhm5rjnz.php +++ b/tests/fixtures/jsfiddle.net.zhm5rjnz.php @@ -31,5 +31,6 @@ 'title' => 'Edit fiddle - JSFiddle - Code Playground', 'url' => 'http://jsfiddle.net/zhm5rjnz/', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/live.amcharts.com.cznjj.php b/tests/fixtures/live.amcharts.com.cznjj.php index 65f24974..b52b3557 100644 --- a/tests/fixtures/live.amcharts.com.cznjj.php +++ b/tests/fixtures/live.amcharts.com.cznjj.php @@ -42,5 +42,6 @@ 'thumbnail_url' => 'http://generated.amcharts.com/cz/czNjJ-full.png', 'thumbnail_width' => 404, 'thumbnail_height' => 300 - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/media.photobucket.com.user-ignwar-media-album-20deserts-moonrisemonumentvalleyutah.jpg.html.c07885ac4c85b35f31f6dc858d4d64b0.php b/tests/fixtures/media.photobucket.com.user-ignwar-media-album-20deserts-moonrisemonumentvalleyutah.jpg.html.c07885ac4c85b35f31f6dc858d4d64b0.php index 064be3df..105e4a5b 100644 --- a/tests/fixtures/media.photobucket.com.user-ignwar-media-album-20deserts-moonrisemonumentvalleyutah.jpg.html.c07885ac4c85b35f31f6dc858d4d64b0.php +++ b/tests/fixtures/media.photobucket.com.user-ignwar-media-album-20deserts-moonrisemonumentvalleyutah.jpg.html.c07885ac4c85b35f31f6dc858d4d64b0.php @@ -22,5 +22,6 @@ 'title' => 'My Library', 'url' => 'https://app.photobucket.com/u/Ignwar?filters%5Bterm%5D=sunsets&filters%5Bprimary%5D=images', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/open.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php b/tests/fixtures/open.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php index 9e67f45b..29f18cc1 100644 --- a/tests/fixtures/open.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php +++ b/tests/fixtures/open.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php @@ -781,5 +781,750 @@ 'thumbnail_url' => 'https://i.scdn.co/image/ab67616d00001e02022aca057f08a1d40c1f0733', 'thumbnail_width' => 300, 'thumbnail_height' => 300 + ], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.googleapis.com/', + '@type' => 'MusicAlbum', + '@id' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV', + 'url' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV', + 'name' => 'A Cantar con Xabarin (Vol. I & II)', + 'description' => 'Listen to A Cantar con Xabarin (Vol. I & II) on Spotify. Various Artists · Compilation · 1996 · 44 songs.', + 'datePublished' => '1996-03-05', + 'potentialAction' => [ + '@type' => 'ListenAction', + 'target' => [ + [ + '@type' => 'EntryPoint', + 'urlTemplate' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV?autoplay=true', + 'actionPlatform' => [ + 'http://schema.org/DesktopWebPlatform', + 'http://schema.org/IOSPlatform', + 'http://schema.googleapis.com/GoogleAudioCast', + 'http://schema.googleapis.com/GoogleVideoCast' + ] + ], + 'android-app://com.spotify.music/spotify/album/7s66wU1XJ2NsUuWM2NKiUV/play' + ], + 'expectsAcceptanceOf' => [ + '@type' => 'Offer', + 'category' => 'free', + 'eligibleRegion' => [ + [ + '@type' => 'Country', + 'name' => 'AD' + ], + [ + '@type' => 'Country', + 'name' => 'AE' + ], + [ + '@type' => 'Country', + 'name' => 'AG' + ], + [ + '@type' => 'Country', + 'name' => 'AL' + ], + [ + '@type' => 'Country', + 'name' => 'AM' + ], + [ + '@type' => 'Country', + 'name' => 'AO' + ], + [ + '@type' => 'Country', + 'name' => 'AR' + ], + [ + '@type' => 'Country', + 'name' => 'AT' + ], + [ + '@type' => 'Country', + 'name' => 'AU' + ], + [ + '@type' => 'Country', + 'name' => 'AZ' + ], + [ + '@type' => 'Country', + 'name' => 'BA' + ], + [ + '@type' => 'Country', + 'name' => 'BB' + ], + [ + '@type' => 'Country', + 'name' => 'BD' + ], + [ + '@type' => 'Country', + 'name' => 'BE' + ], + [ + '@type' => 'Country', + 'name' => 'BF' + ], + [ + '@type' => 'Country', + 'name' => 'BG' + ], + [ + '@type' => 'Country', + 'name' => 'BH' + ], + [ + '@type' => 'Country', + 'name' => 'BI' + ], + [ + '@type' => 'Country', + 'name' => 'BJ' + ], + [ + '@type' => 'Country', + 'name' => 'BN' + ], + [ + '@type' => 'Country', + 'name' => 'BO' + ], + [ + '@type' => 'Country', + 'name' => 'BR' + ], + [ + '@type' => 'Country', + 'name' => 'BS' + ], + [ + '@type' => 'Country', + 'name' => 'BT' + ], + [ + '@type' => 'Country', + 'name' => 'BW' + ], + [ + '@type' => 'Country', + 'name' => 'BY' + ], + [ + '@type' => 'Country', + 'name' => 'BZ' + ], + [ + '@type' => 'Country', + 'name' => 'CA' + ], + [ + '@type' => 'Country', + 'name' => 'CH' + ], + [ + '@type' => 'Country', + 'name' => 'CI' + ], + [ + '@type' => 'Country', + 'name' => 'CL' + ], + [ + '@type' => 'Country', + 'name' => 'CM' + ], + [ + '@type' => 'Country', + 'name' => 'CO' + ], + [ + '@type' => 'Country', + 'name' => 'CR' + ], + [ + '@type' => 'Country', + 'name' => 'CV' + ], + [ + '@type' => 'Country', + 'name' => 'CW' + ], + [ + '@type' => 'Country', + 'name' => 'CY' + ], + [ + '@type' => 'Country', + 'name' => 'CZ' + ], + [ + '@type' => 'Country', + 'name' => 'DE' + ], + [ + '@type' => 'Country', + 'name' => 'DJ' + ], + [ + '@type' => 'Country', + 'name' => 'DK' + ], + [ + '@type' => 'Country', + 'name' => 'DM' + ], + [ + '@type' => 'Country', + 'name' => 'DO' + ], + [ + '@type' => 'Country', + 'name' => 'DZ' + ], + [ + '@type' => 'Country', + 'name' => 'EC' + ], + [ + '@type' => 'Country', + 'name' => 'EE' + ], + [ + '@type' => 'Country', + 'name' => 'EG' + ], + [ + '@type' => 'Country', + 'name' => 'ES' + ], + [ + '@type' => 'Country', + 'name' => 'FI' + ], + [ + '@type' => 'Country', + 'name' => 'FJ' + ], + [ + '@type' => 'Country', + 'name' => 'FM' + ], + [ + '@type' => 'Country', + 'name' => 'FR' + ], + [ + '@type' => 'Country', + 'name' => 'GA' + ], + [ + '@type' => 'Country', + 'name' => 'GB' + ], + [ + '@type' => 'Country', + 'name' => 'GD' + ], + [ + '@type' => 'Country', + 'name' => 'GE' + ], + [ + '@type' => 'Country', + 'name' => 'GH' + ], + [ + '@type' => 'Country', + 'name' => 'GM' + ], + [ + '@type' => 'Country', + 'name' => 'GN' + ], + [ + '@type' => 'Country', + 'name' => 'GQ' + ], + [ + '@type' => 'Country', + 'name' => 'GR' + ], + [ + '@type' => 'Country', + 'name' => 'GT' + ], + [ + '@type' => 'Country', + 'name' => 'GW' + ], + [ + '@type' => 'Country', + 'name' => 'GY' + ], + [ + '@type' => 'Country', + 'name' => 'HK' + ], + [ + '@type' => 'Country', + 'name' => 'HN' + ], + [ + '@type' => 'Country', + 'name' => 'HR' + ], + [ + '@type' => 'Country', + 'name' => 'HT' + ], + [ + '@type' => 'Country', + 'name' => 'HU' + ], + [ + '@type' => 'Country', + 'name' => 'ID' + ], + [ + '@type' => 'Country', + 'name' => 'IE' + ], + [ + '@type' => 'Country', + 'name' => 'IL' + ], + [ + '@type' => 'Country', + 'name' => 'IN' + ], + [ + '@type' => 'Country', + 'name' => 'IS' + ], + [ + '@type' => 'Country', + 'name' => 'IT' + ], + [ + '@type' => 'Country', + 'name' => 'JM' + ], + [ + '@type' => 'Country', + 'name' => 'JO' + ], + [ + '@type' => 'Country', + 'name' => 'JP' + ], + [ + '@type' => 'Country', + 'name' => 'KE' + ], + [ + '@type' => 'Country', + 'name' => 'KG' + ], + [ + '@type' => 'Country', + 'name' => 'KH' + ], + [ + '@type' => 'Country', + 'name' => 'KI' + ], + [ + '@type' => 'Country', + 'name' => 'KM' + ], + [ + '@type' => 'Country', + 'name' => 'KN' + ], + [ + '@type' => 'Country', + 'name' => 'KR' + ], + [ + '@type' => 'Country', + 'name' => 'KW' + ], + [ + '@type' => 'Country', + 'name' => 'KZ' + ], + [ + '@type' => 'Country', + 'name' => 'LA' + ], + [ + '@type' => 'Country', + 'name' => 'LB' + ], + [ + '@type' => 'Country', + 'name' => 'LC' + ], + [ + '@type' => 'Country', + 'name' => 'LI' + ], + [ + '@type' => 'Country', + 'name' => 'LK' + ], + [ + '@type' => 'Country', + 'name' => 'LR' + ], + [ + '@type' => 'Country', + 'name' => 'LS' + ], + [ + '@type' => 'Country', + 'name' => 'LT' + ], + [ + '@type' => 'Country', + 'name' => 'LU' + ], + [ + '@type' => 'Country', + 'name' => 'LV' + ], + [ + '@type' => 'Country', + 'name' => 'MA' + ], + [ + '@type' => 'Country', + 'name' => 'MC' + ], + [ + '@type' => 'Country', + 'name' => 'MD' + ], + [ + '@type' => 'Country', + 'name' => 'ME' + ], + [ + '@type' => 'Country', + 'name' => 'MG' + ], + [ + '@type' => 'Country', + 'name' => 'MH' + ], + [ + '@type' => 'Country', + 'name' => 'MK' + ], + [ + '@type' => 'Country', + 'name' => 'ML' + ], + [ + '@type' => 'Country', + 'name' => 'MN' + ], + [ + '@type' => 'Country', + 'name' => 'MO' + ], + [ + '@type' => 'Country', + 'name' => 'MR' + ], + [ + '@type' => 'Country', + 'name' => 'MT' + ], + [ + '@type' => 'Country', + 'name' => 'MU' + ], + [ + '@type' => 'Country', + 'name' => 'MV' + ], + [ + '@type' => 'Country', + 'name' => 'MW' + ], + [ + '@type' => 'Country', + 'name' => 'MX' + ], + [ + '@type' => 'Country', + 'name' => 'MY' + ], + [ + '@type' => 'Country', + 'name' => 'MZ' + ], + [ + '@type' => 'Country', + 'name' => 'NA' + ], + [ + '@type' => 'Country', + 'name' => 'NE' + ], + [ + '@type' => 'Country', + 'name' => 'NG' + ], + [ + '@type' => 'Country', + 'name' => 'NI' + ], + [ + '@type' => 'Country', + 'name' => 'NL' + ], + [ + '@type' => 'Country', + 'name' => 'NO' + ], + [ + '@type' => 'Country', + 'name' => 'NP' + ], + [ + '@type' => 'Country', + 'name' => 'NR' + ], + [ + '@type' => 'Country', + 'name' => 'NZ' + ], + [ + '@type' => 'Country', + 'name' => 'OM' + ], + [ + '@type' => 'Country', + 'name' => 'PA' + ], + [ + '@type' => 'Country', + 'name' => 'PE' + ], + [ + '@type' => 'Country', + 'name' => 'PG' + ], + [ + '@type' => 'Country', + 'name' => 'PH' + ], + [ + '@type' => 'Country', + 'name' => 'PK' + ], + [ + '@type' => 'Country', + 'name' => 'PL' + ], + [ + '@type' => 'Country', + 'name' => 'PS' + ], + [ + '@type' => 'Country', + 'name' => 'PT' + ], + [ + '@type' => 'Country', + 'name' => 'PW' + ], + [ + '@type' => 'Country', + 'name' => 'PY' + ], + [ + '@type' => 'Country', + 'name' => 'QA' + ], + [ + '@type' => 'Country', + 'name' => 'RO' + ], + [ + '@type' => 'Country', + 'name' => 'RS' + ], + [ + '@type' => 'Country', + 'name' => 'RU' + ], + [ + '@type' => 'Country', + 'name' => 'RW' + ], + [ + '@type' => 'Country', + 'name' => 'SA' + ], + [ + '@type' => 'Country', + 'name' => 'SB' + ], + [ + '@type' => 'Country', + 'name' => 'SC' + ], + [ + '@type' => 'Country', + 'name' => 'SE' + ], + [ + '@type' => 'Country', + 'name' => 'SG' + ], + [ + '@type' => 'Country', + 'name' => 'SI' + ], + [ + '@type' => 'Country', + 'name' => 'SK' + ], + [ + '@type' => 'Country', + 'name' => 'SL' + ], + [ + '@type' => 'Country', + 'name' => 'SM' + ], + [ + '@type' => 'Country', + 'name' => 'SN' + ], + [ + '@type' => 'Country', + 'name' => 'SR' + ], + [ + '@type' => 'Country', + 'name' => 'ST' + ], + [ + '@type' => 'Country', + 'name' => 'SV' + ], + [ + '@type' => 'Country', + 'name' => 'SZ' + ], + [ + '@type' => 'Country', + 'name' => 'TD' + ], + [ + '@type' => 'Country', + 'name' => 'TG' + ], + [ + '@type' => 'Country', + 'name' => 'TH' + ], + [ + '@type' => 'Country', + 'name' => 'TL' + ], + [ + '@type' => 'Country', + 'name' => 'TN' + ], + [ + '@type' => 'Country', + 'name' => 'TO' + ], + [ + '@type' => 'Country', + 'name' => 'TR' + ], + [ + '@type' => 'Country', + 'name' => 'TT' + ], + [ + '@type' => 'Country', + 'name' => 'TV' + ], + [ + '@type' => 'Country', + 'name' => 'TW' + ], + [ + '@type' => 'Country', + 'name' => 'TZ' + ], + [ + '@type' => 'Country', + 'name' => 'UA' + ], + [ + '@type' => 'Country', + 'name' => 'UG' + ], + [ + '@type' => 'Country', + 'name' => 'US' + ], + [ + '@type' => 'Country', + 'name' => 'UY' + ], + [ + '@type' => 'Country', + 'name' => 'UZ' + ], + [ + '@type' => 'Country', + 'name' => 'VC' + ], + [ + '@type' => 'Country', + 'name' => 'VN' + ], + [ + '@type' => 'Country', + 'name' => 'VU' + ], + [ + '@type' => 'Country', + 'name' => 'WS' + ], + [ + '@type' => 'Country', + 'name' => 'XK' + ], + [ + '@type' => 'Country', + 'name' => 'ZA' + ], + [ + '@type' => 'Country', + 'name' => 'ZM' + ], + [ + '@type' => 'Country', + 'name' => 'ZW' + ] + ] + ] + ] + ] ] ]; diff --git a/tests/fixtures/output.jsbin.com.vonesu-10.php b/tests/fixtures/output.jsbin.com.vonesu-10.php index a8302873..702d3767 100644 --- a/tests/fixtures/output.jsbin.com.vonesu-10.php +++ b/tests/fixtures/output.jsbin.com.vonesu-10.php @@ -35,5 +35,6 @@ 'width' => 320, 'height' => 240, 'html' => '' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/pachunka.deviantart.com.art-cope-145564099.php b/tests/fixtures/pachunka.deviantart.com.art-cope-145564099.php index d51c424f..6c589650 100644 --- a/tests/fixtures/pachunka.deviantart.com.art-cope-145564099.php +++ b/tests/fixtures/pachunka.deviantart.com.art-cope-145564099.php @@ -22,5 +22,6 @@ 'title' => 'Cope by pachunka on DeviantArt', 'url' => 'https://www.deviantart.com/pachunka/art/Cope-145564099', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/pastebin.com.d4biutrm.php b/tests/fixtures/pastebin.com.d4biutrm.php index f114a1be..3489ba95 100644 --- a/tests/fixtures/pastebin.com.d4biutrm.php +++ b/tests/fixtures/pastebin.com.d4biutrm.php @@ -22,5 +22,6 @@ 'title' => 'Pushing new git submodule to Heroku - Pastebin.com', 'url' => 'https://pastebin.com/d4biUtRm', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/play.cadenaser.com.audio-001rd010000004275766.php b/tests/fixtures/play.cadenaser.com.audio-001rd010000004275766.php index 4960916d..cef0c0bb 100644 --- a/tests/fixtures/play.cadenaser.com.audio-001rd010000004275766.php +++ b/tests/fixtures/play.cadenaser.com.audio-001rd010000004275766.php @@ -48,5 +48,42 @@ ] ] ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + '@context' => 'https://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => [ + [ + '@type' => 'ListItem', + 'position' => 1, + 'item' => [ + '@id' => 'https://play.cadenaser.com/', + 'name' => 'PlaySER' + ] + ], + [ + '@type' => 'ListItem', + 'position' => 2, + 'item' => [ + '@id' => 'https://play.cadenaser.com/programa/hoy_por_hoy/', + 'name' => 'Hoy por Hoy' + ] + ] + ] + ], + [ + '@context' => 'https://schema.org', + '@type' => 'Corporation', + 'name' => 'cadenaser.com', + 'url' => 'https://cadenaser.com', + 'logo' => 'https://play.cadenaser.com/bundles/playserweb/img/logo_playser.svg', + 'sameAs' => [ + 'https://www.facebook.com/cadenaser', + 'https://twitter.com/La_SER', + 'https://plus.google.com/+cadenaser/', + 'https://www.youtube.com/user/cadenaser' + ] + ] + ] ]; diff --git a/tests/fixtures/play.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php b/tests/fixtures/play.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php index 9e67f45b..29f18cc1 100644 --- a/tests/fixtures/play.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php +++ b/tests/fixtures/play.spotify.com.album-7s66wu1xj2nsuuwm2nkiuv.php @@ -781,5 +781,750 @@ 'thumbnail_url' => 'https://i.scdn.co/image/ab67616d00001e02022aca057f08a1d40c1f0733', 'thumbnail_width' => 300, 'thumbnail_height' => 300 + ], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.googleapis.com/', + '@type' => 'MusicAlbum', + '@id' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV', + 'url' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV', + 'name' => 'A Cantar con Xabarin (Vol. I & II)', + 'description' => 'Listen to A Cantar con Xabarin (Vol. I & II) on Spotify. Various Artists · Compilation · 1996 · 44 songs.', + 'datePublished' => '1996-03-05', + 'potentialAction' => [ + '@type' => 'ListenAction', + 'target' => [ + [ + '@type' => 'EntryPoint', + 'urlTemplate' => 'https://open.spotify.com/album/7s66wU1XJ2NsUuWM2NKiUV?autoplay=true', + 'actionPlatform' => [ + 'http://schema.org/DesktopWebPlatform', + 'http://schema.org/IOSPlatform', + 'http://schema.googleapis.com/GoogleAudioCast', + 'http://schema.googleapis.com/GoogleVideoCast' + ] + ], + 'android-app://com.spotify.music/spotify/album/7s66wU1XJ2NsUuWM2NKiUV/play' + ], + 'expectsAcceptanceOf' => [ + '@type' => 'Offer', + 'category' => 'free', + 'eligibleRegion' => [ + [ + '@type' => 'Country', + 'name' => 'AD' + ], + [ + '@type' => 'Country', + 'name' => 'AE' + ], + [ + '@type' => 'Country', + 'name' => 'AG' + ], + [ + '@type' => 'Country', + 'name' => 'AL' + ], + [ + '@type' => 'Country', + 'name' => 'AM' + ], + [ + '@type' => 'Country', + 'name' => 'AO' + ], + [ + '@type' => 'Country', + 'name' => 'AR' + ], + [ + '@type' => 'Country', + 'name' => 'AT' + ], + [ + '@type' => 'Country', + 'name' => 'AU' + ], + [ + '@type' => 'Country', + 'name' => 'AZ' + ], + [ + '@type' => 'Country', + 'name' => 'BA' + ], + [ + '@type' => 'Country', + 'name' => 'BB' + ], + [ + '@type' => 'Country', + 'name' => 'BD' + ], + [ + '@type' => 'Country', + 'name' => 'BE' + ], + [ + '@type' => 'Country', + 'name' => 'BF' + ], + [ + '@type' => 'Country', + 'name' => 'BG' + ], + [ + '@type' => 'Country', + 'name' => 'BH' + ], + [ + '@type' => 'Country', + 'name' => 'BI' + ], + [ + '@type' => 'Country', + 'name' => 'BJ' + ], + [ + '@type' => 'Country', + 'name' => 'BN' + ], + [ + '@type' => 'Country', + 'name' => 'BO' + ], + [ + '@type' => 'Country', + 'name' => 'BR' + ], + [ + '@type' => 'Country', + 'name' => 'BS' + ], + [ + '@type' => 'Country', + 'name' => 'BT' + ], + [ + '@type' => 'Country', + 'name' => 'BW' + ], + [ + '@type' => 'Country', + 'name' => 'BY' + ], + [ + '@type' => 'Country', + 'name' => 'BZ' + ], + [ + '@type' => 'Country', + 'name' => 'CA' + ], + [ + '@type' => 'Country', + 'name' => 'CH' + ], + [ + '@type' => 'Country', + 'name' => 'CI' + ], + [ + '@type' => 'Country', + 'name' => 'CL' + ], + [ + '@type' => 'Country', + 'name' => 'CM' + ], + [ + '@type' => 'Country', + 'name' => 'CO' + ], + [ + '@type' => 'Country', + 'name' => 'CR' + ], + [ + '@type' => 'Country', + 'name' => 'CV' + ], + [ + '@type' => 'Country', + 'name' => 'CW' + ], + [ + '@type' => 'Country', + 'name' => 'CY' + ], + [ + '@type' => 'Country', + 'name' => 'CZ' + ], + [ + '@type' => 'Country', + 'name' => 'DE' + ], + [ + '@type' => 'Country', + 'name' => 'DJ' + ], + [ + '@type' => 'Country', + 'name' => 'DK' + ], + [ + '@type' => 'Country', + 'name' => 'DM' + ], + [ + '@type' => 'Country', + 'name' => 'DO' + ], + [ + '@type' => 'Country', + 'name' => 'DZ' + ], + [ + '@type' => 'Country', + 'name' => 'EC' + ], + [ + '@type' => 'Country', + 'name' => 'EE' + ], + [ + '@type' => 'Country', + 'name' => 'EG' + ], + [ + '@type' => 'Country', + 'name' => 'ES' + ], + [ + '@type' => 'Country', + 'name' => 'FI' + ], + [ + '@type' => 'Country', + 'name' => 'FJ' + ], + [ + '@type' => 'Country', + 'name' => 'FM' + ], + [ + '@type' => 'Country', + 'name' => 'FR' + ], + [ + '@type' => 'Country', + 'name' => 'GA' + ], + [ + '@type' => 'Country', + 'name' => 'GB' + ], + [ + '@type' => 'Country', + 'name' => 'GD' + ], + [ + '@type' => 'Country', + 'name' => 'GE' + ], + [ + '@type' => 'Country', + 'name' => 'GH' + ], + [ + '@type' => 'Country', + 'name' => 'GM' + ], + [ + '@type' => 'Country', + 'name' => 'GN' + ], + [ + '@type' => 'Country', + 'name' => 'GQ' + ], + [ + '@type' => 'Country', + 'name' => 'GR' + ], + [ + '@type' => 'Country', + 'name' => 'GT' + ], + [ + '@type' => 'Country', + 'name' => 'GW' + ], + [ + '@type' => 'Country', + 'name' => 'GY' + ], + [ + '@type' => 'Country', + 'name' => 'HK' + ], + [ + '@type' => 'Country', + 'name' => 'HN' + ], + [ + '@type' => 'Country', + 'name' => 'HR' + ], + [ + '@type' => 'Country', + 'name' => 'HT' + ], + [ + '@type' => 'Country', + 'name' => 'HU' + ], + [ + '@type' => 'Country', + 'name' => 'ID' + ], + [ + '@type' => 'Country', + 'name' => 'IE' + ], + [ + '@type' => 'Country', + 'name' => 'IL' + ], + [ + '@type' => 'Country', + 'name' => 'IN' + ], + [ + '@type' => 'Country', + 'name' => 'IS' + ], + [ + '@type' => 'Country', + 'name' => 'IT' + ], + [ + '@type' => 'Country', + 'name' => 'JM' + ], + [ + '@type' => 'Country', + 'name' => 'JO' + ], + [ + '@type' => 'Country', + 'name' => 'JP' + ], + [ + '@type' => 'Country', + 'name' => 'KE' + ], + [ + '@type' => 'Country', + 'name' => 'KG' + ], + [ + '@type' => 'Country', + 'name' => 'KH' + ], + [ + '@type' => 'Country', + 'name' => 'KI' + ], + [ + '@type' => 'Country', + 'name' => 'KM' + ], + [ + '@type' => 'Country', + 'name' => 'KN' + ], + [ + '@type' => 'Country', + 'name' => 'KR' + ], + [ + '@type' => 'Country', + 'name' => 'KW' + ], + [ + '@type' => 'Country', + 'name' => 'KZ' + ], + [ + '@type' => 'Country', + 'name' => 'LA' + ], + [ + '@type' => 'Country', + 'name' => 'LB' + ], + [ + '@type' => 'Country', + 'name' => 'LC' + ], + [ + '@type' => 'Country', + 'name' => 'LI' + ], + [ + '@type' => 'Country', + 'name' => 'LK' + ], + [ + '@type' => 'Country', + 'name' => 'LR' + ], + [ + '@type' => 'Country', + 'name' => 'LS' + ], + [ + '@type' => 'Country', + 'name' => 'LT' + ], + [ + '@type' => 'Country', + 'name' => 'LU' + ], + [ + '@type' => 'Country', + 'name' => 'LV' + ], + [ + '@type' => 'Country', + 'name' => 'MA' + ], + [ + '@type' => 'Country', + 'name' => 'MC' + ], + [ + '@type' => 'Country', + 'name' => 'MD' + ], + [ + '@type' => 'Country', + 'name' => 'ME' + ], + [ + '@type' => 'Country', + 'name' => 'MG' + ], + [ + '@type' => 'Country', + 'name' => 'MH' + ], + [ + '@type' => 'Country', + 'name' => 'MK' + ], + [ + '@type' => 'Country', + 'name' => 'ML' + ], + [ + '@type' => 'Country', + 'name' => 'MN' + ], + [ + '@type' => 'Country', + 'name' => 'MO' + ], + [ + '@type' => 'Country', + 'name' => 'MR' + ], + [ + '@type' => 'Country', + 'name' => 'MT' + ], + [ + '@type' => 'Country', + 'name' => 'MU' + ], + [ + '@type' => 'Country', + 'name' => 'MV' + ], + [ + '@type' => 'Country', + 'name' => 'MW' + ], + [ + '@type' => 'Country', + 'name' => 'MX' + ], + [ + '@type' => 'Country', + 'name' => 'MY' + ], + [ + '@type' => 'Country', + 'name' => 'MZ' + ], + [ + '@type' => 'Country', + 'name' => 'NA' + ], + [ + '@type' => 'Country', + 'name' => 'NE' + ], + [ + '@type' => 'Country', + 'name' => 'NG' + ], + [ + '@type' => 'Country', + 'name' => 'NI' + ], + [ + '@type' => 'Country', + 'name' => 'NL' + ], + [ + '@type' => 'Country', + 'name' => 'NO' + ], + [ + '@type' => 'Country', + 'name' => 'NP' + ], + [ + '@type' => 'Country', + 'name' => 'NR' + ], + [ + '@type' => 'Country', + 'name' => 'NZ' + ], + [ + '@type' => 'Country', + 'name' => 'OM' + ], + [ + '@type' => 'Country', + 'name' => 'PA' + ], + [ + '@type' => 'Country', + 'name' => 'PE' + ], + [ + '@type' => 'Country', + 'name' => 'PG' + ], + [ + '@type' => 'Country', + 'name' => 'PH' + ], + [ + '@type' => 'Country', + 'name' => 'PK' + ], + [ + '@type' => 'Country', + 'name' => 'PL' + ], + [ + '@type' => 'Country', + 'name' => 'PS' + ], + [ + '@type' => 'Country', + 'name' => 'PT' + ], + [ + '@type' => 'Country', + 'name' => 'PW' + ], + [ + '@type' => 'Country', + 'name' => 'PY' + ], + [ + '@type' => 'Country', + 'name' => 'QA' + ], + [ + '@type' => 'Country', + 'name' => 'RO' + ], + [ + '@type' => 'Country', + 'name' => 'RS' + ], + [ + '@type' => 'Country', + 'name' => 'RU' + ], + [ + '@type' => 'Country', + 'name' => 'RW' + ], + [ + '@type' => 'Country', + 'name' => 'SA' + ], + [ + '@type' => 'Country', + 'name' => 'SB' + ], + [ + '@type' => 'Country', + 'name' => 'SC' + ], + [ + '@type' => 'Country', + 'name' => 'SE' + ], + [ + '@type' => 'Country', + 'name' => 'SG' + ], + [ + '@type' => 'Country', + 'name' => 'SI' + ], + [ + '@type' => 'Country', + 'name' => 'SK' + ], + [ + '@type' => 'Country', + 'name' => 'SL' + ], + [ + '@type' => 'Country', + 'name' => 'SM' + ], + [ + '@type' => 'Country', + 'name' => 'SN' + ], + [ + '@type' => 'Country', + 'name' => 'SR' + ], + [ + '@type' => 'Country', + 'name' => 'ST' + ], + [ + '@type' => 'Country', + 'name' => 'SV' + ], + [ + '@type' => 'Country', + 'name' => 'SZ' + ], + [ + '@type' => 'Country', + 'name' => 'TD' + ], + [ + '@type' => 'Country', + 'name' => 'TG' + ], + [ + '@type' => 'Country', + 'name' => 'TH' + ], + [ + '@type' => 'Country', + 'name' => 'TL' + ], + [ + '@type' => 'Country', + 'name' => 'TN' + ], + [ + '@type' => 'Country', + 'name' => 'TO' + ], + [ + '@type' => 'Country', + 'name' => 'TR' + ], + [ + '@type' => 'Country', + 'name' => 'TT' + ], + [ + '@type' => 'Country', + 'name' => 'TV' + ], + [ + '@type' => 'Country', + 'name' => 'TW' + ], + [ + '@type' => 'Country', + 'name' => 'TZ' + ], + [ + '@type' => 'Country', + 'name' => 'UA' + ], + [ + '@type' => 'Country', + 'name' => 'UG' + ], + [ + '@type' => 'Country', + 'name' => 'US' + ], + [ + '@type' => 'Country', + 'name' => 'UY' + ], + [ + '@type' => 'Country', + 'name' => 'UZ' + ], + [ + '@type' => 'Country', + 'name' => 'VC' + ], + [ + '@type' => 'Country', + 'name' => 'VN' + ], + [ + '@type' => 'Country', + 'name' => 'VU' + ], + [ + '@type' => 'Country', + 'name' => 'WS' + ], + [ + '@type' => 'Country', + 'name' => 'XK' + ], + [ + '@type' => 'Country', + 'name' => 'ZA' + ], + [ + '@type' => 'Country', + 'name' => 'ZM' + ], + [ + '@type' => 'Country', + 'name' => 'ZW' + ] + ] + ] + ] + ] ] ]; diff --git a/tests/fixtures/polldaddy.com.poll-7012505.php b/tests/fixtures/polldaddy.com.poll-7012505.php index c6e41898..cb98357e 100644 --- a/tests/fixtures/polldaddy.com.poll-7012505.php +++ b/tests/fixtures/polldaddy.com.poll-7012505.php @@ -36,5 +36,6 @@ 'provider_url' => 'https://crowdsignal.com', 'title' => 'Which design do you prefer?', 'html' => '' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/sassmeister.com.gist-1122e441f0434ec6eb2a.php b/tests/fixtures/sassmeister.com.gist-1122e441f0434ec6eb2a.php index ab14442b..88059153 100644 --- a/tests/fixtures/sassmeister.com.gist-1122e441f0434ec6eb2a.php +++ b/tests/fixtures/sassmeister.com.gist-1122e441f0434ec6eb2a.php @@ -27,5 +27,6 @@ 'title' => 'SassMeister | The Sass Playground!', 'url' => 'https://www.sassmeister.com/gist/1122e441f0434ec6eb2a', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/slides.com.alexwalker-responsive-svg.php b/tests/fixtures/slides.com.alexwalker-responsive-svg.php index a41ae245..0b3bb06f 100644 --- a/tests/fixtures/slides.com.alexwalker-responsive-svg.php +++ b/tests/fixtures/slides.com.alexwalker-responsive-svg.php @@ -27,5 +27,6 @@ 'title' => 'responsive-svg', 'url' => 'http://slides.com/alexwalker/responsive-svg/', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/snipplr.com.view-72914-better-html-5-basic-starter-template.php b/tests/fixtures/snipplr.com.view-72914-better-html-5-basic-starter-template.php index 23e37f8a..14d694e6 100644 --- a/tests/fixtures/snipplr.com.view-72914-better-html-5-basic-starter-template.php +++ b/tests/fixtures/snipplr.com.view-72914-better-html-5-basic-starter-template.php @@ -27,5 +27,6 @@ 'title' => 'Better HTML 5 basic starter template - HTML Snipplr Social Repository', 'url' => 'https://snipplr.com/view/72914/better-html-5-basic-starter-template', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/soundcloud.com.bruceneilmusic.php b/tests/fixtures/soundcloud.com.bruceneilmusic.php index 601b35e1..5d635f55 100644 --- a/tests/fixtures/soundcloud.com.bruceneilmusic.php +++ b/tests/fixtures/soundcloud.com.bruceneilmusic.php @@ -49,5 +49,6 @@ 'html' => '', 'author_name' => 'Bruce Neil', 'author_url' => 'https://soundcloud.com/bruceneilmusic' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/soundcloud.com.ididthat-1-lowe-ct-cape-times-world-cup.php b/tests/fixtures/soundcloud.com.ididthat-1-lowe-ct-cape-times-world-cup.php index 3932a8da..1b284744 100644 --- a/tests/fixtures/soundcloud.com.ididthat-1-lowe-ct-cape-times-world-cup.php +++ b/tests/fixtures/soundcloud.com.ididthat-1-lowe-ct-cape-times-world-cup.php @@ -49,5 +49,6 @@ 'html' => '', 'author_name' => 'IDIDTHAT.co', 'author_url' => 'https://soundcloud.com/ididthat-1' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/soundcloud.com.zedsdead-zeds-dead-twin-shadow-lost-you-feat-dangelo-lacy.php b/tests/fixtures/soundcloud.com.zedsdead-zeds-dead-twin-shadow-lost-you-feat-dangelo-lacy.php index 39cf2fa9..cdae2051 100644 --- a/tests/fixtures/soundcloud.com.zedsdead-zeds-dead-twin-shadow-lost-you-feat-dangelo-lacy.php +++ b/tests/fixtures/soundcloud.com.zedsdead-zeds-dead-twin-shadow-lost-you-feat-dangelo-lacy.php @@ -61,5 +61,6 @@ 'html' => '', 'author_name' => 'Zeds Dead', 'author_url' => 'https://soundcloud.com/zedsdead' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/twitter.com.pepephone-status-436461658601713664.php b/tests/fixtures/twitter.com.pepephone-status-436461658601713664.php index b65251c7..cc7b20e5 100644 --- a/tests/fixtures/twitter.com.pepephone-status-436461658601713664.php +++ b/tests/fixtures/twitter.com.pepephone-status-436461658601713664.php @@ -95,4 +95,5 @@ 'version' => '1.0' ], 'api' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/vimeo.com.235352744.php b/tests/fixtures/vimeo.com.235352744.php index d434b09d..a551ead3 100644 --- a/tests/fixtures/vimeo.com.235352744.php +++ b/tests/fixtures/vimeo.com.235352744.php @@ -27,6 +27,62 @@ 'title' => 'Vimeo Live is here', 'url' => 'https://vimeo.com/235352744', 'linkedData' => [ + 'url' => 'https://vimeo.com/235352744', + 'thumbnailUrl' => 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F657162424_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png', + 'embedUrl' => 'https://player.vimeo.com/video/235352744', + 'name' => 'Vimeo Live is here', + 'description' => 'Professional live streaming is here. Learn more at vimeo.com/live', + 'height' => 1080, + 'width' => 1920, + 'playerType' => 'HTML5 Flash', + 'videoQuality' => 'HD', + 'duration' => 'PT00H01M15S', + 'uploadDate' => '2017-09-25T10:36:56-04:00', + 'dateModified' => '2021-04-04T08:57:58-04:00', + 'thumbnail' => [ + '@type' => 'ImageObject', + 'url' => 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F657162424_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png', + 'width' => 1280, + 'height' => 720 + ], + 'author' => [ + '@type' => 'Person', + 'name' => 'Vimeo', + 'url' => 'https://vimeo.com/vimeomarketing' + ], + 'potentialAction' => [ + '@type' => 'ViewAction', + 'target' => 'vimeo://app.vimeo.com/videos/235352744' + ], + '@type' => 'VideoObject', + '@context' => 'http://schema.org' + ], + 'oEmbed' => [ + 'type' => 'video', + 'version' => '1.0', + 'provider_name' => 'Vimeo', + 'provider_url' => 'https://vimeo.com/', + 'title' => 'Vimeo Live is here', + 'author_name' => 'Vimeo', + 'author_url' => 'https://vimeo.com/vimeomarketing', + 'is_plus' => '0', + 'account_type' => 'live_premium', + 'html' => '', + 'width' => 640, + 'height' => 360, + 'duration' => 75, + 'description' => 'Professional live streaming is here. + +Learn more at vimeo.com/live', + 'thumbnail_url' => 'https://i.vimeocdn.com/video/657162424_640.jpg', + 'thumbnail_width' => 640, + 'thumbnail_height' => 360, + 'thumbnail_url_with_play_button' => 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F657162424_640.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png', + 'upload_date' => '2017-09-25 10:36:56', + 'video_id' => 235352744, + 'uri' => '/videos/235352744' + ], + 'allLinkedData' => [ [ 'url' => 'https://vimeo.com/235352744', 'thumbnailUrl' => 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F657162424_1280x720.jpg&src1=https%3A%2F%2Ff.vimeocdn.com%2Fimages_v6%2Fshare%2Fplay_icon_overlay.png', @@ -80,30 +136,5 @@ '@type' => 'BreadcrumbList', '@context' => 'http://schema.org' ] - ], - 'oEmbed' => [ - 'type' => 'video', - 'version' => '1.0', - 'provider_name' => 'Vimeo', - 'provider_url' => 'https://vimeo.com/', - 'title' => 'Vimeo Live is here', - 'author_name' => 'Vimeo', - 'author_url' => 'https://vimeo.com/vimeomarketing', - 'is_plus' => '0', - 'account_type' => 'live_premium', - 'html' => '', - 'width' => 640, - 'height' => 360, - 'duration' => 75, - 'description' => 'Professional live streaming is here. - -Learn more at vimeo.com/live', - 'thumbnail_url' => 'https://i.vimeocdn.com/video/657162424_640.jpg', - 'thumbnail_width' => 640, - 'thumbnail_height' => 360, - 'thumbnail_url_with_play_button' => 'https://i.vimeocdn.com/filter/overlay?src0=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F657162424_640.jpg&src1=http%3A%2F%2Ff.vimeocdn.com%2Fp%2Fimages%2Fcrawler_play.png', - 'upload_date' => '2017-09-25 10:36:56', - 'video_id' => 235352744, - 'uri' => '/videos/235352744' ] ]; diff --git a/tests/fixtures/wordpress.tv.2013-09-06-dave-ross-optimize-image-files-like-a-pro.php b/tests/fixtures/wordpress.tv.2013-09-06-dave-ross-optimize-image-files-like-a-pro.php index 52cb2ed0..6be3713b 100644 --- a/tests/fixtures/wordpress.tv.2013-09-06-dave-ross-optimize-image-files-like-a-pro.php +++ b/tests/fixtures/wordpress.tv.2013-09-06-dave-ross-optimize-image-files-like-a-pro.php @@ -71,5 +71,39 @@ 'html' => 'Images, even small ones, can be the biggest files that make up your site. Learn the tools, plugins, and theming techniques you’ll want to start using to shrink your page load times and save your mobile users a few bucks without sacrificing image quality. Presentation Slides »' + ], + 'allLinkedData' => [ + [ + '@context' => 'https://schema.org', + '@graph' => [ + [ + '@type' => 'VideoObject', + 'actor' => [ + [ + '@type' => 'Person', + 'name' => 'Dave Ross', + 'url' => 'https://wordpress.tv/speakers/dave-ross/' + ] + ], + 'name' => 'Dave Ross: Optimize Image Files Like a Pro', + 'url' => 'https://wordpress.tv/2013/09/06/dave-ross-optimize-image-files-like-a-pro/', + 'contentUrl' => [ + 'https://videos.files.wordpress.com/TqDCJmoq/optimize-image-files_hd.mp4', + 'https://videos.files.wordpress.com/TqDCJmoq/optimize-image-files_dvd.mp4', + 'https://videos.files.wordpress.com/TqDCJmoq/optimize-image-files_std.mp4' + ], + 'description' => 'Images, even small ones, can be the biggest files that make up your site. Learn the tools, plugins, and theming techniques you’ll want to start using to shrink your page load times and save your mobile users a few bucks without sacrificing image quality. + +Presentation Slides »', + 'duration' => 'P0DT00H29M20S', + 'height' => '1080', + 'inLanguage' => 'en', + 'isFamilyFriendly' => true, + 'thumbnailUrl' => 'https://videos.files.wordpress.com/TqDCJmoq/optimize-image-files_scruberthumbnail_0.jpg', + 'uploadDate' => '2013-09-06', + 'width' => '1920' + ] + ] + ] ] ]; diff --git a/tests/fixtures/www.23hq.com.zzleeper-photo-16600737.php b/tests/fixtures/www.23hq.com.zzleeper-photo-16600737.php index e7e10bac..5033b553 100644 --- a/tests/fixtures/www.23hq.com.zzleeper-photo-16600737.php +++ b/tests/fixtures/www.23hq.com.zzleeper-photo-16600737.php @@ -63,5 +63,6 @@ 'thumbnail_width' => 756, 'thumbnail_height' => 567, 'thumbnail_url' => 'http://www.23hq.com/16171062/16600737_ac392e8a4d667e4726fbafc8a21728d5_large.jpg' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.abanca.com.gl.php b/tests/fixtures/www.abanca.com.gl.php index aadf40d6..daeea813 100644 --- a/tests/fixtures/www.abanca.com.gl.php +++ b/tests/fixtures/www.abanca.com.gl.php @@ -48,5 +48,22 @@ ] ] ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.org', + '@type' => 'Organization', + 'name' => '', + 'url' => '//www.abanca.com', + 'logo' => '//www.abanca.com/img/logo-social.jpg', + 'sameAs' => [], + 'contactPoint' => [ + [ + '@type' => 'ContactPoint', + 'telephone' => '-', + 'contactType' => 'customer service' + ] + ] + ] + ] ]; diff --git a/tests/fixtures/www.aol.com.video-view-pile-of-recovering-foster-kittens-is-purrfect-595fe75985eb42109b69bedb.php b/tests/fixtures/www.aol.com.video-view-pile-of-recovering-foster-kittens-is-purrfect-595fe75985eb42109b69bedb.php index 4a429b48..a1895839 100644 --- a/tests/fixtures/www.aol.com.video-view-pile-of-recovering-foster-kittens-is-purrfect-595fe75985eb42109b69bedb.php +++ b/tests/fixtures/www.aol.com.video-view-pile-of-recovering-foster-kittens-is-purrfect-595fe75985eb42109b69bedb.php @@ -22,5 +22,6 @@ 'title' => 'AOL Video - Serving the best video content from AOL and around the web', 'url' => 'https://www.aol.com/video/view/pile-of-recovering-foster-kittens-is-purrfect/595fe75985eb42109b69bedb/', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.bbc.co.uk.news-uk-54222286.php b/tests/fixtures/www.bbc.co.uk.news-uk-54222286.php index 728bedd4..0a79fb0b 100644 --- a/tests/fixtures/www.bbc.co.uk.news-uk-54222286.php +++ b/tests/fixtures/www.bbc.co.uk.news-uk-54222286.php @@ -58,5 +58,41 @@ ] ] ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.org', + '@type' => 'ReportageNewsArticle', + 'url' => 'https://www.bbc.co.uk/news/uk-54222286', + 'publisher' => [ + '@type' => 'NewsMediaOrganization', + 'name' => 'BBC News', + 'publishingPrinciples' => 'http://www.bbc.co.uk/news/help-41670342', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.bbc.co.uk/news/special/2015/newsspec_10857/bbc_news_logo.png?cb=1' + ] + ], + 'datePublished' => '2020-09-20T06:33:33.000Z', + 'dateModified' => '2020-09-20T06:33:33.000Z', + 'headline' => 'Coronavirus: £10,000 fines for failing to self-isolate and lockdown life in photos', + 'image' => [ + '@type' => 'ImageObject', + 'width' => 976, + 'height' => 549, + 'url' => 'https://ichef.bbci.co.uk/news/1024/branded_news/CC94/production/_111527325_index_daily_update_version02_cv_976new.png' + ], + 'thumbnailUrl' => 'https://ichef.bbci.co.uk/news/1024/branded_news/CC94/production/_111527325_index_daily_update_version02_cv_976new.png', + 'mainEntityOfPage' => 'https://www.bbc.co.uk/news/uk-54222286', + 'author' => [ + '@type' => 'NewsMediaOrganization', + 'name' => 'BBC News', + 'noBylinesPolicy' => 'http://www.bbc.co.uk/news/help-41670342#authorexpertise', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.bbc.co.uk/news/special/2015/newsspec_10857/bbc_news_logo.png?cb=1' + ] + ] + ] + ] ]; diff --git a/tests/fixtures/www.dailymotion.com.video-xy0wd.php b/tests/fixtures/www.dailymotion.com.video-xy0wd.php index 1b2eeef8..193867c9 100644 --- a/tests/fixtures/www.dailymotion.com.video-xy0wd.php +++ b/tests/fixtures/www.dailymotion.com.video-xy0wd.php @@ -42,5 +42,6 @@ 'thumbnail_url' => 'https://s2.dmcdn.net/v/63aD1VtIdtBWR7nC/x240', 'thumbnail_width' => 320, 'thumbnail_height' => 240 - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.deviantart.com.art-misty-510056679.php b/tests/fixtures/www.deviantart.com.art-misty-510056679.php index f64924bb..9af2f4e2 100644 --- a/tests/fixtures/www.deviantart.com.art-misty-510056679.php +++ b/tests/fixtures/www.deviantart.com.art-misty-510056679.php @@ -22,5 +22,6 @@ 'title' => 'Misty by sakimichan on DeviantArt', 'url' => 'https://www.deviantart.com/sakimichan/art/Misty-510056679', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.flickr.com.photos-desescribir-sets-72157650686499888.php b/tests/fixtures/www.flickr.com.photos-desescribir-sets-72157650686499888.php index 8967af43..93d255b1 100644 --- a/tests/fixtures/www.flickr.com.photos-desescribir-sets-72157650686499888.php +++ b/tests/fixtures/www.flickr.com.photos-desescribir-sets-72157650686499888.php @@ -29,6 +29,57 @@ 'title' => 'Günther Förg. Verfolgen Malerei / Fundación Luís Seoane', 'url' => 'https://www.flickr.com/photos/desescribir/sets/72157650686499888', 'linkedData' => [ + '@context' => 'https://schema.org', + '@type' => 'BlogPosting', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.flickr.com/photos/desescribir/sets/72157650686499888' + ], + 'headline' => 'Günther Förg. Verfolgen Malerei / Fundación Luís Seoane', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://live.staticflickr.com/8572/16055522574_ce77fde14e_b.jpg', + 'height' => 680, + 'width' => 1024 + ], + 'author' => [ + '@type' => 'Person', + 'name' => 'desescribir', + 'sameAs' => 'https://www.flickr.com/photos/desescribir/' + ], + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'Flickr', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.flickr.com/images/opensearch-flickr-logo.png', + 'width' => 64, + 'height' => 64 + ] + ], + 'description' => 'Explore this photo album by desescribir on Flickr!' + ], + 'oEmbed' => [ + 'type' => 'rich', + 'flickr_type' => 'album', + 'title' => 'Günther Förg. Verfolgen Malerei / Fundación Luís Seoane', + 'author_name' => 'desescribir', + 'author_url' => 'https://www.flickr.com/photos/desescribir/', + 'width' => 800, + 'height' => 600, + 'web_page' => 'https://www.flickr.com/photos/desescribir/sets/72157650686499888', + 'thumbnail_url' => 'https://live.staticflickr.com/8572/16055522574_ce77fde14e_b.jpg', + 'thumbnail_width' => 800, + 'thumbnail_height' => 600, + 'web_page_short_url' => 'https://flic.kr/s/aHsk8hUbqq', + 'license_url' => 'https://creativecommons.org/licenses/by-nc-nd/2.0/', + 'html' => '\'Günther', + 'version' => '1.0', + 'cache_age' => 3600, + 'provider_name' => 'Flickr', + 'provider_url' => 'https://www.flickr.com/' + ], + 'allLinkedData' => [ [ '@context' => 'http://schema.org', '@type' => 'WebSite', @@ -59,26 +110,37 @@ 'https://plus.google.com/+flickr', 'https://www.pinterest.com/flickr' ] + ], + [ + '@context' => 'https://schema.org', + '@type' => 'BlogPosting', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.flickr.com/photos/desescribir/sets/72157650686499888' + ], + 'headline' => 'Günther Förg. Verfolgen Malerei / Fundación Luís Seoane', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://live.staticflickr.com/8572/16055522574_ce77fde14e_b.jpg', + 'height' => 680, + 'width' => 1024 + ], + 'author' => [ + '@type' => 'Person', + 'name' => 'desescribir', + 'sameAs' => 'https://www.flickr.com/photos/desescribir/' + ], + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'Flickr', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.flickr.com/images/opensearch-flickr-logo.png', + 'width' => 64, + 'height' => 64 + ] + ], + 'description' => 'Explore this photo album by desescribir on Flickr!' ] - ], - 'oEmbed' => [ - 'type' => 'rich', - 'flickr_type' => 'album', - 'title' => 'Günther Förg. Verfolgen Malerei / Fundación Luís Seoane', - 'author_name' => 'desescribir', - 'author_url' => 'https://www.flickr.com/photos/desescribir/', - 'width' => 800, - 'height' => 600, - 'web_page' => 'https://www.flickr.com/photos/desescribir/sets/72157650686499888', - 'thumbnail_url' => 'https://live.staticflickr.com/8572/16055522574_ce77fde14e_b.jpg', - 'thumbnail_width' => 800, - 'thumbnail_height' => 600, - 'web_page_short_url' => 'https://flic.kr/s/aHsk8hUbqq', - 'license_url' => 'https://creativecommons.org/licenses/by-nc-nd/2.0/', - 'html' => '\'Günther', - 'version' => '1.0', - 'cache_age' => 3600, - 'provider_name' => 'Flickr', - 'provider_url' => 'https://www.flickr.com/' ] ]; diff --git a/tests/fixtures/www.flickr.com.photos-desescribir.php b/tests/fixtures/www.flickr.com.photos-desescribir.php index 2f207583..cf7efc91 100644 --- a/tests/fixtures/www.flickr.com.photos-desescribir.php +++ b/tests/fixtures/www.flickr.com.photos-desescribir.php @@ -29,6 +29,38 @@ 'title' => 'desescribir', 'url' => 'https://www.flickr.com/photos/desescribir/', 'linkedData' => [ + '@context' => 'http://schema.org', + '@type' => 'WebSite', + 'name' => 'Flickr', + 'url' => 'https://www.flickr.com', + 'potentialAction' => [ + '@type' => 'SearchAction', + 'target' => 'https://www.flickr.com/search?text={search_term_string}&structured=yes', + 'query-input' => 'required name=search_term_string' + ] + ], + 'oEmbed' => [ + 'type' => 'rich', + 'flickr_type' => 'photostream', + 'title' => 'desescribir', + 'author_name' => 'desescribir', + 'author_url' => 'https://www.flickr.com/photos/desescribir/', + 'width' => 800, + 'height' => 600, + 'url' => 'https://www.flickr.com/photos/desescribir/', + 'web_page' => 'https://www.flickr.com/photos/desescribir/', + 'thumbnail_url' => 'https://live.staticflickr.com/8765/17244790083_d2f40f713f_b.jpg', + 'thumbnail_width' => 800, + 'thumbnail_height' => 600, + 'web_page_short_url' => 'https://flic.kr/ps/wRmwB', + 'license_url' => 'https://creativecommons.org/licenses/by-nc-nd/2.0/', + 'html' => '\'Cantos', + 'version' => '1.0', + 'cache_age' => 3600, + 'provider_name' => 'Flickr', + 'provider_url' => 'https://www.flickr.com/' + ], + 'allLinkedData' => [ [ '@context' => 'http://schema.org', '@type' => 'WebSite', @@ -59,27 +91,37 @@ 'https://plus.google.com/+flickr', 'https://www.pinterest.com/flickr' ] + ], + [ + '@context' => 'https://schema.org', + '@type' => 'BlogPosting', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.flickr.com/photos/desescribir/' + ], + 'headline' => 'desescribir', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://live.staticflickr.com/8765/17244790083_d2f40f713f_z.jpg', + 'height' => 454, + 'width' => 640 + ], + 'author' => [ + '@type' => 'Person', + 'name' => 'desescribir', + 'sameAs' => 'https://www.flickr.com/photos/desescribir/' + ], + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'Flickr', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.flickr.com/images/opensearch-flickr-logo.png', + 'width' => 64, + 'height' => 64 + ] + ], + 'description' => 'Explore desescribir\'s 618 photos on Flickr!' ] - ], - 'oEmbed' => [ - 'type' => 'rich', - 'flickr_type' => 'photostream', - 'title' => 'desescribir', - 'author_name' => 'desescribir', - 'author_url' => 'https://www.flickr.com/photos/desescribir/', - 'width' => 800, - 'height' => 600, - 'url' => 'https://www.flickr.com/photos/desescribir/', - 'web_page' => 'https://www.flickr.com/photos/desescribir/', - 'thumbnail_url' => 'https://live.staticflickr.com/8765/17244790083_d2f40f713f_b.jpg', - 'thumbnail_width' => 800, - 'thumbnail_height' => 600, - 'web_page_short_url' => 'https://flic.kr/ps/wRmwB', - 'license_url' => 'https://creativecommons.org/licenses/by-nc-nd/2.0/', - 'html' => '\'Cantos', - 'version' => '1.0', - 'cache_age' => 3600, - 'provider_name' => 'Flickr', - 'provider_url' => 'https://www.flickr.com/' ] ]; diff --git a/tests/fixtures/www.hookem.com.story-texas-shortstop-joe-baker-arrested-public-intoxication.php b/tests/fixtures/www.hookem.com.story-texas-shortstop-joe-baker-arrested-public-intoxication.php index 8e89c31c..cbc31bba 100644 --- a/tests/fixtures/www.hookem.com.story-texas-shortstop-joe-baker-arrested-public-intoxication.php +++ b/tests/fixtures/www.hookem.com.story-texas-shortstop-joe-baker-arrested-public-intoxication.php @@ -55,5 +55,38 @@ ], 'url' => 'https://www.hookem.com/' ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.org', + '@type' => 'WebPage', + 'author' => [ + '@type' => 'Person', + 'name' => 'Hookem.com Staff' + ], + 'dateModified' => '2021-04-03T23:43:58Z', + 'datePublished' => '2021-04-03T23:43:58Z', + 'headline' => 'Home', + 'image' => [], + 'keywords' => [ + 'ssts:home', + 'type:front' + ], + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.hookem.com/' + ], + 'publisher' => [ + '@type' => 'Organization', + 'logo' => [ + '@type' => 'ImageObject', + 'height' => 80, + 'url' => 'https://www.gannett-cdn.com/sites/hookem/images/site-nav-logo@2x.png', + 'width' => 297 + ], + 'name' => 'Hookem.com' + ], + 'url' => 'https://www.hookem.com/' + ] + ] ]; diff --git a/tests/fixtures/www.kickstarter.com.projects-1452363698-good-seed-craft-veggie-burgers.php b/tests/fixtures/www.kickstarter.com.projects-1452363698-good-seed-craft-veggie-burgers.php index df01933b..f7a7dcae 100644 --- a/tests/fixtures/www.kickstarter.com.projects-1452363698-good-seed-craft-veggie-burgers.php +++ b/tests/fixtures/www.kickstarter.com.projects-1452363698-good-seed-craft-veggie-burgers.php @@ -41,5 +41,6 @@ 'width' => 480, 'height' => 270.0, 'html' => '' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.meetup.com.es-gpul-labs-events-248885422.php b/tests/fixtures/www.meetup.com.es-gpul-labs-events-248885422.php index 4fd866d7..49957c45 100644 --- a/tests/fixtures/www.meetup.com.es-gpul-labs-events-248885422.php +++ b/tests/fixtures/www.meetup.com.es-gpul-labs-events-248885422.php @@ -91,5 +91,79 @@ 'url' => 'https://www.meetup.com/es/GPUL-Labs/' ] ], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.org', + '@type' => 'Event', + 'name' => 'Introducción a Flutter', + 'url' => 'https://www.meetup.com/es/GPUL-Labs/events/248885422/', + 'description' => 'Fernando Souto - MOBGEN + +Desde que Google anunció en el MWC que Flutter entraba en oficialmente beta, el interés por esta plataforma se ha multiplicado. + +Flutter es un SDK en lenguaje Dart para generar apps nativas multiplataforma, que permite un desarrollo eficaz, una interfaz de usuario expresiva y un buen rendimiento. + +Si estás interesado en saber más y aprender sobre Flutter apúntate. Haremos una introducción práctica al funcionamiento de Flutter desarollando un ejemplo práctico aplicando un', + 'startDate' => '2018-05-24T19:00+02:00', + 'endDate' => '2018-05-24T22:00+02:00', + 'eventStatus' => 'https://schema.org/EventScheduled', + 'eventAttendanceMode' => 'https://schema.org/OfflineEventAttendanceMode', + 'location' => [ + '@type' => 'Place', + 'name' => 'Vivero de empresas Accede Papagaio', + 'address' => [ + '@type' => 'PostalAddress', + 'addressLocality' => 'A Coruña', + 'addressCountry' => 'España', + 'streetAddress' => 'Rúa Hospital, 19, 15002' + ], + 'geo' => [ + '@type' => 'GeoCoordinates', + 'latitude' => 43.37335968017578, + 'longitude' => -8.399272918701172 + ] + ], + 'offers' => [ + '@type' => 'Offer', + 'price' => '0', + 'priceCurrency' => 'USD' + ], + 'organizer' => [ + '@type' => 'Organization', + 'name' => 'GPUL', + 'url' => 'https://www.meetup.com/es/GPUL-Labs/' + ] + ], + [ + '@context' => 'http://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => [ + [ + '@type' => 'ListItem', + 'position' => 1, + 'item' => [ + '@id' => 'https://www.meetup.com/es/GPUL-Labs/', + 'name' => 'GPUL' + ] + ], + [ + '@type' => 'ListItem', + 'position' => 2, + 'item' => [ + '@id' => 'https://www.meetup.com/es/GPUL-Labs/events/', + 'name' => 'Events' + ] + ], + [ + '@type' => 'ListItem', + 'position' => 3, + 'item' => [ + '@id' => 'https://www.meetup.com/es/GPUL-Labs/events/248885422/', + 'name' => 'Introducción a Flutter' + ] + ] + ] + ] + ] ]; diff --git a/tests/fixtures/www.pinterest.com.pin-106890191127977979.php b/tests/fixtures/www.pinterest.com.pin-106890191127977979.php index 13704e44..d7475d9e 100644 --- a/tests/fixtures/www.pinterest.com.pin-106890191127977979.php +++ b/tests/fixtures/www.pinterest.com.pin-106890191127977979.php @@ -41,5 +41,6 @@ 'thumbnail_url' => 'https://i.pinimg.com/236x/b5/34/13/b53413787f3a42c8b9d5b08a6fbb2124--jack-nicholson-jack-oconnell.jpg', 'thumbnail_width' => 236, 'thumbnail_height' => 295 - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.politico.com.story-2013-12-presidents-barack-obama-george-w-bush-second-term-101314.html.php b/tests/fixtures/www.politico.com.story-2013-12-presidents-barack-obama-george-w-bush-second-term-101314.html.php index 78b34c06..8be52d6e 100644 --- a/tests/fixtures/www.politico.com.story-2013-12-presidents-barack-obama-george-w-bush-second-term-101314.html.php +++ b/tests/fixtures/www.politico.com.story-2013-12-presidents-barack-obama-george-w-bush-second-term-101314.html.php @@ -37,5 +37,6 @@ 'version' => '1.0', 'type' => 'rich', 'html' => '' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.reddit.com.r-investing-comments-7pfpeq-buffett_on_cyrptocurrencies_i_can_say_almost_with.php b/tests/fixtures/www.reddit.com.r-investing-comments-7pfpeq-buffett_on_cyrptocurrencies_i_can_say_almost_with.php index 06c671e7..43a086b7 100644 --- a/tests/fixtures/www.reddit.com.r-investing-comments-7pfpeq-buffett_on_cyrptocurrencies_i_can_say_almost_with.php +++ b/tests/fixtures/www.reddit.com.r-investing-comments-7pfpeq-buffett_on_cyrptocurrencies_i_can_say_almost_with.php @@ -41,5 +41,6 @@ ', 'author_name' => 'dennisrieves' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.scribd.com.doc-110799637-synthesis-of-knowledge-effects-of-fire-and-thinning-treatments-on-understory-vegetation-in-dry-u-s-forests.php b/tests/fixtures/www.scribd.com.doc-110799637-synthesis-of-knowledge-effects-of-fire-and-thinning-treatments-on-understory-vegetation-in-dry-u-s-forests.php index d4cfe1c5..5efb10e7 100644 --- a/tests/fixtures/www.scribd.com.doc-110799637-synthesis-of-knowledge-effects-of-fire-and-thinning-treatments-on-understory-vegetation-in-dry-u-s-forests.php +++ b/tests/fixtures/www.scribd.com.doc-110799637-synthesis-of-knowledge-effects-of-fire-and-thinning-treatments-on-understory-vegetation-in-dry-u-s-forests.php @@ -66,5 +66,28 @@ 'html' => '' + ], + 'allLinkedData' => [ + [ + '@context' => 'http://schema.org', + '@type' => 'MediaObject', + 'additionalType' => 'Product', + 'name' => 'Synthesis of Knowledge: Effects of Fire and Thinning Treatments on Understory Vegetation in Dry U.S. Forests', + 'image' => [ + 'https://imgv2-1-f.scribdassets.com/img/document/110799637/149x198/ca766a678b/1521312948?v=1', + 'https://imgv2-2-f.scribdassets.com/img/document/110799637/298x396/889f159160/1521312948?v=1' + ], + 'aggregateRating' => [ + '@type' => 'AggregateRating', + 'ratingValue' => 5.0, + 'ratingCount' => 1 + ], + 'isAccessibleForFree' => 'False', + 'hasPart' => [ + '@type' => 'WebPageElement', + 'isAccessibleForFree' => 'False', + 'cssSelector' => '.blurred_page' + ] + ] ] ]; diff --git a/tests/fixtures/www.soundhelix.com.examples-mp3-soundhelix-song-1.mp3.php b/tests/fixtures/www.soundhelix.com.examples-mp3-soundhelix-song-1.mp3.php index 641c6d39..1d646d7b 100644 --- a/tests/fixtures/www.soundhelix.com.examples-mp3-soundhelix-song-1.mp3.php +++ b/tests/fixtures/www.soundhelix.com.examples-mp3-soundhelix-song-1.mp3.php @@ -27,5 +27,6 @@ 'title' => null, 'url' => 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.spreaker.com.user-angelclark-angel-clark-ice-cream-tocos.php b/tests/fixtures/www.spreaker.com.user-angelclark-angel-clark-ice-cream-tocos.php index 98e667e3..48334058 100644 --- a/tests/fixtures/www.spreaker.com.user-angelclark-angel-clark-ice-cream-tocos.php +++ b/tests/fixtures/www.spreaker.com.user-angelclark-angel-clark-ice-cream-tocos.php @@ -39,5 +39,6 @@ 'width' => 640, 'height' => 480, 'thumbnail_url' => 'https://d3wo5wojvuv7l.cloudfront.net/t_widget_player_cover_medium/images.spreaker.com/original/07176451fd3625d19c5e5d88d9f1bfbb.jpg' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.ted.com.talks-george_monbiot_for_more_wonder_rewild_the_world.07a0d4dfc7fba14d52025577270bbe9c.php b/tests/fixtures/www.ted.com.talks-george_monbiot_for_more_wonder_rewild_the_world.07a0d4dfc7fba14d52025577270bbe9c.php index 751c1759..7feb53ee 100644 --- a/tests/fixtures/www.ted.com.talks-george_monbiot_for_more_wonder_rewild_the_world.07a0d4dfc7fba14d52025577270bbe9c.php +++ b/tests/fixtures/www.ted.com.talks-george_monbiot_for_more_wonder_rewild_the_world.07a0d4dfc7fba14d52025577270bbe9c.php @@ -87,5 +87,6 @@ 'thumbnail_height' => 316, 'author_url' => 'https://www.ted.com/speakers/george_monbiot', 'html' => '' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.tiktok.com.a3noticias-video-6806030056956251397.php b/tests/fixtures/www.tiktok.com.a3noticias-video-6806030056956251397.php index 4b9d021c..1a660f53 100644 --- a/tests/fixtures/www.tiktok.com.a3noticias-video-6806030056956251397.php +++ b/tests/fixtures/www.tiktok.com.a3noticias-video-6806030056956251397.php @@ -102,5 +102,6 @@ 'thumbnail_url' => 'https://p77-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/165175e006354d838501378cfb325b79_1584652367?x-expires=1617570000&x-signature=ug9Nat5BeroYU6zWPlDXVO6EDak%3D', 'provider_url' => 'https://www.tiktok.com', 'provider_name' => 'TikTok' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.twitch.tv.twit.php b/tests/fixtures/www.twitch.tv.twit.php index fc5266e0..8195180d 100644 --- a/tests/fixtures/www.twitch.tv.twit.php +++ b/tests/fixtures/www.twitch.tv.twit.php @@ -31,5 +31,6 @@ 'title' => 'Twitch', 'url' => 'https://www.twitch.tv/twit', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.twitch.tv.videos-106400740.php b/tests/fixtures/www.twitch.tv.videos-106400740.php index 247a147b..d8b95775 100644 --- a/tests/fixtures/www.twitch.tv.videos-106400740.php +++ b/tests/fixtures/www.twitch.tv.videos-106400740.php @@ -31,5 +31,6 @@ 'title' => 'Twitch', 'url' => 'https://www.twitch.tv/videos/106400740', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.twitch.tv.videos-72749628.php b/tests/fixtures/www.twitch.tv.videos-72749628.php index cdcb20ea..c85d41ca 100644 --- a/tests/fixtures/www.twitch.tv.videos-72749628.php +++ b/tests/fixtures/www.twitch.tv.videos-72749628.php @@ -31,5 +31,6 @@ 'title' => 'Twitch', 'url' => 'https://www.twitch.tv/videos/72749628', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.ustream.tv.channel-red-shoes-billiards-60803-camera-1.php b/tests/fixtures/www.ustream.tv.channel-red-shoes-billiards-60803-camera-1.php index 06c5ec84..1ce5754c 100644 --- a/tests/fixtures/www.ustream.tv.channel-red-shoes-billiards-60803-camera-1.php +++ b/tests/fixtures/www.ustream.tv.channel-red-shoes-billiards-60803-camera-1.php @@ -40,5 +40,6 @@ 'thumbnail_url' => 'https://ustvstaticcdn2-a.akamaihd.net/i/channel/picture/1/1/9/5/11958409/11958409,120x90,r:2.jpg', 'type' => 'video', 'thumbnail_height' => 90 - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.viddler.com.v-bdce8c7.php b/tests/fixtures/www.viddler.com.v-bdce8c7.php index ed470d46..eceb4b1f 100644 --- a/tests/fixtures/www.viddler.com.v-bdce8c7.php +++ b/tests/fixtures/www.viddler.com.v-bdce8c7.php @@ -33,5 +33,6 @@ 'title' => 'Viddler Platform Overview', 'url' => 'https://www.viddler.com/v/bdce8c7', 'linkedData' => [], - 'oEmbed' => [] + 'oEmbed' => [], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.wired.com..1202600986b37d2c6a30336f82c671f8.php b/tests/fixtures/www.wired.com..1202600986b37d2c6a30336f82c671f8.php index 2d048b55..00d6c0b3 100644 --- a/tests/fixtures/www.wired.com..1202600986b37d2c6a30336f82c671f8.php +++ b/tests/fixtures/www.wired.com..1202600986b37d2c6a30336f82c671f8.php @@ -6,7 +6,7 @@ 'authorUrl' => 'https://www.wired.com/author/wired-staff/', 'cms' => null, 'code' => [ - 'html' => '
    Review: Yi 4K Action Camera
    ', + 'html' => '
    Review: Yi 4K Action Camera
    ', 'width' => 600, 'height' => 338, 'ratio' => 56.333 @@ -80,11 +80,596 @@ 'html' => '
    Review: Yi 4K Action Camera
    ', 'thumbnail_url' => 'https://www.wired.com/wp-content/uploads/2016/07/Yi-4KHP.jpg', 'thumbnail_width' => 600, 'thumbnail_height' => 337 + ], + 'allLinkedData' => [ + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2016/07/review-yi-4k-action-camera/' + ], + 'headline' => 'Review: Yi 4K Action Camera', + 'datePublished' => '2016-07-29T07:00:38+00:00', + 'dateModified' => '2017-06-12T18:27:35+00:00', + 'keywords' => [ + '4k' + ], + 'url' => 'https://www.wired.com/2016/07/review-yi-4k-action-camera/', + 'articleSection' => 'gear', + 'author' => [ + '@type' => 'Person', + 'name' => 'Brent Rose' + ], + 'description' => 'For nearly two years GoPro’s Hero4 Black has been the standard-bearer for action cameras. But there\'s a new contender.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2016/07/Yi-4KHP.jpg', + 'height' => 2680, + 'width' => 1507 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/04/geeks-guide-the-dispossessed/' + ], + 'headline' => '‘The Dispossessed’ Is Still One of Sci-Fi’s Smartest Books', + 'datePublished' => '2021-04-02T11:36:39+00:00', + 'dateModified' => '2021-04-02T11:36:39+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/04/geeks-guide-the-dispossessed/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'Ursula K. Le Guin\'s 1974 novel, about a society with no government or laws, remains a thoughtful exploration of politics and economics decades later.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/04/Science_geeksguide_2CDFJY0.jpg', + 'height' => 2400, + 'width' => 1600 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/03/geeks-guide-adventure-games/' + ], + 'headline' => 'It’s Never Been Easier to Make an Adventure Game', + 'datePublished' => '2021-03-26T11:40:18+00:00', + 'dateModified' => '2021-03-26T14:24:40+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/03/geeks-guide-adventure-games/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'The story-driven genre is enjoying an indie renaissance, thanks to new tools that are making the coding process simpler than ever.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/03/Culture_geeksguide_clip_boathouse_larger.jpg', + 'height' => 1200, + 'width' => 800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/03/geeks-guide-griffin-mcelroy/' + ], + 'headline' => 'Starting a Podcast Is Harder Than It Looks', + 'datePublished' => '2021-03-19T11:38:11+00:00', + 'dateModified' => '2021-03-19T11:38:11+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/03/geeks-guide-griffin-mcelroy/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'But Everybody Has a Podcast (Except You) author Griffin McElroy can help.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/03/Culture_podcast_1250239031.jpg', + 'height' => 2400, + 'width' => 1800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/03/geeks-guide-amazon-upload/' + ], + 'headline' => 'What If the Afterlife Had In-App Purchases?', + 'datePublished' => '2021-03-12T11:48:08+00:00', + 'dateModified' => '2021-03-12T11:48:08+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/03/geeks-guide-amazon-upload/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'The Amazon series Upload shows a comedic—and probably more realistic—version of what would happen if humans could live online after they die.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/03/Science_upload-UPLO_S1_Unit_108_0110RC_FNL_rgb.jpg', + 'height' => 2400, + 'width' => 1600 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/03/geeks-guide-drawing-chainmail/' + ], + 'headline' => 'Yes, Chainmail Is Really Hard to Draw', + 'datePublished' => '2021-03-05T11:30:34+00:00', + 'dateModified' => '2021-03-05T11:30:34+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/03/geeks-guide-drawing-chainmail/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'Ultima artist Denis Loubet knows this for a fact.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/03/Culture_GeeksGuide_2BXF8JA-1.png', + 'height' => 2400, + 'width' => 1800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/02/geeks-guide-blood-of-zeus/' + ], + 'headline' => '‘Blood of Zeus’ Combines Myth With Saturday Morning Cartoons', + 'datePublished' => '2021-02-26T11:34:19+00:00', + 'dateModified' => '2021-02-26T11:34:19+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy', + 'netflix' + ], + 'url' => 'https://www.wired.com/2021/02/geeks-guide-blood-of-zeus/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'The new Netflix animated series puts a new spin on old tales.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/02/culture_BloodofZeus_Season1_Episode1_00_13_58_20.jpg', + 'height' => 1620, + 'width' => 1080 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/02/geeks-guide-settle-alien-worlds/' + ], + 'headline' => 'What Would It Take to Actually Settle an Alien World?', + 'datePublished' => '2021-02-19T11:59:02+00:00', + 'dateModified' => '2021-02-19T12:13:00+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/02/geeks-guide-settle-alien-worlds/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'David Gerrold\'s new novel Hella is about a low-gravity planet inhabited by dinosaur-like aliens. It does deep on the logistics of settling an alien planet.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/02/geeks-guide-alien-planet.jpg', + 'height' => 2400, + 'width' => 1350 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/02/geeks-guide-his-dark-materials-2/' + ], + 'headline' => 'Mrs. Coulter Is One of the Best Villains on TV', + 'datePublished' => '2021-02-12T11:52:57+00:00', + 'dateModified' => '2021-02-12T11:52:57+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/02/geeks-guide-his-dark-materials-2/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'Ruth Wilson\'s character is the highlight of HBO\'s His Dark Materials.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/02/Culture_GeeksGuide_ruth-wilson_1.jpg', + 'height' => 1444, + 'width' => 963 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2019/09/apple-iphone-event-liveblog/' + ], + 'headline' => 'Apple Event Liveblog: All the iPhone News as It Happens', + 'datePublished' => '2019-09-10T06:00:17+00:00', + 'dateModified' => '2019-09-10T12:00:57+00:00', + 'keywords' => [ + 'apple', + 'iphone' + ], + 'url' => 'https://www.wired.com/2019/09/apple-iphone-event-liveblog/', + 'articleSection' => 'gear', + 'author' => [ + '@type' => 'Person', + 'name' => 'Michael Calore' + ], + 'description' => 'Join us for live commentary beginning at 1 pm Eastern, 10 am Pacific.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2019/09/Gear-Apple-Liveblog-FA-1157988242.jpg', + 'height' => 2400, + 'width' => 1679 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2019/06/apple-wwdc-2019-liveblog/' + ], + 'headline' => 'WWDC 2019 Liveblog: All the Apple News as It Happens', + 'datePublished' => '2019-06-03T06:01:54+00:00', + 'dateModified' => '2019-06-03T14:09:28+00:00', + 'keywords' => [ + 'apple', + 'liveblog', + 'wwdc' + ], + 'url' => 'https://www.wired.com/2019/06/apple-wwdc-2019-liveblog/', + 'articleSection' => 'gear', + 'author' => [ + '@type' => 'Person', + 'name' => 'Wired Staff' + ], + 'description' => 'Apple\'s developer conference kicks off June 3 at 10 am Pacific. Follow along with us for analysis and commentary from WIRED\'s editors.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2019/06/gear_wwdc_967230896.jpg', + 'height' => 2400, + 'width' => 1800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/03/geeks-guide-adventure-games/' + ], + 'headline' => 'It’s Never Been Easier to Make an Adventure Game', + 'datePublished' => '2021-03-26T11:40:18+00:00', + 'dateModified' => '2021-03-26T14:24:40+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/03/geeks-guide-adventure-games/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'The story-driven genre is enjoying an indie renaissance, thanks to new tools that are making the coding process simpler than ever.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/03/Culture_geeksguide_clip_boathouse_larger.jpg', + 'height' => 1200, + 'width' => 800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2019/04/facebook-f8-liveblog-2019/' + ], + 'headline' => 'F8 Liveblog: All the Facebook News as It Happens', + 'datePublished' => '2019-04-30T11:39:17+00:00', + 'dateModified' => '2019-04-30T13:03:50+00:00', + 'keywords' => [ + 'f8', + 'facebook', + 'liveblog' + ], + 'url' => 'https://www.wired.com/2019/04/facebook-f8-liveblog-2019/', + 'articleSection' => 'gear', + 'author' => [ + '@type' => 'Person', + 'name' => 'Wired Staff' + ], + 'description' => 'When Facebook kicks off its annual developer conference with a keynote address on Tuesday morning, we\'ll be liveblogging it right here.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2019/04/f8-953545066.jpg', + 'height' => 2399, + 'width' => 1823 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2019/03/apple-media-event-liveblog/' + ], + 'headline' => 'Apple Event Liveblog: All the News, as It Happens', + 'datePublished' => '2019-03-25T06:00:04+00:00', + 'dateModified' => '2019-03-25T12:05:50+00:00', + 'keywords' => [ + 'apple', + 'apple-event' + ], + 'url' => 'https://www.wired.com/2019/03/apple-media-event-liveblog/', + 'articleSection' => 'gear', + 'author' => [ + '@type' => 'Person', + 'name' => 'Wired Staff' + ], + 'description' => 'On Monday morning, Apple hosts an event to outline plans for its news distribution and media streaming services. Our live coverage starts at 9 am Pacific.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2019/03/timcook-967356920.jpg', + 'height' => 2400, + 'width' => 1800 + ] + ], + [ + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'WIRED', + 'logo' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/themes/Phoenix/assets/images/article-icon.jpg', + 'width' => '1024 px', + 'height' => '1024 px' + ] + ], + '@context' => 'http://schema.org', + '@type' => 'NewsArticle', + 'mainEntityOfPage' => [ + '@type' => 'WebPage', + '@id' => 'https://www.wired.com/2021/04/geeks-guide-the-dispossessed/' + ], + 'headline' => '‘The Dispossessed’ Is Still One of Sci-Fi’s Smartest Books', + 'datePublished' => '2021-04-02T11:36:39+00:00', + 'dateModified' => '2021-04-02T11:36:39+00:00', + 'keywords' => [ + 'geeks-guide-to-the-galaxy' + ], + 'url' => 'https://www.wired.com/2021/04/geeks-guide-the-dispossessed/', + 'articleSection' => 'culture', + 'author' => [ + '@type' => 'Person', + 'name' => 'Geek\'s Guide to the Galaxy' + ], + 'description' => 'Ursula K. Le Guin\'s 1974 novel, about a society with no government or laws, remains a thoughtful exploration of politics and economics decades later.', + 'image' => [ + '@type' => 'ImageObject', + 'url' => 'https://www.wired.com/wp-content/uploads/2021/04/Science_geeksguide_2CDFJY0.jpg', + 'height' => 2400, + 'width' => 1600 + ] + ], + [ + '@context' => 'http://schema.org/', + '@type' => 'Review', + 'itemReviewed' => [ + '@type' => 'Thing', + 'name' => 'Yi 4K Action Camera' + ], + 'author' => [ + '@type' => 'Person', + 'name' => 'Brent Rose' + ], + 'reviewRating' => [ + '@type' => 'Rating', + 'ratingValue' => '8', + 'bestRating' => '10' + ], + 'publisher' => [ + '@type' => 'Organization', + 'name' => 'Wired' + ] + ] ] ]; diff --git a/tests/fixtures/www.youtube.com.playlist.13d1655ccf6cbdc1fc0162c6a02f822a.php b/tests/fixtures/www.youtube.com.playlist.13d1655ccf6cbdc1fc0162c6a02f822a.php index 3c166939..386ec3bf 100644 --- a/tests/fixtures/www.youtube.com.playlist.13d1655ccf6cbdc1fc0162c6a02f822a.php +++ b/tests/fixtures/www.youtube.com.playlist.13d1655ccf6cbdc1fc0162c6a02f822a.php @@ -42,5 +42,6 @@ 'thumbnail_url' => 'https://i.ytimg.com/vi/CdbnVwot6lc/hqdefault.jpg', 'html' => '', 'url' => 'https://www.youtube.com/playlist?list=PL4qTakKkQATKOyZPJG_cAMnRtF7fAIdST' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/www.youtube.com.watch.878f5352b6f0e632a763ebf05fb48b16.php b/tests/fixtures/www.youtube.com.watch.878f5352b6f0e632a763ebf05fb48b16.php index 3f20a5e7..4a7ab12d 100644 --- a/tests/fixtures/www.youtube.com.watch.878f5352b6f0e632a763ebf05fb48b16.php +++ b/tests/fixtures/www.youtube.com.watch.878f5352b6f0e632a763ebf05fb48b16.php @@ -42,5 +42,6 @@ 'thumbnail_url' => 'https://i.ytimg.com/vi/eiHXASgRTcA/hqdefault.jpg', 'html' => '', 'url' => 'http://www.youtube.com/watch?v=eiHXASgRTcA' - ] + ], + 'allLinkedData' => [] ]; diff --git a/tests/fixtures/youtu.be.eihxasgrtca.php b/tests/fixtures/youtu.be.eihxasgrtca.php index 7750f595..8b6e24bd 100644 --- a/tests/fixtures/youtu.be.eihxasgrtca.php +++ b/tests/fixtures/youtu.be.eihxasgrtca.php @@ -42,5 +42,6 @@ 'thumbnail_url' => 'https://i.ytimg.com/vi/eiHXASgRTcA/hqdefault.jpg', 'html' => '', 'url' => 'http://youtu.be/eiHXASgRTcA' - ] + ], + 'allLinkedData' => [] ];