欢迎光临!欢迎分享转载本站文章,尊重原创,转载请注明出处!

Chrome浏览器手机和平板UA的判断方法

2016年12月5日 没有评论

网站页面在进行移动适配时需要考虑如何判断终端类别,除了判别IOS和安卓外,为了达到更好的用户视觉体验,还需要区分手机和平板的差别。

通常是通过UA来区分的。

Chrome上手机和平板的区别是,手机端浏览器UA比平板端多了一个“Mobile”标识:

Phone UA:
Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Chrome/<Chrome Rev> Mobile Safari/<WebKit Rev>
Tablet UA:
Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>) AppleWebKit/<WebKit Rev>(KHTML, like Gecko) Chrome/<Chrome Rev> Safari/<WebKit Rev>

比如,以下是Galaxy Nexus上Chrome的UA示例:

Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19

可以用以下正则表达式来判别:

Phone pattern: ‘Android’ + ‘Chrome/[.0-9]* Mobile’
Tablet pattern: ‘Android’ + ‘Chrome/[.0-9]* (?!Mobile)’

更详细的说明请参考:

Chrome-User-Agent-Strings

Browser detection using the user agent

另外,下边这个页面可以显示当前浏览器的UA:

http://my-user-agent.com/

分类: js 标签: ,

Redis低版本无法向前兼容高版本RDB文件

2016年9月26日 没有评论

今天做了一个操作导致Redis无法启动。

在部署某一程序的过程中,先是单独安装了3.2.3版本的redis,安装完成后ps一下,redis已经启动。然后又使用安装包部署程序,安装包中包含一个2.8.13版本的redis,直接把之前装的3.2.3的redis给覆盖掉了。程序安装完成后发现redis进程没了,而且通过service redis_6379 restart无法启动。

怎么回事?查看/var/log/redis_6379.log发现如下错误:

[31934] 26 Sep 11:31:47.087 # Can’t handle RDB format version 7
[31934] 26 Sep 11:31:47.087 # Fatal error loading the DB: Invalid argument. Exiting.

哦,当前版本的redis无法处理version=7的RDB格式,这才明白是兼容性问题,但这种“向前兼容”一般很难做到的。

解决办法:删除rdb文件/var/lib/redis/6379/dump.rdb,重启redis就行了。

分类: Redis, 运维 标签: ,

将博客文章自动收录到搜索引擎

2016年7月13日 没有评论

文章被搜索引擎收录是增加网站流量的一个重要途径,如何才能提升收录量呢?

其实,百度和360等主流搜索引擎为站长们提供了“自动收录”功能,只需要增加一段代码,文章即可在浏览时被自动收录到搜索引擎。很方便。

  • 登录百度和360站长平台,添加要收录的网站。
  • 百度

站长需要在每个页面的HTML代码中包含以下自动推送JS代码:

