一直以来,这个号发的都是《狼人杀小程序的开发日志》,体现产品的思路比较多,从纯技术的角度看其实并没有很精彩。这次,来讲讲我在其他方面的探索吧。
众所周知,微信公众号很早就实现了根据关键字自动回复的功能,后台可以根据用户发送的消息设置自动回复,甚至自动和用户聊得有来有去。但是我们自己用的微信号却没有这个功能。
这次我开发的是一个微信机器人程序,可以管理你的个人微信号,进行收发消息、增删好友、文件传输和群管理等功能。配合图灵机器人,还可以让你的微信变成一个自动陪聊的微信机器人,是个很有趣的小工具。
这个工具并非我独立开发,而是fork了Github上的一个项目。原项目的地址是https://github.com/liuwons/wxBot ,我在原作者的基础上进行改进,改善了兼容性,修正了一些错误,并且添加了图形界面。今后应该还会有更多后续开发,且待我慢慢道来。
开始之前,说一点题外话吧。最近公司面临改组,很多人的职位面临变动,惶惶不可终日。这倒也不是不能理解,只是可叹时代日新月异,却还有人梦想着有什么职位可以躺着干一辈子。如果沉迷于自我满足,那么在变化来临的时候就会陷入迷惘。不管怎么说,求人不如求自己。与其满地打滚撒泼要福利,不如让自己强大起来。
因为面临可能的职务变动,所以最近整理了一下自己的简历。在盘点自己的知识结构时发现,其实一直以来我用的语言都很杂,基本是什么合用就用什么。前端和微信小程序只支持JS,那么就用JS。后端服务器只支持PHP,那么就用PHP。GPU计算需要OpenCL和Cuda,那么就OpenCL和Cuda。Unity需要C#,那么就C#。至于平时工作中为了访问数据库和画界面方便,还用过Delphi和PowerBuilder(一个可能没什么人知道的年代久远的语言)。为了解决历史遗留问题,甚至连VB都用过,毕竟我在高中之前最熟悉的语言就是VB。
全栈工程师当久了,能力平均而优势不够明显,这样的人小公司喜欢,但大公司就不太喜欢了。所以我打算把Python捡起来学习一下,毕竟:
在学校做项目的时候,用过Django,访问起MongoDB是很方便。但是大概因为那时候PHP用得比较顺手,所以一直心有抵触。特别是后来发现,PHP访问MongoDB也有库。但是即便如此,Python的优美还是让人印象深刻。随着人工智能概念的火热,Python突然又火起来了。这次我打算不管Django,换一个角度切入。
项目的文件并不多,最重要的就是wxbot.py文件。fork下来后,第一步当然是阅读代码。项目的规模不大,大概就一两千行代码的样子。原作者的代码逻辑也很清晰,所以不难理解。作者的主要思路是利用Web微信的接口,进行相关的开发。这样用户就可以在扫码登录后,把微信托管在计算机上。这和我最初的猜想相差不远。
基本读懂代码的逻辑后,就开始思考改进的方向了。语法方面的特点属于非常基础的东西,直接略过了。我遇到的第一个坑,就是Python的版本问题。准确地说,就是Python2.7和Python3的冲突问题。这两个版本的冲突令我比较意外,因为在我的世界观里,通常后一个版本应该能在很短的时间内碾压之前的版本,完成替代,然而实际上却并非如此。
Python2.7和Python3的区别不小,使得他们的代码无法互相兼容。不仅如此,他们的库也不能完全兼容:某些库只能运行于Python2.7,这使得一些使用了2.7版本的库的项目根本就没法升级到3。例如Ubuntu系统自带的Python就是2.7版本的,并且无法删除或者升级。为了能在系统上跑Python3,需要在系统中装多个Python,并且解决一些对新手来说非常蛋疼的路径问题。
因此,我做的第一个改进,是把它移植到Python3上。(代码本身是2.7的)当然,后来我还做了其他的尝试,让一份代码可以兼容不同的Python版本,这是后话。顺带一提,Python3有自带2to3的工具,但是据说并不完美。作为初学者,为了能更深入理解它们的区别,我没用这个工具。
项目本身规模不大,大概就一两千行代码的样子,所以我就硬改了。大概总结出来的区别如下:
最明显的,就是print语句。旧版的语句中print是关键字,格式形如print str ,新版的语句中格式形如print(str)。
新版中字符串不再需要进行一些不必要的编码转换。
某些库的名字或是库中函数的用法有所变化。
其他暂未发现的坑。
项目相关的全套代码都更新在Github上,开源的,欢迎fork拍砖。地址:https://github.com/xdx3000/wxBot
本篇文章对应分支:62ccf81
本文来自企鹅号 - 一个程序猿的日记媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 一个程序猿的日记媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。