魔改 jianshu 主题自动下载 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>
完工!