<?php class ArtStationBridge extends BridgeAbstract { const NAME = 'ArtStation'; const URI = 'https://www.artstation.com'; const DESCRIPTION = 'Fetches the latest ten artworks from a search query on ArtStation.'; const MAINTAINER = 'thefranke'; const CACHE_TIMEOUT = 3600; // 1h const PARAMETERS = array( 'Search Query' => array( 'q' => array( 'name' => 'Search term', 'required' => true ) ) ); public function getIcon() { return 'https://www.artstation.com/assets/favicon-58653022bc38c1905ac7aa1b10bffa6b.ico'; } public function getName() { return self::NAME . ': ' . $this->getInput('q'); } private function fetchSearch($searchQuery) { $data = '{"query":"' . $searchQuery . '","page":1,"per_page":50,"sorting":"date",'; $data .= '"pro_first":"1","filters":[],"additional_fields":[]}'; $header = array( 'Content-Type: application/json', 'Accept: application/json' ); $opts = array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => $data, CURLOPT_RETURNTRANSFER => true ); $jsonSearchURL = self::URI . '/api/v2/search/projects.json'; $jsonSearchStr = getContents($jsonSearchURL, $header, $opts) or returnServerError('Could not fetch JSON for search query.'); return json_decode($jsonSearchStr); } private function fetchProject($hashID) { $jsonProjectURL = self::URI . '/projects/' . $hashID . '.json'; $jsonProjectStr = getContents($jsonProjectURL) or returnServerError('Could not fetch JSON for project.'); return json_decode($jsonProjectStr); } public function collectData() { $searchTerm = $this->getInput('q'); $jsonQuery = $this->fetchSearch($searchTerm); foreach($jsonQuery->data as $media) { // get detailed info about media item $jsonProject = $this->fetchProject($media->hash_id); // create item $item = array(); $item['title'] = $media->title; $item['uri'] = $media->url; $item['timestamp'] = strtotime($jsonProject->published_at); $item['author'] = $media->user->full_name; $item['categories'] = implode(',', $jsonProject->tags); $item['content'] = '<a href="' . $media->url . '"><img style="max-width: 100%" src="' . $jsonProject->cover_url . '"></a><p>' . $jsonProject->description . '</p>'; $numAssets = count($jsonProject->assets); if ($numAssets > 1) $item['content'] .= '<p><a href="' . $media->url . '">Project contains ' . ($numAssets - 1) . ' more item(s).</a></p>'; $this->items[] = $item; if (count($this->items) >= 10) break; } } }