出家如初,成佛有余

微信公众平台微信消息推送实现方案

Posted in 移动互联网, 技术相关 by chuanliang on 2014/04/29

微信公众平台作为客户关系管理平台、服务平台,必须能够对用户的投诉申告、咨询、购买订单等消息及时响应和反馈,以便在第一时间服务好客户。因此在微信公众平台管理系统中有诸多场景需要及时获取用户互动消息,例如有新的订单产生、新的用户申诉等等。
但目前微信公众平台对消息推送有诸多的限制:
1、公众平台并没有提供主动推送消息到指定微信号的接口,无法推送消息到微信号
2、微信公众平台管理后台能够点对点向在24小时内与公众号互动过的微信号推送消息。注意:如果超过24小时,公众平台再也无法主动推送消息给粉丝。
早期并没有24小时限制,于是有诸多人通过对所有粉丝点对点推送消息的方式来模拟消息群发的效果,从而规避订阅号每天只能群发一次的限制,后来被腾讯封杀掉了。

1、微信公众平台的消息通知方式
因此目前要实现及时获取用户互动消息,除了在后台派专人刷屏外,只能通过邮件通知、短信通知两种方式。
与短信通知先比,邮件通知及时性并不高,且由于国人的使用习惯,较少使用push mail之类的服务,因此邮件通知适合非紧急消息的延迟处理。
短信通知倒是比较及时,但考虑到短信发送成本、短信通道的稳定性等因素后,还是存在较大局限性。
处于移动互联网时代,最合理的消息通知方式莫过于主动推送微信消息给指定的公众号,但正如上面描述,目前并没有直接推送消息给微信号的接口和服务可用。
  有么有靠谱可用的微信消息推送的解决方案啊?

 

2、实现微信消息推送的思路
既然在微信公众平台后台可以主动推送消息给24小时内互动过的粉丝,那么,我们可以利用此规则,让微信公众平台的管理员(或运营人员)每天至少主动上行一 条消息给自己的公众平台,那么我们就可以借助程序来自动化往此微信号主动推送消息。剩下的问题就是:
1、怎样让消息推送过程自动化。也即:有符合业务规则的消息产生时,由程序主动自动化推送对应格式的消息给管理人员或运营人员的微信号
2、怎样保证数据安全,只将消息推送给有权限的微信号
当然在具体的技术实现上还有诸多问题需要考虑的,例如:
用户在微信上行消息的标识是openid:fromusername,而在公众平台的标识是fakeid,这两者的对应关系怎样匹配建立;

在技术实现上,强烈建议由兴趣的同学看看casperjs+phantomjs,简直是自动化模拟的神器,尤其是结合xpath之类,比正则表达式解析页面等方式方便多了。

3、游迹天下解决方案
基于以上思路,游迹天下微信公众平台管理系统提供了对诸如新订单、新预约等重要消息多种渠道推送支持,包括短信、邮件、微信号。
这里主要说一下微信号消息推送的功能使用。
   使用用法:

   1、公众号的运营人员在微信中关注公众号,上行:bangding 到公众号,即可完成绑定操作,由于数据安全原因,缺省状态为:绑定但未生效,此时候运营人员还不能接受消息通知
2、公众号的管理员在游迹天下管理后台的“会员账户管理->微信号绑定管理”中审核对应的微信号,将状态设置为1,将对应微信号纳入到通知列表中。
3、运营人员每天至少在微信中主动上行一条消息给公众号。
   4、系统在有订单、预约等需要通知的地方,会主动推送消息给所有已经成功绑定的微信号。

 

194725h9zirrhrxrxzyshq

用Sphinx驱动WordPress搜索

Posted in 技术相关 by chuanliang on 2014/04/14

乐无线lewuxian.com最初的搜索是基于wordpress自身的数据库搜索功能,在数据量剧增的情况下,搜索速度奇慢无比,因此改用Sphinx来完成对Wordpress的搜索请求。

大的框架:采用sphinx-for-chinese + WordPress Sphinx Search Plugin + Redis 搭配来实现搜索性能的优化。其中:

