美文网首页我爱编程
确认过眼神,你想要的微信机器人

确认过眼神,你想要的微信机器人

作者: aboutlikefish | 来源:发表于2018-07-06 17:43 被阅读5次

这个机器人已经写了很久,一直也没时间记录下开发过程(知道是懒癌发作了ORZ)。以下用我给机器人取的名字Chowcool来作为主体。好了,开撸。

首先呢,简单介绍Chowcool的诞生历程,本着为广大女同胞淘宝省钱服务的原则(自己也赚点毛票),写一个自动识别淘宝物品是不是有返利,并发送返利链接。然后以社交属性为基本大法的微信机器人应运而生了。

但是Too young too naive,人的需(yu)求(wang)是无休止的,期间又加上了看图识别车型,看图检测颜值等一系列生活必备小工具。总之Chowcool现在也算稳定运行了。

下面来剖析下整个机器人的生产过程:

  1. 工欲善其事,所以先准备工具,我选的开发环境:
编译环境:Python3
编辑器:sublime
os:MacOX
Python第三方lib:requests,wxpy
内置的lib::os,base64,hashlib
WebAPI:网上搜人脸检测,车辆识别之类的就行,这里就不打广告了

  1. 接下来,谈谈Chowcool的设计思路,先说说这个功能的应用场景是
用户已经确认了自己有购买意向的物品,然后查询这个物品是否有返利的链接
那么先我们对输入做个整理,可能的输入情况有下面几种
1. 输入淘宝分享链接,这里有两种链接,一种是短链接,一种原始链接。然而短链接又有不同,需要做不同的处理
2. 输入物品名称或者关键字,这里需要注意的就是要加入非法字符的校验,以及失败后的提示,比较简单

接下来就确认下输出给用户的信息包括哪些,这里我直接给出来,可以根据个人需要自己调整:

五号少儿童🎉篮球🎉正品软皮小学生室内外训练练习超耐磨蓝球特价包邮
月售:19
原价:198.0¥
折后价:85.0¥
可获得返利:42.5¥
链接:http://item.taobao.com/item.htm?id=10722793500

最后需求明确了,可以开始写处理逻辑了,边放代码边填坑。


  1. 填坑之路开始,首先,我们要先new一个微信机器人,这个so easy,因为我们有万能的GitHub,上面选了几个封装好的lib,最后发现wxpy写起来比较爽,上代码:
from wxpy import *
bot = Bot(qr_path='/Users/funny/Desktop/qr.png', cache_path=True)
@bot.register(except_self=False)
def reply_auto(msg):#这里是消息监听函数
print(msg.text)

机器人就这么简单建好了,然后定义一个消息监听函数,就可以获取用户发来的消息,具体情况可以看wxpy文档,地址就不贴了

接下来要花点时间去处理,我们要找到一些返利网来获取数据,只能够通过分析网页协议,才能获取想要的数据,相当于自己山寨了一个API,这里我使用的是淘宝自己的返利营销平台,然后通过分析,构建了数据获取过程:

url = 'https://pub.alimama.com/items/search.json'
page = 1
size = 50
header = {
           'accept': 'application/json, text/javascript, */*; q=0.01',
           'accept-encoding': 'gzip, deflate, br',
           'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
           'Host': 'pub.alimama.com',
           'referer': 'http://pub.alimama.com/promo/search/index.htm?>q=%E8%B7%AF%E7%94%B1&_t=1527140719231',
           'Cookie': 't=65a3f118f0d5d43c7fe117a8be08f817; cookie2=13fd1221dec3ea9763637418957b893b; v=0; _tb_token_=33be65ded35eb; cna=SS6EEzNgDwsCAd73tCd2fBcM; undefined_yxjh-filter-1=true; alimamapwag=TW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTNfNCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzY2LjAuMzM1OS4xODEgU2FmYXJpLzUzNy4zNg%3D%3D;cookie32=f3baeec7c052461cbe5eb16eee1db478;alimamapw=Rw8HDVJeAQlDDVFYXF5cV19YPQcBUVJQUQZRCQMMBw4DVVQJVwQDBlUEAQZXX1UIVFJT;cookie31=MTMyNDQwMDk1LHM4Mzg0ODE4JTQwYWxpbWFtYSwxMTczNTkwNjJAYWxpbWFtYS5jb20sVEI%3D;login=U%2BGCWk%2F75gdr5Q%3D%3D; taokeisb2c=; account-path-guide-s1=true;rurl=aHR0cDovL3B1Yi5hbGltYW1hLmNvbS8%2Fc3BtPWEyMTl0Ljc2NjQ1NTQuYTIxNHRyOC45LjJlMjAzNWQ5dFdKVE44; 132440095_yxjh-filter-1=true; apushfab5c63114239d725bd0105e1b8e4eaa=%7B%22ts%22%3A1527140884215%2C%22heir%22%3A1527140728008%2C%22parentId%22%3A1527140709470%7D;isg=BEZGCQKXYVfeTzWwL8e04rPtlzoID4tlcvwS2zBrhGlVM_BNhTZNc6eFDm__v4J5',
           'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
           'x-requested-with': 'XMLHttpRequest'}
content = msg.text
preload = {'q': content,#这里是要搜索的内容
              '_t': '1527074885336',
              'toPage': page,
              'quseryType': '0',
              'sortType': '1',
              'auctionTag': '',
              'perPageSize': size,
              'shopTag': '',
              't': '1527078218120',
              '_tb_token_': '33be65ded35eb',
              'pvid': '10_222.240.118.0_745_1527078217613'}
   # print(preload)
