必应壁纸通过已存文件避免重复获取(三)(结)

0x-1


这破主题太难整PJAX,我整了一周毫无作用,身为一个小白的我心好累

0x01


咱们跨过开头 在上次我们已经将故事存入文档,下面是同时获取图片并保存,咱先看看只获取图片时的代码
<?php
if($_GET['idx']==null){
$_GET['idx']=0;
}
if($_GET['w']==null){
$_GET['w']='1366x768';
}
function bingImgFetch(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx='.$_GET['idx'].'&n=1');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $re = curl_exec($ch);
    curl_close($ch);
    $re = json_decode($re,1);//电脑版返回内容
    return array(
        /* 更改图片尺寸,减小体积 */
        'url' => str_replace('1920x1080',$_GET['w'],$re['images'][0]['url']),
    );
}
$bingimg= bingImgFetch();
$imgurl='https://upyun-bing.woshiluo.dream.ren'.$bingimg['url'];
$url = $imgurl;
Header("Location:$url");
?>
为了统一格式储存进去必须得是统一分辨率,我直接选则1920×1080,因为这个时默认获取值,当然我们不可能再替换一次,所以直接在输出时再增加一个值,就用$re['images'][0]['url']来输出,函数部分就成了这样
function bingImgFetch(){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&mkt=zh-cn&idx='.$_GET['idx'].'&n=1');
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'
            ));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $re = curl_exec($ch);
            curl_close($ch);
            $re = json_decode($re,1);
            return array(
                'url' => str_replace('1920x1080',$_GET['w'],$re['images'][0]['url']),
                'imgurl' => $re['images'][0]['url']
            );
        }

0x02


在结尾增加输出地址,写入部分做出以下更改揪心
$myfile = fopen("./bing.txt", "a") or die("Unable to open file!");
        $all ="<date>".$time."</date>n"."<match id=".$time.">".$match['0']."</match>n"."<url id=".$time.">".$bingimg['imgurl']."</url>n"."<hpla id=".$time.">".$bing['hpla']."</hpla>n"."<add id=".$time.">".$bing['add']."</add>n"."<title id=".$time.">".$bing['title']."</title>n"."<titles id=".$time.">".$bing['titles']."</titles>n"."<more id=".$time.">".$bing['more']."</more>n";
        fwrite($myfile, $all);
        fclose($myfile);
<match>是指到这张图片为止所获取的图片数量

1×01