sphinx-for-chinese 在sphinx基础上增加了CJK字符的搜索支持。WordPress Sphinx Search Plugin 是Wordpress插件,用于集成Wordpress和Sphinx;Redis用于搜索操作和结果的缓存。

1、sphinx-for-chinese安装配置

最初直接使用了sphinx 最新版本来实现搜索,为解决中文(CJK)搜索问题,按照 Using Sphinx search engine with Chinese, Japanese, and Korean language documents 提供的方案,大致注意事项如下(对sphinx.conf中每一项source段):

1)、charset_type :Wordpress数据库编码采用utf-8编码,Sphinx 的 charset_type 设置为 utf-8。

2)、charset_table :设置 CJK 专用的 charset_table ,简单起见直接拷贝cjk_index_example.zip 例子提供的charset_table 。

需要注意的是:由于charset_table 的内容太多,无法放在一行,需要分成多行,sphinx.conf的续行标识为“\”,在续行符“\”后一定不能有空格等其他符号,只能为回车换行符号 (\r\n)。在配置过程中,习惯性在”\”后面加了空格,结果在执行indexer时候,报莫名其妙的错误。

3)、ngram_chars:设置CJK分词符(CJK Ngram Characters ),仍直接拷贝cjk_index_example.zip 例子提供的是ngram_chars。

4)、把 ngram_len 设置为 1,目前版本只支持设置为1 。

按照以上步骤设置为,Sphinx倒是能够对Wordpress的中文文档建索引、搜索了,但由于建立索引和搜索时候都是按照1分法索引查询的,导致搜索效果并不好。一般中文搜索按照二分法效果好得多。

因此寻找sphinx中文搜索的更优解决方案。目前可选的似乎就是:sphinx-for-chinese  和coreseek 。简单对比,感觉coreseek对sphinx调整较大,不像sphinx-for-chinese那样简洁,因此选择了sphinx-for-chinese。

在CentOS 5服务器上安装最新版本的sphinx-for-chinese-2.2.1-dev-r4311.tar.gz ,在make时候报错,换成sphinx-for-chinese-2.1.0-dev-r3361.tar.bz2 倒是比较顺利。

编译安装倒是比较简单,sphinx-for-chinese官方文档说得比较清楚。

值得注意的是官方说明文档提到的xdict_1.1.txt 需要从google code下载http://code.google.com/p/sphinx-for-chinese/downloads/list ,并没有包含在发布包中,也没有在官网http://www.sphinx-search.com/ 提供下载。

 

  2、WordPress Sphinx Search Plugin安装配置

参照 WordPress Sphinx Search Tutorial 这篇文章,完成WordPress Sphinx Search Plugin的安装配置。

sphinx与wordpress集成,所使用的配置文件 :sphinx.confhttp://www.yeeach.com/sphinx.conf

注意事项:

1)、由于lewuxian.com对每一个公众号在wp_users中都有一个对应的作者,要支持对author的搜索需要对对应主题theme增加支 持页面。简单起见,采用如下的变通方式:将作者的user_login和user_nicename拼接到wp_main_posts和 wp_delta_posts的source中,这样在建索引和搜索时候可以支持对author的索引和搜索,不需要做其他复杂处理。

sql_query    = select \
p.ID*2+1 as ID, \
0 as comment_ID,\
p.ID as post_ID,\
p.post_title as title, \
concat(p.post_content ,’ ‘,u.user_nicename,’ ‘,u.user_login) as body, \
        t.name as category, \
IF(p.post_type = ‘post’, 1, 0) as isPost, \
0 as isComment, \
IF(p.post_type = ‘page’, 1, 0) as isPage, \
IF(p.post_type = ‘post’, 0, IF(p.post_type = ‘page’, 1, 2)) as post_type, \
UNIX_TIMESTAMP(post_date) AS date_added, \
GROUP_CONCAT(DISTINCT tag_t.name) as tags \
from \
wp_posts as p \
left join \
wp_users  u on (p.post_author=u.ID) \

 

  3、搜索操作及结果的缓存

