魔改 jianshu 主题自动下载 Bing 每日壁纸并更新首页背景图

请注意,本文编写于 100 天前,最后修改于 80 天前,其中某些信息可能已经过时。

本文所述方案可用于任何原生不支持随机图片接口的 Typecho 主题,能够实现自动下载 Bing 每日壁纸并随机更新首页背景图。

博客主题已经更新,现在的主题自带随机背景图接口,因此无需魔改,但本文所述方案仍可用于其他原生不支持随机图接口的主题。


我的 Blog 首页有一个 400x900 像素的背景图,每次刷新会自动更新一张新图。起先这些图是我定期手动下载好放到服务器上的,每次刷新会随机显示一张图。前几天刷订阅的时候看到一篇文章,《Typecho 无插件获取必应每日壁纸、故事》,获得了灵感,顺手改了一下代码,现在可以每天自动下载Bing每日壁纸,并且在刷新的时候会随机刷到这些壁纸。

首先修改 usr/themes/jianshu/funciton.php,加入以下两个函数:

/**
* 获取必应每日壁纸
*/

function bing(){
    $img_name = 'usr/themes/jianshu/img/header_'.date('Ymd').'.jpg'; //每日图片,不知道这里为何无法使用相对地址,有了解的大佬还请指点
    if (!file_exists($img_name)) {
        $url = "http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1";
        $result = file_get_contents($url);
        $output = json_decode($result,true);
        $img_url = $output["images"][0]["url"];
        $img = file_get_contents("http://cn.bing.com".$img_url);
        @file_put_contents($img_name,$img); //写入图片
    }
}
/**
 * 从img文件夹中随机读取一个文件
 */

function randomPic(){
    $img_array = glob('usr/themes/jianshu/img/header_*.{gif,jpg,png}',GLOB_BRACE);
    $img = array_rand($img_array);
    return $img_array[$img];
}

函数修改完成后,我们需要在 footer.php 里调用,在最后添加:

<!-- 获取Bing每日图片 -->
<?php bing(); ?>
<!-->

这样每次刷新时会调用 bing() 函数,这个函数首先会检查今日壁纸是否已经下载,如果没有则进行下载操作。

同时我们需要修改 header.php 文件,将上面的 random() 函数加入到随机显示背景图的代码里。

找到这一行 <div class="cover-img" ...</div>,将这一行修改为

<div class="cover-img" style="background-image: url(<?php if ($this->options->bgPhoto){$photo = explode(',',$this->options->bgPhoto);echo $photo[array_rand($photo,1)];}else{_e(randomPic());}?>)"></div>

完工!

Comments