记一次利用Python解决实际问题的思路

一、问题

自己弄了一些账号在网上出售,账号默认使用期限是一个月,每个账号的出售价格也不全部一样,每个账号被购买的时间也不一样。账号数大概10个左右,所以为了方便记录每个账号的账号信息、价格、购买人、上次购买的时间等数据,我就建了个数据库表,然后把这些信息存进去,自己每隔几天查下数据库,看看哪些人到期了,询问下是否续期之类的。

刚开始觉得还ok,能接受,毕竟也就10个左右,手动发几条消息给别人也很容易,将就着用了。

后来就不行了,账号数量达到了20个左右,这数量翻倍了,每次都得一个一个的去对着看,很烦,也很low。所以,我开始了我的计划。

二、计划

既然手动的效率不行,那就得向自动化靠拢了。

之前看哪些过期是数据库查询,查询完了,再通知那些过期的人续费,那么需要自动化的过程就是:

  1. 查询数据库里面过期的数据
  2. 通知这些过期的人续费

初期的这个计划,我们分析一下可行性

  1. 查询数据库,对于python来说,小菜一碟,PyMysql完美解决
  2. 通知别人续费,由于现在的沟通方式一般都是微信,这样比较快,所以首选是能用微信通知,而刚好python里面的itchat能帮助我们实现这个。当然邮件通知也并不是不行,只是不符合当前的趋势。

那这个计划,用python是完全可以进行的

三、实施

1、查询数据库里面过期的数据

由于我的数据库里面存的是上次购买的时间,所以在查询过期数据的时候,需要查询上次购买时间,再对比今天回退30天的日期,如果上次付款时间比30天前还早,那就是过期了,反之则没有。说的有点拗口,但总的来说是个很简单的数据库查询,没什么难度。

2、通知续费

上面我们已经计划用微信来通知续费,那么就得研究下itchat这个包。

通过看文档知道,可以通过扫码来登录网页版微信,并支持查询好友,发送消息。可以通过用户名、昵称、备注、微信号等方式查询好友。这里继续来分析下,通过哪种方式比较好:

用户名:这里的用户名是一长串内容,微信后台生成的,以@开头,后面是数字和字母,而且最主要是竟然会变,我之前以为是唯一固定的,但是发现同一个人两次竟然不一样,不知道是和什么有关。总之,存在不固定性,所以可以排除。

昵称:昵称就是每个人给自己取的微信名,例如我的是“慢慢慢慢慢热”,这个就是昵称,但是微信名是可以改的,如果别人自己更改了昵称,就找不到这个人,就发送不了消息了,也存在不固定性,所以可以排除。

备注:备注是自己给对方设置的,这个备注只有自己可以改,也就是说只要自己不改,这个备注是一直不变的,这就符合了我们的要求。

微信号:微信号有的人是没有设置的,这时候系统会自动给他一个,以wxid_开头,这种是查询不到好友的(我在手机版微信中搜索过这种微信号,没有结果),所以可以排除。

那么综上,我们唯一的选择就是使用 备注 来查询微信好友,然后发送消息给他。

也就是说,我们得给每一个购买账号的人,取一个备注,这个备注的特点是得唯一,并且,这些人的备注格式应该保持一致,这样可以更方便的查找,例如:账号@金额,通过这种特定的格式,我们在微信中查找就更容易,只要查找到好友,发送消息就简简单单了。

所以,完成了上两步之后,我做出了一款小工具,并且打包成exe文件,使用的时候双击下就ok

具体的就是:当我双击运行后,数据库查询截至到今天是否有过期的用户。如果没有,则打印信息到窗口告诉我没有过期的用户;如果有,则itchat开始工作,生成微信登陆二维码,登陆后,通过备注自动在我的微信好友中查找那些过期的人并发送过期的信息给他们。

至此,一个最基本的完成了。将之前手动查询数据库,手动查找好友,手动发送微信消息,全部自动化实现,算是进了一小步。

四、升级

上面的工具,总的来说,用的也还算可以,每天回去双击一下就行,但是我的需求也越来越多了,比如:

​ 1、上面的工具,虽然打包成了exe文件,但我不能带着到处跑吧,我想随时随地的查询

​ 2、总有记不住自己账号信息的人,时不时问我一下,我也记不住啊,全在数据库里,所以除了要能查询过期的数据外,我还想能查询每个账号的信息

​ 3、有人续费了或者不用了,我需要能马上修改购买时间和账号状态

需求是做不完的,以上这些是目前最大的需求,我们来一一实现。想要实现这些,其实很简单,利用flask写一个web应用即可,手机都可以操作,但是我不会前端,所以另谋出路。

再来分析一下,查询过期、查询某个账号信息、修改购买时间、修改账号状态等等,本质上是操作数据库,这个实现起来没有问题,关键是怎么去触发操作数据库

好在,强大的itchat可以监控好友或群聊消息,比如运行itchat,扫码登陆微信A,微信A的好友微信B给A发送消息,itchat是可以完全监控到的。这就好办了,可以把微信B当成遥控器,微信A是接收器,A接收B发送的关键字,来进行不同的操作(需要注意的是,在代码中,接收关键字时要指定关键字的发送者是遥控器,其他一律不回应,否则任何人都可以操控),比如:

过期:发送关键字 [过期],查询所有过期数据

查询:发送关键字 [查询+账号],查询该账号的数据

更新:发送关键字 [更新+账号+日期],更新该账号的购买日期

删除:发送关键字 [删除+账号],将该账号暂时置为无效

全部:发送关键字 [全部],查询所有账号数据

我们用作为遥控器的微信发送过期、查询、更新、删除、全部这几个关键字,每个关键字需要按特定的格式发送,当作为接收器的微信收到关键字时,再按照程序里面的逻辑去执行不同的操作,程序里的逻辑也就是数据库操作的逻辑,这样就达到了使用手机随地操作的要求了。

但是,还没有达到随时的要求,要想随时,就得在一台电脑上运行程序,把作为接收器的微信永远登陆在上面。显然,如果使用自己家里的电脑,是不太现实的。一个是不可能永远不关机,另一个是程序崩溃了要晚上才能回去重启,无法控制。

所以,云服务器是最好的选择,不管选阿里云还是腾讯云还是自己买的其他VPS都可以。首先安装mysql在服务器上,然后将本地的数据全部复制到云服务器的mysql中,然后安装python,安装必要的包就可以运行了。需要注意的是,需要在服务器上后台运行脚本,否则在断开xshell的时候脚本也会停止运行,这里可以了解学习一下linuxnohub命令。

完成以上这些,作为接收器的微信就永远登陆了,遥控器就可以随时随地操作了,我们上面的需求就基本实现了。

五、总结

针对一个自己实际遇到的问题,然后利用自己已学或未学的知识去解决,这是一个很棒的体验。在这次解决问题的过程中,接触了mysqlpython编程及itchat包的运用、打包python脚本为exe文件、linux服务器的相关操作、linux服务器部署python应用等知识;也踩过很多坑,比如itchat获取好友的方式、比如linux部署python应用等等,但是在一番摸索和查找之后,问题也都解决。代码在码云上,代码可能写的不怎么好,但重在思路,以此来分享一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容