由于在搜索后展示搜索结果详情时候需要查询数据库,目前服务器资源有限,为减缓数据库压力,采用Redis对搜索操作及结果进行缓存,可参考 使用Redis突破WordPress性能瓶颈

 

   4、其他配置

1)、crontab配置

1 1 * * * /usr/local/sphinx-for-chinese/bin/indexer –rotate –config /data/www/wwwroot/www.lewuxian.com/wp-content/uploads/sphinx/sphinx.conf  –all
*/5 * * * * /usr/local/sphinx-for-chinese/bin/indexer –config /data/www/wwwroot/www.lewuxian.com/wp-content/uploads/sphinx/sphinx.conf wp_delta –rotate
*/5 * * * * /usr/local/sphinx-for-chinese/bin/indexer –config /data/www/wwwroot/www.lewuxian.com/wp-content/uploads/sphinx/sphinx.conf wp_stats –rotate

2)、searchd

searchd启动脚本

放到/etc/init.d/searchd ,然后执行:

chkconfig  –add  searchd

chkconfig  –level searchd 345

3)新搭建的wordpress,执行indexer –rotate  –config –all 报max_id=’(null)’ 和min_id=’(null)’错误

using config file ‘/data/www/wwwroot/www.lewuxian.com/wp-content/uploads/sphinx/sphinx.conf’…
indexing index ‘wp_main’…
ERROR: index ‘wp_main’: sql_query_range: max_id=’(null)’: must be positive 32/64-bit unsigned integer.
total 33471 docs, 294394782 bytes
total 80.890 sec, 3639444 bytes/sec, 413.78 docs/sec
indexing index ‘wp_delta’…
ERROR: index ‘wp_delta’: sql_query_range: min_id=’(null)’: must be positive 32/64-bit unsigned integer.

解决办法:

select min(id) from wp_posts;

select min(comment_id) from wp_comments;

如果min(comment_id)为NULL,则随便找一篇帖子回复一下即可。

 

5、参考资料:

Using Sphinx search engine with Chinese, Japanese, and Korean language documents

sphinx-for-chinese官方文档

Sphinx速成指南

 

原文链接:http://www.yeeach.com/post/1247

 

如何通过微信公众号/微信号获取对应的二维码

Posted in 移动互联网 by chuanliang on 2014/04/08

一般情况下我们通过微信”扫一扫“功能所扫描的二维码都是对应微信公众号或微信私号主动主动分享的。
经常有同学问起:有木有办法可以直接通过微信公众号或者微信私号获取对应微信号的二维码?
答案是:有,而且极其简单。
方法一:利用游迹天下二维码工具获取
  游迹天下彩色二维码工具 http://qr.uooji.com 已经提供了通过微信公众号或微信私人号的微信号获取对应二维码的功能。
使用方法很简单:打开 http://qr.uooji.com,在左侧导航提供了诸多二维码生成选项,第一项就是直接通过微信公众号或微信私号的微信号获取对应的二维码。
例如要获取游迹天下官方微信uooji_com的二维码图片,在输入框处输入uooji_com,然后点击右下角的“生成二维码”按钮即可以获得对应微信号的二维码。

方法二:不依赖任何工具手工获取及游迹天下二维码工具实现原理
秉承游迹天下”开放、共享“的原则,考虑到大部分同学喜欢刨根究底以及对工具安全性的担心,这里说一下游迹天下二维码工具根据微信号获取二维码的原理,这样大家可以不依赖工具也可以使用。
其实原来很简单,只需要在浏览器中输入如下地址:http://open.weixin.qq.com/qr/code/?username=weixin_account,将weixin_account替换成需要获取的微信公众号或微信私号的微信号。
注意:微信公众号的weixin_account是指微信公众平台后台中的”微信号“,不是”名称“,也不是”原始ID“,如下图:

例如要获取游迹天下官方微信uooji_com的二维码图片,直接在浏览器中输入:http://open.weixin.qq.com/qr/code/?username=uooji_com,即可以得到如下二维码图片:

原文链接:http://www.yeeach.com/post/1246