罗永浩再次拿锤
就在刚才,我打开微博,看到了一个关于罗永浩的微博,
我听到锤子手机的发布会的时候,发布会已经结束了许久,但是我依然出看了一遍,完完整整的看了一遍锤子叠发布会,在这之中,我发现罗永浩一直在吐槽其他手机生产厂商怎样怎样,说说相机镜组别看说的怎么怎么好,但是世界上就那几家提供商;说说有的厂商说什么什么技术怎么怎么先进,其实都是买的解决方案。
今天又把一把锤子砸向了跑分,特别指出了安兔兔,和暗地指出小米,我只能微微一笑。
Dammit! 为什么有这么多的事情值得吐槽?
就在刚才,我打开微博,看到了一个关于罗永浩的微博,
我听到锤子手机的发布会的时候,发布会已经结束了许久,但是我依然出看了一遍,完完整整的看了一遍锤子叠发布会,在这之中,我发现罗永浩一直在吐槽其他手机生产厂商怎样怎样,说说相机镜组别看说的怎么怎么好,但是世界上就那几家提供商;说说有的厂商说什么什么技术怎么怎么先进,其实都是买的解决方案。
今天又把一把锤子砸向了跑分,特别指出了安兔兔,和暗地指出小米,我只能微微一笑。
上篇文章讲了如何在SAE搭建Hello World,那么这篇文章主要写如何实现微信的验证和自动回复。
首先修改SAE中的index.wsgi文件如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# coding: UTF-8 import os import sae import web from weixinInterface import WeixinInterface urls = ( '/' , 'Hello' , '/weixin' , 'WeixinInterface' ) app_root = os.path.dirname(__file__) templates_root = os.path.join(app_root, 'templates' ) render = web.template.render(templates_root) class Hello: def GET( self ): #print "你好" return render.hello( "你好" ) app = web.application(urls, globals ()).wsgifunc() application = sae.create_wsgi_app(app) |
即创建一个weixinInterface类来处理微信的请求。
在目录下创建weixinInterface文件,定义WeixinInterface类。
一、实现微信验证。
回顾微信开发者的验证方式(一下摘自微信官方文档):
公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:
参数 | 描述 |
---|---|
signature | 微信加密签名 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
加密/校验流程: 1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
那么首先要解决的就是get方法的问题。在WeixinInterface模块中添加代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#coding:UTF-8 import hashlib import web class WeixinInterface: def GET( self ): #获取输入参数 data = web. input () signature = data.signature timestamp = data.timestamp nonce = data.nonce echostr = data.echostr #自己的token token = "yourtoken" #字典序排序 list = [token,timestamp,nonce] list .sort() #sha1加密算法 sha1 = hashlib.sha1() map (sha1.update, list ) hashcode = sha1.hexdigest() #如果是来自微信的请求,则回复echostr if hashcode = = signature: #print "true" return echostr |
现在,放回微信公众平台的注册界面,填上你的验证地址即:http://yourdomain.sinaapp.com/weixin,token填自己的token,要和上面程序中一致。点击提交,如果没有意外现在就应该验证成功了。
二、实现简单的文本回复
现在阅读微信公众平台的文档,先只注意接收文本信息和回复文本信息的格式:
当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上。结构如下:
1
2
3
4
5
6
7
8
|
< xml > < ToUserName > <![CDATA[toUser]]> </ ToUserName > < FromUserName > <![CDATA[fromUser]]> </ FromUserName > < CreateTime >1348831860</ CreateTime > < MsgType ><![CDATA1]></ MsgType > < Content > <![CDATA[this is a test]]> </ Content > < MsgId >1234567890123456</ MsgId > </ xml > |
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本、图文、语音、视频、音乐和对收到的消息进行星标操作)。 微信服务器在五秒内收不到响应会断掉连接。 回复xml结构如下:
1
2
3
4
5
6
7
8
|
< xml > < ToUserName > <![CDATA[toUser]]> </ ToUserName > < FromUserName > <![CDATA[fromUser]]> </ FromUserName > < CreateTime >12345678</ CreateTime > < MsgType ><![CDATA1]></ MsgType > < Content > <![CDATA[content]]> </ Content > < FuncFlag >0</ FuncFlag > </ xml > |
参数 | 描述 |
---|---|
ToUserName | 接收方帐号(收到的OpenID) |
FromUserName | 开发者微信号 |
CreateTime | 消息创建时间 |
MsgType | text |
Content | 回复的消息内容,长度不超过2048字节 |
FuncFlag | 位0x0001被标志时,星标刚收到的消息。 |
那么显然的是,我们需要解析xml文件。SAE预装了lxml库,能够方便的解析xml。首先切换到config.yaml,添加代码,效果如下:
1
2
3
4
5
6
7
8
|
--- name: tedxfactory798 version: 1 libraries: - name: webpy version: "0.36" - name: lxml version: "2.3.4" |
下面切换回weixinInterface文件,代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#coding:UTF-8 import hashlib import web import lxml import time import os from lxml import etree class WeixinInterface: def __init__( self ): self .app_root = os.path.dirname(__file__) self .templates_root = os.path.join( self .app_root, 'templates' ) self .render = web.template.render( self .templates_root) def GET( self ): #获取输入参数 data = web. input () signature = data.signature timestamp = data.timestamp nonce = data.nonce echostr = data.echostr #自己的token token = "yourtoken" #字典序排序 list = [token,timestamp,nonce] list .sort() #sha1加密算法 sha1 = hashlib.sha1() map (sha1.update, list ) hashcode = sha1.hexdigest() #如果是来自微信的请求,则回复echostr if hashcode = = signature: #print "true" return echostr def POST( self ): #从获取的xml构造xml dom树 str_xml = web.data() xml = etree.fromstring(str_xml) #提取信息 content = xml.find( "Content" ).text msgType = xml.find( "MsgType" ).text fromUser = xml.find( "FromUserName" ).text toUser = xml.find( "ToUserName" ).text #模板渲染 return self .render.reply_text(fromUser,toUser, int (time.time()),u "大家好我现在还只会卖萌,你刚才说的是:" + content) |
那么我们还需要建立一个模板,在template目录下,reply_text.xml:
1
2
3
4
5
6
7
8
9
|
$def with (toUser,fromUser,createTime,content,funcFlag=0) < xml > < ToUserName > <![CDATA[$toUser]]> </ ToUserName > < FromUserName > <![CDATA[$fromUser]]> </ FromUserName > < CreateTime >$createTime</ CreateTime > < MsgType ><![CDATA1]></ MsgType > < Content > <![CDATA[$content]]> </ Content > < FuncFlag >$funcFlag</ FuncFlag > </ xml > |
保存全部文件,注意一下toUser和fromUser的顺序,和接受的时候正好相反。
一、隐藏文字
隐藏文字是在网页的HTML文件中放上含有关键字的文字,但这些字用户是看不到的,只能被搜索引擎看到。
隐藏文字的方法可以有几种形式:
颜色隐藏(通过将文字与背景设置为相同颜色),达到隐藏的效果。
小字号隐藏:将文字大小设置为细微文字或微型文字,并且放在不起眼的角落,用户很难察觉到,而搜索引擎却可以正常读取到。隐藏文字的目的就是为了增加页面关键词的密度,想提高网页的相关性,以达到优化的效果。
隐藏文字说白了就是欺骗搜索引擎,现在的搜索引擎已经能轻易的识别这些技术,网站一但被搜索引擎发现隐藏堆砌关键字,轻则降权重,重则网站直接被K。
二、隐藏链接
隐藏链接和隐藏文字相似,但是区别是把关键词放在链接里面,而这个链接也是用户看不到的。
新手站长在跟其它网站交换链接的时候,可能会被蒙蔽,有的站长在给对方做友情链接的时候通过使用CSS来控制隐藏链接的方式也不少见,也有通过提供免费的网站程序,博客风格,网站插件等方法把黑链植入到你的网站。SEO工作者都知道当一个站点被越多的站点给链接的时候,那么这个站点的权重也会随之提升的,这并不包括隐藏链接这种手段所带来的链接数量,所以会影响一个站点的权重正常传递。隐藏链接是被搜索引擎严令禁止的,一旦发现,惩罚将会非常严重。
三、隐藏页面
隐藏页面是针对搜索引擎在爬行和抓取网站页面时所显示经过特别优化的页面,网页使用程序或脚本来检测来访问的是搜索引擎还是普通用户。通过在服务器上设置页面,来判断当前是真实的访问者,还是搜索引擎蜘蛛,然后根据服务器配置好的脚本对真实访问者和搜索引擎蜘蛛提供不同的页面响应。
隐藏页面为SEO作弊手段之一,这种手法意图蒙骗搜索引擎,来影响该网站的网页在搜索引擎中获取较好的排名,通常用户无法发现,检测的方法是,看一下这个网页的快照。
以上就是黑帽SEO最常用的几种作弊手法,对于搜索引擎来说是不友好的几种SEO手段。对于当代企业或商家在做网站优化的同时,建议远离黑帽SEO,让网站能够长期稳定的发展。
首先,请原谅我对这样的一个栏目,起来一个这样骚气,或者说甚至是有点俗气的名字–iDeas,它本身没有什么,但是由于第二个字母的大写,或许会使一部分人感到有些反感。我不是果粉,但事实上我的设变充斥着许多苹果的设备,不仅仅是iPhone,我也是MacBook Air用户,这些年来,似乎i开头,再加一个单词已经成了类苹果的象征,无论是苹果自家的iPod、iPhone、iPad,甚至是传言已久的iWatch或者iTime,包括之后甚至有些山寨和讽刺的iPear。总之,小写i再加一个大写开头单词,似乎是不怎么讨好一部分人,但是无论是苹果也好,还是其他的任何一个公司或者个人,都是在是离不开idea。
今天晚上说了很多,聊了很多,让我更加认识到了idea的重要性,idea是一个开始,所以,我想从现在开始记录下我的每一个idea,无论多么的现实,或者滑稽、可笑、“天真”,我想我都会把它记录下来。
额,也许吧…
因为最近一直想设立一个公开的日志站点,但是实在是没法进行,所以直接那我的这个私密站点来开刀吧,我的站点名(Private Diary)的名字,估计我一会也就会把它换掉,我想要深入透彻的研究SEO,所以从现在就开始做起,如何开启Wordpress的ping服务。
首先说一下什么是ping?ping是基于XML_RPC标准协议的更新通告服务,是用于blog在内容更新时通知百度blogsearch及时进行抓取、更新的方式。百度blogsearch在成功接受到ping以后,会立刻进行抓取并更新。使用ping服务,可以让百度blogsearch在第一时间抓取到您博客上的新内容。当你在博客发布文章时,你一般都希望搜索引擎能及时抓取你博客的内容,而自动Ping功能让这一切变得简单。不过Ping服务只适用于如Wordpress与Zblog等支持此功能的独立博客系统。
ping服务有两种方法。你可以采取手动通知和自动通知使用ping服务。
1.自动ping:如果您的博客程序支持自动ping功能,只需把百度的Ping服务地址设置到你的博客发布后台中。
百度ping服务的地址为:http://ping.baidu.com/ping/RPC2。
2.手动ping:打开http://ping.baidu.com/ping.html页面,在框中输入博客地址或者feed地址,点击“提交博客”按钮即可。
WordPress网站如何设置百度ping服务?
在WordPress后台>>设置>>撰写栏目,更新服务中填写百度的ping服务地址即可,如下图。
常用的ping地址
ping地址 | |
百度 | http://ping.baidu.com/ping/RPC2 |
谷歌 | http://blogsearch.google.com/ping/RPC2 |
有道 | |
抓瞎 | :http://www.zhuaxia.com/rpc/server.php |
雅虎 | http://api.my.yahoo.com/RPC2 |
新浪 | http://blog.iask.com/RPC2 |
在独立博客程序的后台,添加ping服务地址,写了新博文就会自动通知百度的蜘蛛过来了。
近期评论