你觉得都用HTML标签了获取的方法和判断的方法还需要多说吗?直接上代码
<?php
date_default_timezone_set (PRC);#定义时区,我只是担心时区出错导致获取偏差
if($_GET['idx']==null){
$_GET['idx']=0;#没有定义天数则默认为0
}
if($_GET['w']==null){
$_GET['w']='1366x768';#没有定义长与宽,则默认设为1366x768
}
$time= date("20ymd",strtotime('-'.$_GET['idx'].'day'));
$time1= date("20ymd",strtotime('-1 day'));
$text2=file_get_contents('./bing.txt');
if(preg_match('/[<]+date[>]+'.$time.'/',$text2))
{
        preg_match('$(?<=<matchsid='.$time1.'>)(.*?)(?=</match>)$',$text2,$match);#获取总量
        if($match > $idx){#判断是否在可以获取范围内
        preg_match('$(?<=<urlsid='.$time.'>)(.*?)(?=</url>)$',$text2,$url);
        $bing['url']=$url[0];
        $url=str_replace('1920x1080',$_GET['w'],$bing['url']);
        $imgurl='https://cn.bing.com'.$url;
        Header("Location:$imgurl");
        }
}
    else{
        preg_match('$(?<=<matchsid='.$time1.'>)(.*?)(?=</match>)$',$text2,$match);#因为已经获取清楚了之前的,所以这个必然是今天的,用这一段来获取从开始到昨天的所有以被获取的次数
        if($match['0'] < 8){
            $match['0']=8;#因为官方至少可以获取8天,所以这个值不可能小于8
        }
        else{
            $match['0']=$match['0']+1;#大于8加以一
        }
        if($match-1 > $idx){#判断是否在可以获取范围内
        $text=file_get_contents('http://cn.bing.com/cnhp/life?currentDate='.$time);
        preg_match('$(?<=<divsclass="hplatt">)(.*?)(?=</div>)$',$text,$title);
        $bing['title']=$title[0];
        preg_match('$(?<=<spansclass="hplaAttr">)(.*?)(?=</span>)$',$text,$add);
        $bing['add']=$add[0];
        preg_match('$(?<=<divsclass="hplats">)(.*?)(?=</div>)$',$text,$titles);
        $bing['titles']=$titles[0];
        preg_match('$(?<=<divsclass="hplaTtl">)(.*?)(?=</div>)$',$text,$hpla);
        $bing['hpla']=$hpla[0];
        preg_match('$(?<=<divsid="hplaSnippet">)(.*?)(?=</div>)$',$text,$more);
        $bing['more']=$more[0];
        function bingImgFetch(){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&mkt=zh-cn&idx='.$_GET['idx'].'&n=1');
            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'
            ));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $re = curl_exec($ch);
            curl_close($ch);
            $re = json_decode($re,1);
            return array(
                'url' => str_replace('1920x1080',$_GET['w'],$re['images'][0]['url']),
                'imgurl' => $re['images'][0]['url']
            );
        }
        $bingimg= bingImgFetch();
        $imgurl='https://cn.bing.com'.$bingimg['url'];
        $url = $imgurl;
        $myfile = fopen("./bing.txt", "a") or die("Unable to open file!");
        $all ="<date>".$time."</date>n"."<match id=".$time.">".$match['0']."</match>n"."<url id=".$time.">".$bingimg['imgurl']."</url>n"."<hpla id=".$time.">".$bing['hpla']."</hpla>n"."<add id=".$time.">".$bing['add']."</add>n"."<title id=".$time.">".$bing['title']."</title>n"."<titles id=".$time.">".$bing['titles']."</titles>n"."<more id=".$time.">".$bing['more']."</more>n";
        fwrite($myfile, $all);
        fclose($myfile);
        Header("Location:$url");
        }
    }
?>
另外把修改前的代码放出来
<?php
if($_GET['idx']==null){
$_GET['idx']=0;
}
if($_GET['w']==null){
$_GET['w']='1366x768';
}
function bingImgFetch(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://www.bing.com/HPImageArchive.aspx?format=js&idx='.$_GET['idx'].'&n=1');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36'
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $re = curl_exec($ch);
    curl_close($ch);
    $re = json_decode($re,1);//电脑版返回内容
    return array(
        /* 更改图片尺寸,减小体积 */
        'url' => str_replace('1920x1080',$_GET['w'],$re['images'][0]['url']),
    );
}
$bingimg= bingImgFetch();
$imgurl='https://upyun-bing.woshiluo.dream.ren'.$bingimg['url'];
$url = $imgurl;
Header("Location:$url");
?>


这个部分愣是让我水了3周。各位大神轻喷,我只是个小白,若有不对请指出。 ]]>

将必应壁纸获取值存文档(二)

0x00


接上篇,既然已经有了故事,那么就应带获取对应时间,为了跟原获取图片对应,所以继续使用idx这个值来确定获取idx天前的图片,由于必应的网页用的是年月日的结构来获取的,比如20170701获取今天的是日期是$time= date("20ymd");,昨天的是$time= date("20ymd",strtotime('-1 day'));那就很简单了 $time= date("20ymd",strtotime('-'.$_GET['idx'].'day')); 然后把$text=file_get_contents('http://cn.bing.com/cnhp/life');改成 $text=file_get_contents('http://cn.bing.com/cnhp/life?currentDate='.$time);即可 也就是说获取代码为
<?php
date_default_timezone_set (PRC);
if($_GET['idx']==null){
$_GET['idx']=0;
}
$time= date("20ymd",strtotime('-'.$_GET['idx'].'day'));
   $text=file_get_contents('http://cn.bing.com/cnhp/life?currentDate='.$time);
    preg_match('$(?&lt;=\&lt;div\sclass=\"hplatt\"\&gt;)(.*?)(?=\&lt;\/div\&gt;)$',$text,$title);
    $bing['title']=$title[0];
    preg_match('$(?&lt;=\&lt;span\sclass=\"hplaAttr\"\&gt;)(.*?)(?=\&lt;\/span\&gt;)$',$text,$add);
    $bing['add']=$add[0];
    preg_match('$(?&lt;=\&lt;div\sclass=\"hplats\"\&gt;)(.*?)(?=\&lt;\/div\&gt;)$',$text,$titles);
    $bing['titles']=$titles[0];
    preg_match('$(?&lt;=\&lt;div\sclass=\"hplaTtl\"\&gt;)(.*?)(?=\&lt;\/div\&gt;)$',$text,$hpla);
    $bing['hpla']=$hpla[0];
    preg_match('$(?&lt;=\&lt;div\sid=\"hplaSnippet\"\&gt;)(.*?)(?=\&lt;\/div\&gt;)$',$text,$more);
    $bing['more']=$more[0];
