最近我在使用孟坤壁纸浏览必应每日一图的时候发现了一个奇怪的现象,那就是底下的介绍全成英文的。不光如此,而且在中午访问孟坤壁纸的时候壁纸还是前一天的,根本没有当天的,下午才出现当天的壁纸。而我们实验室曾介绍过的其他含有必应壁纸API的程序则全部显示出了当天的壁纸,包括sinaapp的必应中国版壁纸API网址也是直接打开了当天的壁纸。为什么会出现这种现象呢?

 

首先我们判断介绍出现英文说明API采集到的语言被更改了,但是我们不能仅仅认为只是采集的语言被更改。因为我们还需要注意一个细节,那就是壁纸在中午还是前一天而下午才会是当天的。这说明了什么,这可不仅仅是语言被更改这么简单,很可能是采集的必应搜索引擎区域被更换了,很大的可能是采集换成了美国区的必应壁纸。为什么我会这么想呢?首先语言变成了英语,再一个必应壁纸的更新时间都是所在区域当地时间的午夜零点,如果是中国区的那么更换新壁纸的时间应该是在午夜时分,而永远不会是在下午。且中午还是前一天的壁纸,到了下午就更换为当天,这说明这一区域在北京时间的这个时候正好就是午夜,跟我们有12-13甚至是15-16个小时的时差,很明显这是西半球的时间,准确的说是美洲的一个国家。又因为拉丁美洲主要都是西班牙语或者巴西是葡萄牙语因此这些国家区域根本就不会是英语,所以这个区域的英语国家只有两个国家,要么美国要么加拿大,很明显基本上这就是美国区的必应壁纸,因此我们得出结论,那就是出现这种情况是由于必应壁纸API所采集的区域变成美国区所致。

 

至于为什么本来好好的默认显示中国区的内容怎么会突然出现这种情况,我的分析是可能你的这台服务器或者VPS(虚拟主机不能自动远程,所以虚拟主机不可能)使用远程连接到了美国或者加拿大的北美服务器或者VPS所导致的,这使得你这台生产环境中的服务器因为能访问到美国服务器,所以采集的国家区域和语言全部自动按照API默认的区域来采集,毫无疑问必应作为微软的搜索引擎那肯定默认的源区域就是美国,所以才出现了API采集美国区必应的内容。

 

解决这个问题的方法是非常简单的,我们只需将API采集的内容不再使用默认API接口,而是指定为一个区域,比方说中国版就指定区域为中国。

 

那么怎么修改呢?不用重启web服务器或者物理服务器,因为你怎么重启都没用,现在已经设定采集区域为默认的美国,只能通过改掉源代码中有关必应采集接口的选项来进行改回。

 

首先我们打开孟坤壁纸程序的源代码,找到api.php这个文件

 

因为采集接口就在这个文件里面,我们只需对这个php文件修改即可

 

找到下面这个一行

 

case ‘bing’:
$start = getParam(‘start’, -1);
$count = getParam(‘count’, 8);
echojson (file_get_contents(“http://cn.bing.com/HPImageArchive.aspx?format=js&idx={$start}&n={$count}“));
break;

 

请注意看黑体部分,这就是必应壁纸的采集接口的API(准确的说是默认的),当你的服务器是国内或者亚洲的那一般根据中文的语言默认设定区域就是中国区,但是一旦你的服务器在美国或者你的国内或亚洲服务器能连接美国服务器了,因为能找到源头了所以区域很可能就会改成美国区了,所以这个默认设置说到底就是美国区,只是因为之前互不接触所以默认只采集中国的,一旦能接触到美国的API源那肯定会自动调成美国的,且很难改回。

 

但是改回来的方法恰恰很简单,需要你自己手动指定区域将其默认区域改成指定的区域进行改回,调整回到采集中国区。这个方法即使以后还出现远程美国主机的情况都不怕了,因为区域已经永久指定为采集中国区,除非你又改了这个源代码。

 

case ‘bing’:
$start = getParam(‘start’, -1);
$count = getParam(‘count’, 8);
echojson (file_get_contents(“http://cn.bing.com/HPImageArchive.aspx?format=js&idx={$start}&n={$count}&mkt=zh-CN“));
break;

 

 

只需在”的前面,链接的最后加上&mkt=zh-CN保存修改即可,接下来打开浏览器你就会发现介绍全部变回到中文,上午也能看到当天的壁纸了。这就说明API已经被指定只采集中国区壁纸,这样完全跟中国区必应同步了。

 

如果你也遇到了这种情况,你不妨试试这个方法,一劳永逸的解决采集区域被篡改的问题。

 

官方采集接口以及更多关于孟坤壁纸的有关介绍请看主站文章 http://www.shibushi.cc/post/126.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注