diff options
author | 2020-09-09 14:11:19 +0200 | |
---|---|---|
committer | 2020-09-09 17:11:19 +0500 | |
commit | d6f277d02928e26d6f9585044cbfe90c17fc2009 (patch) | |
tree | 3a32ff0f316e5375a254745152365ddc759c5bfe | |
parent | ab8e89a97f98915e1b326aca882bae756ab6b340 (diff) | |
download | rss-bridge-d6f277d02928e26d6f9585044cbfe90c17fc2009.tar.gz rss-bridge-d6f277d02928e26d6f9585044cbfe90c17fc2009.tar.zst rss-bridge-d6f277d02928e26d6f9585044cbfe90c17fc2009.zip |
[WorldCosplayBridge] Add new bridge (#1732)
-rw-r--r-- | bridges/WorldCosplayBridge.php | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/bridges/WorldCosplayBridge.php b/bridges/WorldCosplayBridge.php new file mode 100644 index 00000000..4fc31e67 --- /dev/null +++ b/bridges/WorldCosplayBridge.php @@ -0,0 +1,143 @@ +<?php +class WorldCosplayBridge extends BridgeAbstract { + const NAME = 'WorldCosplay Bridge'; + const URI = 'https://worldcosplay.net/'; + const DESCRIPTION ='Returns WorldCosplay photos'; + const MAINTAINER = 'AxorPL'; + + const API_CHARACTER = 'api/photo/list.json?character_id=%u&limit=%u'; + const API_COSPLAYER = 'api/member/photos.json?member_id=%u&limit=%u'; + const API_SERIES = 'api/photo/list.json?title_id=%u&limit=%u'; + const API_TAG = 'api/tag/photo_list.json?id=%u&limit=%u'; + + const CONTENT_HTML + = '<a href="%s" target="_blank"><img src="%s" alt="%s" title="%s"></a>'; + + const ERR_CONTEXT = 'No context provided'; + const ERR_QUERY = 'Unable to query: %s'; + + const LIMIT_MIN = 1; + const LIMIT_MAX = 24; + + const PARAMETERS = array( + 'Character' => array( + 'cid' => array( + 'name' => 'Character ID', + 'type' => 'number', + 'required' => true, + 'title' => 'WorldCosplay character ID', + 'exampleValue' => 18204 + ) + ), + 'Cosplayer' => array( + 'uid' => array( + 'name' => 'Cosplayer ID', + 'type' => 'number', + 'required' => true, + 'title' => 'Cosplayer\'s WorldCosplay profile ID', + 'exampleValue' => 406782 + ) + ), + 'Series' => array( + 'sid' => array( + 'name' => 'Series ID', + 'type' => 'number', + 'required' => true, + 'title' => 'WorldCosplay series ID', + 'exampleValue' => 3139 + ) + ), + 'Tag' => array( + 'tid' => array( + 'name' => 'Tag ID', + 'type' => 'number', + 'required' => true, + 'title' => 'WorldCosplay tag ID', + 'exampleValue' => 33643 + ) + ), + 'global' => array( + 'limit' => array( + 'name' => 'Limit', + 'type' => 'number', + 'required' => false, + 'title' => 'Maximum number of photos to return', + 'exampleValue' => 5, + 'defaultValue' => 5 + ) + ) + ); + + public function collectData() { + $limit = $this->getInput('limit'); + $limit = min(self::LIMIT_MAX, max(self::LIMIT_MIN, $limit)); + switch($this->queriedContext) { + case 'Character': + $id = $this->getInput('cid'); + $url = self::API_CHARACTER; + break; + case 'Cosplayer': + $id = $this->getInput('uid'); + $url = self::API_COSPLAYER; + break; + case 'Series': + $id = $this->getInput('sid'); + $url = self::API_SERIES; + break; + case 'Tag': + $id = $this->getInput('tid'); + $url = self::API_TAG; + break; + default: + returnClientError(self::ERR_CONTEXT); + } + $url = self::URI . sprintf($url, $id, $limit); + + $json = json_decode(getContents($url)) + or returnServerError(sprintf(self::ERR_QUERY, $url)); + if($json->has_error) + { + returnServerError($json->message); + } + $list = $json->list; + + foreach($list as $img) + { + $item = array(); + $item['uri'] = self::URI . substr($img->photo->url, 1); + $item['title'] = $img->photo->subject; + $item['timestamp'] = $img->photo->created_at; + $item['author'] = $img->member->global_name; + $item['enclosures'] = array($img->photo->large_url); + $item['uid'] = $img->photo->id; + $item['content'] = sprintf( + self::CONTENT_HTML, + $item['uri'], + $item['enclosures'][0], + $item['title'], + $item['title'] + ); + $this->items[] = $item; + } + } + + public function getName() { + switch($this->queriedContext) { + case 'Character': + $id = $this->getInput('cid'); + break; + case 'Cosplayer': + $id = $this->getInput('uid'); + break; + case 'Series': + $id = $this->getInput('sid'); + break; + case 'Tag': + $id = $this->getInput('tid'); + break; + default: + return parent::getName(); + } + return sprintf('%s %u - ', $this->queriedContext, $id) . self::NAME; + } +} |