<?php class AwwwardsBridge extends BridgeAbstract { const NAME = 'Awwwards'; const URI = 'https://www.awwwards.com/'; const DESCRIPTION = 'Fetches the latest ten sites of the day from Awwwards'; const MAINTAINER = 'Paroleen'; const CACHE_TIMEOUT = 3600; const SITESURI = 'https://www.awwwards.com/websites/sites_of_the_day/'; const SITEURI = 'https://www.awwwards.com/sites/'; const ASSETSURI = 'https://assets.awwwards.com/awards/media/cache/thumb_417_299/'; private $sites = []; public function collectData() { $this->fetchSites(); foreach ($this->sites as $site) { $item = []; $item['title'] = $site['title']; $item['timestamp'] = $site['createdAt']; $item['categories'] = $site['tags']; $item['content'] = '<img src="' . self::ASSETSURI . $site['images']['thumbnail'] . '">'; $item['uri'] = self::SITEURI . $site['slug']; $this->items[] = $item; if (count($this->items) >= 10) { break; } } } public function getIcon() { return 'https://www.awwwards.com/favicon.ico'; } private function fetchSites() { $sites = getSimpleHTMLDOM(self::SITESURI); foreach ($sites->find('.grid-sites li') as $li) { $encodedJson = $li->attr['data-collectable-model-value'] ?? null; if (!$encodedJson) { continue; } $json = html_entity_decode($encodedJson, ENT_QUOTES, 'utf-8'); $site = Json::decode($json); $this->sites[] = $site; } } }