2019年11月21日update:

这次是把blog搬到了国内,还编成了微信小程序,国外服务器也还在用。发现编成小程序之后,文章里的js工作不了,但是php代码段可以。

因此就新装了个支持php代码段插入的插件Insert PHP Code Snippet,用php程序来判断文件是否存在,是否下载完毕(长度是否为0),如果是的话就输出,不是的话换1号备用图,再对备用图判断一遍,行的话输出,不行的话用2号。这样有三个图备用,可靠性应该可以了。其中前两个图在本地,速度快一点,第三个在没有被屏蔽的境外服务器。我这个代码很垃圾,就是上面这个意思。哎..能用就行,存一下。

$StrA='<img src=”; $StrC= substr(md5(time()), 0, 4); $StrD=” />’;
$StrB1=’https://retire50blog.wang/wp-content/uploads/googlesheetchart.png?’;
$StrB1BK=’https://retire50blog.wang/wp-content/uploads/googlesheetchartbk.png?’;
$StrB1BK3=’https://blog1.jyzzj.online/wp-content/uploads/googlesheetchart.png?’;
$StrP1 = $StrA.$StrB1.$StrC. $StrD;
$StrP1BK = $StrA.$StrB1BK.$StrC. $StrD;
$StrP1BK3 = $StrA.$StrB1BK3.$StrC. $StrD;
$url=’./wp-content/uploads/googlesheetchart.png’;
$urlBK=’./wp-content/uploads/googlesheetchartbk.png’;

if (file_exists($url))
{
if(filesize($url)==0){
if (file_exists($urlBK)){
if(filesize($urlBK)==0){
echo $StrP1BK3;
}
else{
echo $StrP1BK;
}
}
else{
echo $StrP1BK3;
}

}
else {
echo $StrP1;
}

}
else {
if (file_exists($urlBK)){
if(filesize($urlBK)==0){
echo $StrP1BK3;
}
else{
echo $StrP1BK;
}
}
else{
echo $StrP1BK3;
}

}

 


 

2019年1月29日update:

wget多个文件可以用-i函数逐行读取txt里的url,但是没法用-O参数逐一重命名

写一个1.sh,第一行写#!/bin/sh,后面内容是逐行的wget -O 文件名 路径,

然后在cron计划里设定每10分钟执行一次1.sh

 

 


2019年1月26日 update:

发现图片用wget下载有时候会变成0字节

想了个解决办法,Cron任务下载两个文件,比如一个a.npg,a-bk.png,如果a不能访问就访问b,两个都不行那也就算了。

如果一个变成0字节的概率是百分之3,两个都0字节概率就是万分之9,可以了。

<script>
var myDate = new Date();
var timestamp = (new Date()).valueOf();
var urljyzzj = “https://retire50blog.wang/wp-content/uploads/googlesheetchart.png?t=”+timestamp;
var urljyzzja = “https://retire50blog.wang/wp-content/uploads/googlesheetchartbk.png?t=”+timestamp;

function nofind(){
var img=event.srcElement;
img.src=urljyzzja;
img.onerror=null;
}

document.write(“<a href=”+urljyzzj+”>”);
document.write(“<img src=”+urljyzzja+” onerror=\”nofind();\””+”/>”);

document.write(“</a>”);

</script>

 

 

还发现手机访问页面时候图片比较小,网上找了个代码,自动区分桌面和移动版,分别跳转

 

<html>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”initial-scale=1, maximum-scale=1, user-scalable=no” />
<script type=”text/javascript”>
function browserRedirect() {
var sUserAgent = navigator.userAgent.toLowerCase();
var bIsIpad = sUserAgent.match(/ipad/i) == “ipad”;
var bIsIphoneOs = sUserAgent.match(/iphone os/i) == “iphone os”;
var bIsMidp = sUserAgent.match(/midp/i) == “midp”;
var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == “rv:1.2.3.4”;
var bIsUc = sUserAgent.match(/ucweb/i) == “ucweb”;
var bIsAndroid = sUserAgent.match(/android/i) == “android”;
var bIsCE = sUserAgent.match(/windows ce/i) == “windows ce”;
var bIsWM = sUserAgent.match(/windows mobile/i) == “windows mobile”;
if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
//跳转移动端页面
window.location.href=”https://retire50blog.wang/2019m.html”;
} else {
//跳转pc端页面
window.location.href=”https://retire50blog.wang/2019p.html”;
}
}
browserRedirect();
</script>
</head>
<body>