<script>
(function(){
var bp = document.createElement(‘script’);
var curProtocol = window.location.protocol.split(‘:’)[0];
if (curProtocol === ‘https’){
bp.src = “https://zz.bdstatic.com/linksubmit/push.js';
}
else{
bp.src = ‘http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName(“script”)[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

如果站长使用PHP语言开发的网站,可以按以下步骤操作:
1、创建名为“baidu_js_push.php”的文件,文件内容是上述自动推送JS代码;
2、在每个PHP模板页文件中的 <body> 标记后面添加一行代码:
<?php include_once(“baidu_js_push.php”) ?>

  • 360

请将如下js代码安装到要提交的页面</body>前:

<script>
(function(){
var src = (document.location.protocol == “http:”) ? “http://js.passport.qihucdn.com/11.0.1.js?255286f2da4022ae8c37b8798c879160″:”https://jspassport.ssl.qhimg.com/11.0.1.js?255286f2da4022ae8c37b8798c879160″;
document.write(‘<script src=”‘ + src + ‘” id=”sozz”><\/script>’);
})();
</script>

分类: 开发 标签:

一个简单的cnzz数据采集与监控方案

2016年6月8日 2 条评论
  1. 场景
    • 有多个网站需要监控
    • 每个网站的cnzz数据只能分别通过密码来查看
  2. 方案
    • 使用casperjs定时批量抓取每个网站的cnzz数据截图,对于监控来说,一般只抓取概要图和趋势图就行了
    • 将抓取的数据按日期保存在web服务器的html目录里,命名方式为cnzz/DATE/SiteID_overview.png和cnzz/DATE/SiteID_trends.png
    • 写个简单的php页面,通过SiteID枚举出当前日期下的各网站的概要图和趋势图
  3. 实现方法
分类: js, 监控 标签: , ,

使用casperjs进行网页截图

2016年6月7日 没有评论

casperjs有个很实用的功能就是网页截图,通过几个capture函数就能很方便的实现截图功能。

简单代码如下:

var casper = require(“casper”).create();
var x = require(‘casper’).selectXPath;  //用来简化XPath操作

casper.start(‘http://new.cnzz.com/v1/login.php?siteid=123454321′, function(){
this.fill(‘form[name=”form1″]’, {
‘password': 123456
}, true);
});

casper.then(function(){
//this.capture(‘cnzz.png’); //截取整个页面
this.captureSelector(‘cnzz.png’, x(‘//*[@id=”overview_top_order_table”]’)); //截取指定的selector
});

casper.run();

需要注意的是,如果网页内包含中文,服务器上需要安装中文字符集包。CentOS上通过以下命令来安装:

yum install bitmap-fonts bitmap-fonts-cjk

分类: js 标签: ,

casperjs批量执行多个url

2016年6月3日 没有评论

使用each api可以批量访问多个url。例子:

var casper = require(“casper”).create();

var links = [
“http://baidu.com/”,
“http://qq.com/”,
“http://bing.com/”
];

casper.start();

casper.each(links, function(self, link) {
this.thenOpen(link, function() {
this.echo(this.getTitle() + ” – ” + link);
});
});

casper.run();

分类: js 标签:

一大波常用小工具袭来

2016年6月2日 没有评论

今天发现一个比较实用的网站:tool.lu,集合了很多日常使用到的工具,比如:在线运行小段代码、正则表达式、favicon生成、字符串加解密、ip查询等。

这么多工具集合起来,很方便,站长很有创意。

收藏备用。

分类: 工具 标签:

使用casperjs爬取cnzz统计数据

2016年5月26日 没有评论

通过cnzz统计数据来监测网站的运行是运营和运维的一个重要手段,当站点比较多时,自动获取站点的统计数据能够极大的提高工作效率。

然而cnzz没有提供查询接口,需要我们自己手动编写代码来爬取数据。通过抓包可以发现需要很多步骤才能拿到数据,并且每次请求都携带了一些cookies等验证信息。如果一步步来实现的话非常麻烦,实际上我用Snoopy尝试进行抓取并不成功,总是跳转回登录url。

同事提供了一种方法:使用phantomjs模拟登录,试了一下,还真是方便很多。

这里提供了使用casperjs(封装了phantomjs)来进行抓取的实现代码,仅供参考。

var casper = require("casper").create()
casper.start('http://new.cnzz.com/v1/login.php?siteid=12345654321', function(){
    this.fill('form[name="form1"]', {
    'password': 1234560
}, true);   //true, 填充完毕后,立刻提交表单
});
casper.then(function(){
    var today=this.evaluate(function(){
        var tbl=document.getElementById("overview_top_order_table");
        return {
            pv:tbl.rows[1].cells[1].innerHTML,
            uv:tbl.rows[1].cells[2].innerHTML,
            ip:tbl.rows[1].cells[3].innerHTML,
        };
    });
    this.echo(today.pv);
    this.echo(today.uv);
    this.echo(today.ip);
});
casper.run();

js函数通过返回一个对象实现返回多个值

2016年5月26日 没有评论

直接简单粗暴的上代码,已亲测。

<!DOCTYPE html>
<html>
<body>

<p>本例调用的函数会执行一个计算,然后返回结果:</p>

<p id=”he”></p>
<p id=”ji”></p>

<script>
function myFunction(a,b)
{
return {he:a+b, ji:a*b};
}

document.getElementById(“he”).innerHTML=myFunction(4,3).he;
document.getElementById(“ji”).innerHTML=myFunction(4,3).ji;
</script>

</body>
</html>

分类: js 标签:

实用小工具推荐2:正则表达式测试器

2016年5月10日 没有评论

今天为大家推荐的是一个正则表达式测试器:RegexTester。名为测试器,但它实际上提供了正则查找、替换、结果导出等功能,非常适合于日常开发和测试工作。

首先说一下为什么要用到这个工具。有时候我们需要做一些文本处理工作,比如日志,要从文本中提取相关信息。通常情况下,这些信息是有规律的,比如:每行为一条记录,每条记录包含相同个数和意义的字段。这种有规律的文本是很容易处理的,可以用shell中的awk来处理。但有时候就没那么规律,比如下边这2行(实际中会有成千上万行)数据,我希望从中提取uri和sz参数的值,不太容易用awk进行分割处理。

http://pos.baidu.com/acbm?rdid=2494569&dc=2&di=u2494569&dri=0&dis=0&dai=2&ps=9801×0&coa=tn%3Dtemplate_inlay_all_mobile%26adn%3D1%26originUrl%3Dhttp%253A%252F%252Fwww.blwen.com%252Fchuanyuechongsheng%252F2015%252F0428%252F7617_2.html%26pl%3D4%26id%3Du2494569&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1458484701051&ti=%E9%87%8D%E7%94%9F%E4%B9%8B%E5%A7%94%E8%BA%AB%20%E4%BD%9C%E8%80%85%EF%BC%9A%E4%B8%8A%E4%B9%99(2)_bl%E6%96%87%E5%BA%93&ari=1&dbv=0&drs=3&pcs=360×487&pss=360×9938&cfv=0&cpl=0&chi=12&cce=true&cec=UTF-8&tlm=1458455901&ltu=http%3A%2F%2Fm.blwen.com%2F%3Fhost%3Dwww.blwen.com%26src%3Dhttp%253A%252F%252Fwww.blwen.com%252Fchuanyuechongsheng%252F2015%252F0428%252F7617_2.html&ltr=http%3A%2F%2Fm.blwen.com%2F%3Fhost%3Dwww.blwen.com%26src%3Dhttp%253A%252F%252Fwww.blwen.com%252Fchuanyuechongsheng%252F2015%252F0428%252F7617.html&ecd=1&psr=1081×1794&par=1080×1794&pis=-1x-1&ccd=32&cja=false&cmi=0&col=zh-CN&cdo=0&tcn=1458484702&sz=324×270&qn=45b2c0ccd2d70f2d&tt=1458484700976.95.429.535,

http://pos.baidu.com/acgm?sz=320×48&rdid=2521903&dc=2&exps=112101&di=u2521903&dri=0&dis=3&dai=1&ps=0x0&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1458483692530&ari=1&dbv=0&drs=1&pcs=360×54&pss=360×54&cfv=0&cpl=0&chi=1&cce=true&cec=GBK&tlm=1455584508&ltu=http%3A%2F%2Fm.fun.tv%2Fvplay%2F%3Fvid%3D8041968%26malliance%3D2242&liu=http%3A%2F%2Fadm.funshion.com%2Fmat%2F20160216170148-12656951.html&ltr=http%3A%2F%2Fm.fun.tv%2Fvplay%2F%3Fvid%3D8041968%26malliance%3D2242&ecd=1&psr=721×1280&par=720×1280&pis=360×54&ccd=32&cja=false&cmi=0&col=zh-CN&cdo=0&tcn=1458483693&qn=3fe86ec3e856eb67&tt=1458483692449.94.1233.1236,

但实际上这样的数据还是有一定规律的,用下边的正则就可以方便的把想要的字段提取出来。

http://pos.baidu.com/(.*?)\?(.*?)sz=(.*?)&(.*)

打开测试器,将正则表达式和文本填入对应的框内,工具条上选择“多行模式”,再点击“运行”,结果就出来了。结果框内点右键就可以导出csv文件,再用awk处理就方便多了。

正则表达式测试器

日常工作中免不了写几个正则表达式,用这个小工具测测表达式的准确性,可以节省不少时间。

另外,官网还提供了正则表达式的教程,可以去看看。

 

分类: 工具 标签: , ,