<?php class UnsplashBridge extends BridgeAbstract { const MAINTAINER = 'nel50n, langfingaz'; const NAME = 'Unsplash Bridge'; const URI = 'https://unsplash.com/'; const CACHE_TIMEOUT = 43200; // 12h const DESCRIPTION = 'Returns the latest photos from Unsplash'; const PARAMETERS = [[ 'u' => [ 'name' => 'Filter by username (optional)', 'type' => 'text', 'defaultValue' => 'unsplash' ], 'm' => [ 'name' => 'Max number of photos', 'type' => 'number', 'defaultValue' => 20, 'required' => true ], 'prev_q' => [ 'name' => 'Preview quality', 'type' => 'list', 'values' => [ 'full' => 'full', 'regular' => 'regular', 'small' => 'small', 'thumb' => 'thumb', ], 'defaultValue' => 'regular' ], 'w' => [ 'name' => 'Max download width (optional)', 'exampleValue' => 1920, 'type' => 'number', 'defaultValue' => 1920, ], 'jpg_q' => [ 'name' => 'Max JPEG quality (optional)', 'exampleValue' => 75, 'type' => 'number', 'defaultValue' => 75, ] ]]; public function collectData() { $filteredUser = $this->getInput('u'); $width = $this->getInput('w'); $max = $this->getInput('m'); $previewQuality = $this->getInput('prev_q'); $jpgQuality = $this->getInput('jpg_q'); $url = 'https://unsplash.com/napi'; if (strlen($filteredUser) > 0) { $url .= '/users/' . $filteredUser; } $url .= '/photos?page=1&per_page=' . $max; $api_response = getContents($url); $json = json_decode($api_response, true); foreach ($json as $json_item) { $item = []; // Get image URI $uri = $json_item['urls']['raw'] . '&fm=jpg'; if ($jpgQuality > 0) { $uri .= '&q=' . $jpgQuality; } if ($width > 0) { $uri .= '&w=' . $width . '&fit=max'; } $uri .= '.jpg'; // only for format hint $item['uri'] = $uri; // Get title from description if (is_null($json_item['description'])) { $item['title'] = 'Unsplash picture from ' . $json_item['user']['name']; } else { $item['title'] = $json_item['description']; } $item['timestamp'] = $json_item['created_at']; $content = 'User: <a href="' . $json_item['user']['links']['html'] . '">@' . $json_item['user']['username'] . '</a>'; if (isset($json_item['location']['name'])) { $content .= ' | Location: ' . $json_item['location']['name']; } $content .= ' | Image on <a href="' . $json_item['links']['html'] . '">Unsplash</a><br><a href="' . $uri . '"><img src="' . $json_item['urls'][$previewQuality] . '" alt="Image from ' . $filteredUser . '" /></a>'; $item['content'] = $content; $this->items[] = $item; } } public function getName() { $filteredUser = $this->getInput('u') ?? ''; if (strlen($filteredUser) > 0) { return $filteredUser . ' - ' . self::NAME; } else { return self::NAME; } } }