bifurqué depuis blallo/rss-bridge
494169f959
This bridge is slow, as caching of images is required (REFERER header required to access the full size images)
73 lignes
2,3 Kio
PHP
73 lignes
2,3 Kio
PHP
<?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";
|
|
|
|
}
|
|
|
|
}
|