自动获取Pixiv每日排行榜第一张图片(600x600 | 可用于博客背景图)

代码来自@mokeyjay的 Pixiv每日排行榜Top50小部件,本人做了一些修改来专用于输出第一张图片的完整图片(也可以输出其他的图片)

可用于获取Pixiv每日排行榜第一张图片并直接输出,比如作为博客背景图像(配合高斯模糊食用效果最佳)


食用方法:(两种任选)

第一种:直接把图片路径指向这个php文件

第二种:图片路径指向保存文件路径(默认为pixiv.jpg),然后挂个计划任务每天自动调用pixiv.php来刷新图片


以下是代码:【建议保存为pixiv.php】

<?php
/**
 * 自动获取Pixiv每日排行榜第一张图片
 * @author Kenvix <[email protected]>
 * @url https://kenvix.com
 * ------------------------------------------------------
 * 可随意修改、二次发布。但请保留上方版权声明及注明出处
 */
error_reporting(0);
set_time_limit(20); //超时时间 0为永久不超时
define('DAT','pixiv.jpg'); //保存文件路径
define('IMG', 0); //表示获取0号图片,若要获取其他图片,修改数字,比如获取第三张图片表示为2

$time = file_exists(DAT) ? filemtime(DAT) : '';

if(!isset($_GET['text'])) header('Content-type: image/jpg');
if(empty($time) || (!empty($_GET['force']) && $_GET['force'] == 'forcepassword') || (time() - $time) > 86400) { //修改forcepassword可以设置强行刷新图片的密码,访问 pixiv.php?force=forcepassword 即可强制刷新图片
    $html = curl_get('http://www.pixiv.net/ranking.php?mode=daily&content=illust');

    // 匹配缩略图url
    preg_match_all('|http://i\d\.pixiv\.net/c/240x480/img-master/img/\d{4}/\d{2}/\d{2}/\d{2}/\d{2}/\d{2}/(.*?\.\w{3})|', $html, $image);
    // 匹配链接
    preg_match_all('|member_illust.php\?mode=medium&illust_id=\d+&ref=rn-b-\d+-title-\d&uarea=daily|', $html, $url);
    $url = str_ireplace('240x480','600x600',$image[0][IMG]);
    $f = curl_get($url, array(
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
        'Referer: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=' . str_ireplace('_p0_master1200.jpg','',$image[1][IMG])
    ));
    //拒绝写入无效图片
    $info = getimagesizefromstring($f);
    if(empty($info)) {
        //无效图片处理方法
        echo 'Err#0';
    } else {
        file_put_contents(DAT, $f);
        echo $f;
    }
    die;
}
readfile(DAT); //直接输出

/**
 * CURL读取数据
 * @param $url
 * @return mixed
 */
function curl_get($url, array $header = array()){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

转载请遵守 CC BY-NC-SA 4.0 协议并注明来自:自动获取Pixiv每日排行榜第一张图片(600x600 | 可用于博客背景图)