Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

extend UnsplashBridge (II) #1813

Merged
merged 11 commits into from
Apr 5, 2022
107 changes: 78 additions & 29 deletions bridges/UnsplashBridge.php
Original file line number Diff line number Diff line change
@@ -1,67 +1,116 @@
<?php
class UnsplashBridge extends BridgeAbstract {

const MAINTAINER = 'nel50n';
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 latests photos from Unsplash';
const DESCRIPTION = 'Returns the latest photos from Unsplash';

const PARAMETERS = array( array(
const PARAMETERS = array(array(
'u' => array(
'name' => 'Filter by username (optional)',
'exampleValue' => 'SomeUser',
'type' => 'text',
Bockiii marked this conversation as resolved.
Show resolved Hide resolved
'defaultValue' => 'unsplash'
),
'm' => array(
'name' => 'Max number of photos',
'type' => 'number',
'defaultValue' => 20
'defaultValue' => 20,
'required' => true
),
'prev_q' => array(
'name' => 'Preview quality',
'type' => 'list',
'values' => array(
'full' => 'full',
'regular' => 'regular',
'small' => 'small',
'thumb' => 'thumb',
),
'defaultValue' => 'regular',
'required' => true
Bockiii marked this conversation as resolved.
Show resolved Hide resolved
),
'w' => array(
'name' => 'Width',
'exampleValue' => '1920, 1680, …',
'defaultValue' => '1920'
'name' => 'Max download width (optional)',
'exampleValue' => 1920,
'type' => 'number',
'defaultValue' => 1920,
),
'q' => array(
'name' => 'JPEG quality',
'jpg_q' => array(
'name' => 'Max JPEG quality (optional)',
'exampleValue' => 75,
'type' => 'number',
'defaultValue' => 75
'defaultValue' => 75,
)
));

public function collectData(){
public function collectData()
{
$filteredUser = $this->getInput('u');
$width = $this->getInput('w');
$max = $this->getInput('m');
$quality = $this->getInput('q');
$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);

$api_response = getContents('https://unsplash.com/napi/photos?page=1&per_page=' . $max);
$json = json_decode($api_response, true);

foreach ($json as $json_item) {
$item = array();

// Get image URI
$uri = $json_item['urls']['regular'] . '.jpg'; // '.jpg' only for format hint
$uri = str_replace('q=80', 'q=' . $quality, $uri);
$uri = str_replace('w=1080', 'w=' . $width, $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['alt_description'])) {
if (is_null($json_item['description'])) {
$item['title'] = 'Unsplash picture from ' . $json_item['user']['name'];
} else {
$item['title'] = $json_item['description'];
}
if (is_null($json_item['description'])) {
$item['title'] = 'Unsplash picture from ' . $json_item['user']['name'];
} else {
$item['title'] = $json_item['alt_description'];
$item['title'] = $json_item['description'];
}

$item['timestamp'] = time();
$item['content'] = $item['title']
. '<br><a href="'
. $item['uri']
$item['timestamp'] = $json_item['created_at'];

$content = 'User: <a href="'
Bockiii marked this conversation as resolved.
Show resolved Hide resolved
. $json_item['user']['links']['html']
. '">@'
. $json_item['user']['username']
. '</a>';
if (!is_null($json_item['location']['name'])) {
Bockiii marked this conversation as resolved.
Show resolved Hide resolved
$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']['thumb']
. $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;
}
}
}