?>

0x01


既然已经获取了故事,就把获取的东西存入同目录的bing.txt文件里 通过fopen()fwrite()可以很轻松的实现这一项,通过类似html标签的方法写入,通过id说明日期,所以这一区域的代码如下
$myfile = fopen("./bing.txt", "a") or die("Unable to open file!");
$all ="<date>".$time."</date>\n"."<match id=".$time.">".$match['0']."</match>\n"."<url id=".$time.">".$bingimg['imgurl']."</url>\n"."<hpla id=".$time.">".$bing['hpla']."</hpla>\n"."<add id=".$time.">".$bing['add']."</add>\n"."<title id=".$time.">".$bing['title']."</title>\n"."<titles id=".$time.">".$bing['titles']."</titles>\n"."<more id=".$time.">".$bing['more']."</more>\n";
fwrite($myfile, $all);
fclose($myfile);

在等等还有一篇,我先研究研究PJAX

]]>

必应壁纸获取对应故事(一)

0x-1


大家好我是半夜打博文的SB博主,话说新疆真没有春天啊,4月低还在10~0度徘徊呢,五月初就上20度了。你们的懒癌晚期博主只能在家里没事找事。

0x00


一个无聊的下午,博主放学回家更同学浪了一会回家后还没到6点,不想看书不想码字,然后就搜搜看看小马宝莉是不是出了新一季(什么鬼),结果没有,又去Bilibili(什么鬼x2)……实在不想干啥然后看起了必应壁纸,突然发现必应壁纸的故事也挺好的,转念一想,干脆写个网页吧 #1

0x01


跟写壁纸借口一样,先找到官方接口,然而,完全没有,最后在http://cn.bing.com/cnhp/lifecurrentDate=20170505&IID=SERP.5045&IG=B06DB1B2350E43BBA4EE1C3EE38C6C1E #2找到了网页,这……不管了先简化网址, http://cn.bing.com/cnhp/life?currentDate=[date][date]=你所要查询的日期。 #3

0x02


光有网页咋找呢,js什么的我一点都不知道,于是我在找到了正则式匹配,代码就成了这样
//获取题目
        preg_match('$(?<=\<div\sclass=\"hplatt\"\>)(.*?)(?=\<\/div\>)$',$text,$title);
        //存入 $bing 二维数组
        $bing['title']=$title[0];
        //获取地点
        preg_match('$(?<=\<span\sclass=\"hplaAttr\"\>)(.*?)(?=\<\/span\>)$',$text,$add);
        $bing['add']=$add[0];
        //获取主标题
        preg_match('$(?<=\<div\sclass=\"hplats\"\>)(.*?)(?=\<\/div\>)$',$text,$titles);
        $bing['titles']=$titles[0];
        //获取副标题
        preg_match('$(?<=\<div\sclass=\"hplaTtl\"\>)(.*?)(?=\<\/div\>)$',$text,$hpla);
        //获取详细介绍
        $bing['hpla']=$hpla[0];
        preg_match('$(?<=\<div\sid=\"hplaSnippet\"\>)(.*?)(?=\<\/div\>)$',$text,$more);
        $bing['more']=$more[0];
既然已经获取到了,直接输去就行,不过博主可不是那么容易了事的人,自然还要再折腾,后面会咋折腾,就请看下一篇吧。 ]]>