summaryrefslogtreecommitdiff
path: root/bridges/ArtStationBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/ArtStationBridge.php')
-rw-r--r--bridges/ArtStationBridge.php93
1 files changed, 93 insertions, 0 deletions
diff --git a/bridges/ArtStationBridge.php b/bridges/ArtStationBridge.php
new file mode 100644
index 0000000..9c12add
--- /dev/null
+++ b/bridges/ArtStationBridge.php
@@ -0,0 +1,93 @@
+<?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;
+ }
+ }
+}