diff options
Diffstat (limited to 'bridges/PixivBridge.php')
-rw-r--r-- | bridges/PixivBridge.php | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/bridges/PixivBridge.php b/bridges/PixivBridge.php new file mode 100644 index 0000000..3a4cc93 --- /dev/null +++ b/bridges/PixivBridge.php @@ -0,0 +1,73 @@ +<?php +class PixivBridge extends BridgeAbstract { + + const MAINTAINER = 'teromene'; + const NAME = 'Pixiv Bridge'; + const URI = 'https://www.pixiv.net/'; + const DESCRIPTION = 'Returns the tag search from pixiv.net'; + + + const PARAMETERS = array( array( + 'tag' => array( + 'name' => 'Tag to search', + 'exampleValue' => 'example', + 'required' => true + ), + )); + + + public function collectData(){ + + $html = getContents(static::URI.'search.php?word=' . urlencode($this->getInput('tag'))) + or returnClientError('Unable to query pixiv.net'); + $regex = '/<input type="hidden"id="js-mount-point-search-result-list"data-items="([^"]*)/'; + $timeRegex = '/img\/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([0-9]{2})\/([0-9]{2})\/([0-9]{2})\//'; + + preg_match_all($regex, $html, $matches, PREG_SET_ORDER, 0); + if(!$matches) return; + + $content = json_decode(html_entity_decode($matches[0][1]), true); + $count = 0; + foreach($content as $result) { + if($count == 10) break; + $count++; + + $item = array(); + $item['id'] = $result['illustId']; + $item['uri'] = 'https://www.pixiv.net/member_illust.php?mode=medium&illust_id=' . $result['illustId']; + $item['title'] = $result['illustTitle']; + $item['author'] = $result['userName']; + + preg_match_all($timeRegex, $result['url'], $dt, PREG_SET_ORDER, 0); + $elementDate = DateTime::createFromFormat('YmdHis', + $dt[0][1] . $dt[0][2] . $dt[0][3] . $dt[0][4] . $dt[0][5] . $dt[0][6]); + $item['timestamp'] = $elementDate->getTimestamp(); + + $item['content'] = "<img src='" . $this->cacheImage($result['url'], $item['id']) . "' />"; + $this->items[] = $item; + } + } + + public function cacheImage($url, $illustId) { + + $url = str_replace('_master1200', '', $url); + $url = str_replace('c/240x240/img-master/', 'img-original/', $url); + $path = CACHE_DIR . '/pixiv_img'; + + if(!is_dir($path)) + mkdir($path, 0755, true); + + if(!is_file($path . '/' . $illustId . '.jpeg')) { + $headers = array('Referer: https://www.pixiv.net/member_illust.php?mode=medium&illust_id=' . $illustId); + $illust = getContents($url, $headers); + if(strpos($illust, '404 Not Found') !== false) { + $illust = getContents(str_replace('jpg', 'png', $url), $headers); + } + file_put_contents($path . '/' . $illustId . '.jpeg', $illust); + } + + return 'cache/pixiv_img/' . $illustId . '.jpeg'; + + } + +} |