taobao = requests.get(url=url, params=preload)
taobao = json.loads(taobao.text)

这一整段就是数据获取的协议,其中content就是我们定义的输入,这个输入不是直接能拿来用的,需要做以下的处理:

def shorturlRe(url):#这里是短链转长链
   req = requests.get(url=url)
   html = etree.HTML(req.text)
   return html.xpath('//script')[1].xpath('text()')[0].split('var')[3].split(";")[0].split("'")[1]
if msg.sender not in mp:
   if content.startswith('【'):
     # print(len(content.split(' ')))
     if len(content.split(' ')) > 5:
       content = content.split(' ')[0].split('】')[1]
       content = shorturlRe(content)
     else:
         content = content.split('】')[0].split('【')[1]

这段代码是常用的消息处理,基本不需要改动。要注意的是需要定义一个短链转长链的函数,这里可以根据需要自行处理。

最麻烦的一段过去了,剩下就等数据返回,处理下数据输出,返回的是json,要转成字典。

title = taobao['data']['pageList'][0]['title'].replace('<span class=H>', '🎉').replace('</span>', '🎉')
     # print(title)
     msale = taobao['data']['pageList'][0]['biz30day']

      reservePrice = taobao['data']['pageList'][0]['reservePrice']
      zkPrice = taobao['data']['pageList'][0]['zkPrice']
      returnFee = taobao['data']['pageList'][0]['tkCommFee']
      img = 'https:{}'.format(taobao['data']['pageList'][0]['pictUrl'])
      img = requests.get(img).content
      with open('/users/funny/desktop/1.jpg', 'wb') as f:
        f.write(img)
      link = taobao['data']['pageList']

最后把数据返回给用户,要注意处理数据返回异常的情况,找不到物品后的处理,分为两种情况,一种是没有找到指定物品,返回推荐物品,一种是输入异常,提示重新输入:

if not link or not content:
       if msg.sender == people:
         msg.reply_msg('无法找到对应的物品,请重新输入')
       else:
         msg.reply_msg(text)
     else:
       msg.reply('{}\n月售:{}\n原价:{}¥\n折后价:{}¥\n可获得返利:{}¥\n链接:{}'.format(
           title, msale, reservePrice, zkPrice, returnFee, link[0]['auctionUrl']))
       if 'darwin' in sys.platform:
         # print(sys.platform)
         msg.reply_image('/users/funny/desktop/1.jpg')
         os.remove('/users/funny/desktop/1.jpg')
         # print('done')
       else:
         msg.reply_image(os.path.abspath(os.path.curdir) + '\\' + '1,jpg')
         os.remove(os.path.abspath(__file__) + '\\' + '1,jpg')
   except TypeError as e:
     # print(people)
     if msg.sender == people:
       msg.reply_msg('无法找到对应的物品,请重新输入')
     else:
       msg.reply_msg(text)

whatever, 都写完了,完成既定目标,本篇并没有把看图识别车型,看图检测颜值等代码放上来,其实原理是一样的,上述功能完整代码会放在GitHub这里~~~
效果图:

image.png

写的这些文章是给刚入门的喷油做些参考,欢迎点星狂赞,顺便打个广告,颜值计算器小程序,源码看这里

image.png image.png

相关文章

  • 确认过眼神,你想要的微信机器人

    这个机器人已经写了很久,一直也没时间记录下开发过程(知道是懒癌发作了ORZ)。以下用我给机器人取的名字Chowco...

  • 4.14

    确认过眼神,你是我想要的那个人。

  • 只需4招让你建立起高质量微信群,借助微信群小助手效果更佳!

    也许您听说过扫地机器人,洗碗机器人等等,那么您说过微信群机器人吗?您知道微信群机器人是用来做什么的吗? 如果您不知...

  • 10行代码-利用Python做一个微信聊天机器人(简单易懂)

    也许你听说过QQ机器人、听说过图灵机器人,但今天我们只需要10行代码做一个微信机器人!当然,如果你想把这个机器人做...

  • 淘宝客微信机器人SDK接口API

    淘宝客微信机器人SDK接口API,淘客机器人API,淘宝客微信机器人SDK,微信机器人API微信二次开发sdk完整...

  • 确认眼神

    从一个人的眼神,可以猜想到对方内心的想法! 人的眼睛,如果能够与人真诚对视,那么心灵也会靠近。 我们常常看到一些人...

  • 确认眼神

    “确认过眼神,我遇上对的人~” 有时我们总会不经意透过对方的眼神,来判断一个人是否可信、是否爱自己、能否处得来。 ...

  • 一见钟情

    确认过眼神,他就确定你是他的菜; 确认过眼神,他就知道他爱上了你; 确认过眼神,他说话变得语无伦次; 最后的最后,...

  • 我会确认你的眼神

    丽江,我未曾谋面的魅惑 窈窕的你,我苦苦寻觅的千百度 云南叒飞来的云,披着明媚 大声告诉我不时的仰望 玉龙雪山似你...

  • 确认的眼神

    我在这样的清晨, 辗转于心中的伤痕, 跑了几千遍, 剩下了劳累, 跑不出心中的苦闷。 我在这样的清晨, 等待着某一...

网友评论

    本文标题:确认过眼神,你想要的微信机器人

    本文链接:https://www.haomeiwen.com/subject/shcbuftx.html