</body>
</html>


2019年1月25日 update

原文的方法傻透了,其实只要vps后台用Cron 定时每半小时下载google发布的图片,以固定的名字放到指定目录下就行了

wget https://t.cn/E5glOJf -O retire50blog.wang/wp-content/uploads/googlesheet.png

为什么要用短链接是因为原来的地址里有个“?”,还有个“=”,下载出错。

下载来以后再加上?t=timestamp防止缓存。



我的情况是这样的,自己的数据都在googlesheet上,这个blog在国外空间。
假设我要在blog上发布一个页面,动态显示我2019年的长期头寸及其浮动盈亏,我只要文章里引用googlesheet发布的链接就可以了。
不过实际上这样是不行的。国内用户访问我的blog是可以得,它没有被墙,但是google的服务被墙了,文章里涉及的google链接国内用户都显示不了,不单显示不了,还会卡住,正常页面都打不开。
昨天突发奇想,曲线实现了不翻墙查看googlesheet内容。

原理如下:
1googlesheets指定内容进行发布
2用zapier.com生成或直接获取内容的图片,上传到wordpress
3设置zapier定时自动执行第2步

介绍一下zapier,它是一个挺好玩的网站,连接大量的网络服务并提供自动处理和执行的服务,类似ifttt.com。它说是永久免费,免费用户一个月能自动执行100条,但是只能执行两步。

上面的步骤里有一些问题:

1抓取频率,我在zapier上设定每天5点12点17点执行三次。就两个步骤,定时运行和上传图片。

2上传文件,如果存在重名就会被自动重命名为 xxx-1 xxx-2这样的格式,导致图片的链接没法同步更新。

3为了解决链接和文件名匹配的问题,我将图片文件命名为googlesheetsnapshotYYYY-M-D-Hour.png的格式,然后在页面上用js代码判断当前时间,选择调用的图片。每天0-5点调用前一天下午5点的图片,5-12点调用当天5点的,12-17点调用当天12点的,17-24点调用当天17点的。

<script>

var myDate = new Date();
var timestamp = (new Date()).valueOf();
var year = myDate.getFullYear();
var month = myDate.getMonth()+1;
var day = myDate.getDate();
var newDay = year + “-” + month + “-” + day;
newDay = year + “-” + month + “-” + day;
var hour = myDate.getHours();
var dayyes =day-1;
var newDayyes= year + “-” + month + “-” + dayyes;

var urljyzzj = “https://retire50blog.wang/wp-content/uploads/googlesheetsnapshot”;

var s;

if (hour<5)
{

s= urljyzzj+newDayyes+”pm5.png?t=”+timestamp;

}

if (hour<12 && hour>=5)
{

s= urljyzzj+newDay+”am5.png?t=”+timestamp;
}

if (hour<17 && hour>=12)
{

s= urljyzzj+newDay+”.png?t=”+timestamp;
}

if (hour<24 && hour>=17)
{

s= urljyzzj+newDay+”pm5.png?t=”+timestamp;

}

document.write(“<a href=”+s+”>”);

document.write(“<img src=”+s+”>”);

document.write(“</a>”);
</script>

4图片名称和链接匹配了,但是旧文件会越来越多,需要删除

5我解决的方法是在vps后台新建Cron 作业,每天5点执行一次,代码是

rm -f retire50blog.wang/wp-content/uploads/googlesheetsnapshot*.png

用date +”%Y-%m-%d”和date +”%H-%M-%S”,可以查询linux vps 的时间,发现比北京时间早13个小时,所以我要它北京时间5点执行,实际是服务器上16点执行,为了避免和5点抓取并上传的时间冲突,这个删除任务再提前3分钟,放到每天vps上15:57执行。

6由于浏览器有缓存,可能出现图片变了,但是打开还是缓存图片的问题,在图片地址后面加上?t=timestamp

var timestamp = (new Date()).valueOf();

 

终于,我有了一张每天三次动态更新的数据图表。见下面链接:
https://retire50blog.wang/2019.html

说点什么