aboutsummaryrefslogtreecommitdiff
path: root/bridges/ArtStationBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/ArtStationBridge.php')
-rw-r--r--bridges/ArtStationBridge.php189
1 files changed, 99 insertions, 90 deletions
diff --git a/bridges/ArtStationBridge.php b/bridges/ArtStationBridge.php
index 55bf87a8..5a2be59d 100644
--- a/bridges/ArtStationBridge.php
+++ b/bridges/ArtStationBridge.php
@@ -1,92 +1,101 @@
<?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,
- 'exampleValue' => 'bird'
- )
- )
- );
-
- 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);
- return json_decode($jsonSearchStr);
- }
-
- private function fetchProject($hashID) {
- $jsonProjectURL = self::URI . '/projects/' . $hashID . '.json';
- $jsonProjectStr = getContents($jsonProjectURL);
- 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;
- }
- }
+
+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 = [
+ 'Search Query' => [
+ 'q' => [
+ 'name' => 'Search term',
+ 'required' => true,
+ 'exampleValue' => 'bird'
+ ]
+ ]
+ ];
+
+ 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 = [
+ 'Content-Type: application/json',
+ 'Accept: application/json'
+ ];
+
+ $opts = [
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => $data,
+ CURLOPT_RETURNTRANSFER => true
+ ];
+
+ $jsonSearchURL = self::URI . '/api/v2/search/projects.json';
+ $jsonSearchStr = getContents($jsonSearchURL, $header, $opts);
+ return json_decode($jsonSearchStr);
+ }
+
+ private function fetchProject($hashID)
+ {
+ $jsonProjectURL = self::URI . '/projects/' . $hashID . '.json';
+ $jsonProjectStr = getContents($jsonProjectURL);
+ 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 = [];
+ $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;
+ }
+ }
+ }
}