前言
什么是淘宝客
相信很多人都听过或者接触过各类导购 APP、QQ 群、微信群分享一些淘宝商品的优惠券或是其他的优惠信息。
用户可以在这些渠道上获取到相较于从淘宝平台搜索出来的商品更加优惠的价格或者是领取到面额较大的优惠券。
这些渠道,都是属于淘宝客的渠道。淘宝客是淘宝平台推出的一种按成交计费的推广模式,通常也指通过这种模式赚钱的人。
前几年淘宝客红火的时候,各类导购网站、导购 APP 以及优惠券 QQ 群、微信群层出不穷,在淘宝网在搜索 “微信人导购机器”,还可以看到很多商家在售卖淘宝客的微信机器人,能够自动回复群内的人的消息,以及定时推送一些优惠商品信息等。
今天,我们就使用哪哪都会出现,哪哪都行的大蟒蛇——Python,来打造一个淘宝客微信机器人,实现在群聊中自动回复搜索并返回商品这一淘宝客导购微信机器人最基本的功能。
如何注册
方法很简单,在淘宝客的推广平台——阿里妈妈淘宝联盟(http://pub.alimama.com/)上注册一个一个帐号即可,我们可以使用淘宝的账号进行登录。
在登录之后,我们可以在 “我的联盟” 中的 “推广管理” 中进行推广媒体的设置:
在其中,我们可以添加网站、APP、导购、软件的推广等。在此,我已经添加了一个网站的媒体,并且已经提交验证成功了。大家可以按照自己的情况创建推广媒体,推荐使用网站推广媒体。
在创建好推广媒体之后,我们还需要创建一个推广位,推广位用于归属具体的淘宝客推广商品,其中的 PID 在我们后面调用 API 接口的时候会使用到,大家注意一下:
再回到推广媒体管理上,在我们添加的网站媒体通过了阿里妈妈的验证成功后,我们会得到一个联盟合作网站的 API。
点击 “查看” 链接,会跳转到阿里开放平台上我们创建的网站推广位(推广位为在阿里开放平台上显示为一个应用)的概览中,其中显示了我们的应用接口信息,接口数据和我们获得的权限 API 等:
APP 证书中的 App Key 和 App Secret 会在调用 api 接口时作为凭证来认证,下方的功能场景中显示我们获取的 API 接口:在这里我的应用有:
其中淘宝客基础 API 中包含了其他的一些接口的,我们主要使用这个 API 包。
这样,我们就可以开始通过 API 接口获取到淘宝客的推广信息。
Python 环境下使用淘宝客 API
在注册成为淘宝客,添加推广位获取到淘宝客的基础 API 之后,我们就可以通过调用淘宝客的 API 来获取淘宝客推广信息了。
了解淘宝客接口
在调用淘宝客的 API 之前,我们先来看一下,在提交网站推广位之后获得的淘宝客基础 API 中都有些什么接口:
其中一共有 23 个接口,虽然是一个基础 API 包,但还是包含了淘宝客推广商品中的大多数信息的获取。在本篇 Chat 介绍创建的淘宝客微信机器人中,我们主要使用以下两个接口:
其他的 API 接口大家可以根据自己的需要添加在程序中。
好券清单 API 用于返回淘宝客商品的优惠券信息,我们可以通过其来搜索特定关键词下的商品的优惠券,以作为结果返回给用户。其接受的参数如下:
淘宝客淘口令 API,用于将淘宝客推广链接转换为淘口令,以实现复制优惠券信息后,打开淘宝就能跳转到推广链接的效果。其接受的参数如下:
可以发现,我们主要使用 adzoneid、淘口令弹框内容和淘口令跳转的目标链接三个参数,其中 adzoneid 可以从推广位的 PID 中获取,淘口令弹框内容可以设置为商品的标题,淘口令跳转的目标链接则是优惠券的链接地址,这两个参数都可以从好券清单 API 中获取到。下面我们来看看如何调用这两个接口。
调用淘宝客 API 接口
在 API 接口的介绍中,我们可以看到其中有多种语言的请求实例,如下所示:
最幸运的是,其提供了 Python 的请求示例,这样我们可以稍微修改一下示例代码(示例中为 Python2 版本的代码)就能对淘宝客的 API 进行调用了,是不是很美好?
虽然看起来很美好,但是我们还是需要额外做一些工作。
实现一个命令行界面下的
微信淘宝客群聊机器人
如何在 Python 环境下登录和操作微信,我们可以选择使用第三方模块——itchat 来实现这一需求。
itchat 通过整理和封装微信网页版的 Web 接口,使得我们通过简短的 Python 代码就可以调用微信。
安装 itchat
直接通过 pip 命令即可安装 itchat:
pip install itchat
登录微信
安装好 itchat 之后,我们就可以借助 itchat 来实现微信的登录了。在我们的项目目录下继续新建一个 Python 文件——wechat_bot.py:
利用 itchat,我们通过一行代码就能够实现微信的登录:
# coding:utf-8import itchat
itchat.auto_login()
运行上述代码,itchat 会自动下载弹出微信登录的二维码,等我们用手机扫码确认登录之后,就实现了在 Python 环境下通过代码进行微信登录,过程如下 gif 动图所示:
获取好友和群聊列表
在登录微信之后,我们就可以获取好友的信息和群聊的信息了。itchat 为好友和群聊都提供了获取所有列表和搜索的方法,下面来看一下:
获取所有好友
通过 get_friends() 方法,我们可以获取到完整的好友列表,使用示例如下:
# coding:utf-8import itchat
itchat.auto_login()
friends = itchat.get_friends()for friend in friends: print(friend)
运行代码,会将好友列表中的每一个好友的信息以字典的形式打印出来,其格式如下所示(以我自己的用户信息为例):
{'City': '',
'ChatRoomId': 0,
'WebWxPluginSwitch': 0,
'RemarkPYInitial': '',
'AttrStatus': 0,
'AppAccountFlag': 0,
'OwnerUin': 0,
'NickName': '州的先生',
'SnsFlag': 1,
'HideInputBarFlag': 0,
'Signature': '觉来知是梦,不胜悲。',
'StarFriend': 0,
'Statues': 0,
'RemarkPYQuanPin': '',
'UserName': '@132a8de5d97228087bc656f29cc2c5d67bbde904cdfaaeedb7ff7db72d4bce0e',
'Province': '',
'KeyWord': '',
'Uin': 401807140,
'RemarkName': '',
'VerifyFlag': 0,
'PYInitial': '',
'ContactFlag': 0,
'MemberList': <ContactList: []>,
'DisplayName': '',
'Sex': 1,
'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=1142454089&username=@132a8de5d97228087bc656f29cc2c5d67bbde904cdfaaeedb7ff7db72d4bce0e&skey=@crypt_82a3c949_8b576ebec932b4b550498cb7f3e88855',
'Alias': '',
'EncryChatRoomId': '',
'HeadImgFlag': 1,
'UniFriend': 0,
'PYQuanPin': '',
'MemberCount': 0
}
对于我们而言,一个好友中,最重要的是他的 NickName 字段和 UserName 字段,因为通过这两个字段的值,我们可以搜索到这个好友。
搜索好友
搜索好友的方法为 search_friends(),我们可以传入 NickName 或 UserName 的值进行搜索,如果不传入参数,则会返回自己的用户信息。所以一下三种搜索方式返回的都是我的微信号的用户信息:
# coding:utf-8import itchat
itchat.auto_login()
user_info = itchat.search_friends()
user_info_2 = itchat.search_friends(nickName="州的先生")
user_info_3 = itchat.search_friends(userName='@132a8de5d97228087bc656f29cc2c5d67bbde904cdfaaeedb7ff7db72d4bce0e')
获取群聊列表
除了获取到好友的信息外,我们还需要获取到群聊的信息以便对群聊发送消息,通过 get_chatrooms() 方法,我们也将获取到微信号中完整的群聊列表,示例代码如下:
# coding:utf-8import itchat
itchat.auto_login()
chatrooms = itchat.get_chatrooms()for chatroom in chatrooms: print(chatroom)
运行代码,会将群聊列表中的每一个群聊的信息以字典的形式打印出来,其格式如下所示(以我的一个群聊信息为例):
{'RemarkPYQuanPin': '',
'KeyWord': '',
'IsAdmin': None,
'ChatRoomId': 0,
'VerifyFlag': 0,
'UserName': '@@a4a7e4cd2430919cb41c2ea4f5bda7cb1c6ed7f2f4f7a649b62d4c9c1e02eead',
'PYInitial': '',
'Province': '',
'NickName': '州的先生Python学习交流',
'IsOwner': 1,
'Self': <User: {'RemarkPYQuanPin': '', 'KeyWord': '', 'ChatRoomId': 0, 'VerifyFlag': 0,
'UserName': '@fb371ab870eb94642cc3c62c573b8268305e81f00ab868c15a15dd40504e5036',
'PYInitial': '', 'MemberCount': 0, 'NickName': '州的先生', 'RemarkName': '',
'MemberList': <ContactList: []>, 'HideInputBarFlag': 0,
'AppAccountFlag': 0, 'HeadImgFlag': 1, 'EncryChatRoomId': '', 'Province': '', 'StarFriend': 0, 'Uin': 401807140, 'UniFriend': 0, 'RemarkPYInitial': '', 'DisplayName': '', 'Signature': '觉来知是梦,不胜悲。', 'PYQuanPin': '', 'City': '', 'OwnerUin': 0, 'ContactFlag': 0, 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgeticon?seq=67715570&username=@fb371ab870eb94642cc3c62c573b8268305e81f00ab868c15a15dd40504e5036&skey=@crypt_82a3c949_1acf9a2dae8b8a3f849e0c247f45c4c1', 'WebWxPluginSwitch': 0, 'Statues': 0, 'Sex': 1, 'Alias': '', 'AttrStatus': 0, 'SnsFlag': 1}>, 'RemarkName': '', 'Alias': '', 'HideInputBarFlag': 0, 'AppAccountFlag': 0, 'EncryChatRoomId': '', 'MemberCount': 147, 'Uin': 0, 'StarFriend': 0, 'UniFriend': 0, 'RemarkPYInitial': '', 'Statues': 1, 'Signature': '', 'PYQuanPin': '', 'City': '', 'DisplayName': '', 'OwnerUin': 0, 'ContactFlag': 0, 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=0&username=@@a4a7e4cd2430919cb41c2ea4f5bda7cb1c6ed7f2f4f7a649b62d4c9c1e02eead&skey=@crypt_82a3c949_1acf9a2dae8b8a3f849e0c247f45c4c1', 'Sex': 0, 'MemberList': <ContactList: []>, 'AttrStatus': 0, 'SnsFlag': 0}
如同好友信息一样,在返回的群聊信息中,我们最在乎的还是群聊的 NickName 和 UserName 属性的值。通过这两个属性值,我们可以通过 search_chatrooms() 方法搜索到特定的群聊,代码如下所示:
# coding:utf-8import itchat
itchat.auto_login()
chat_info = itchat.search_chatrooms(userName="@@a4a7e4cd2430919cb41c2ea4f5bda7cb1c6ed7f2f4f7a649b62d4c9c1e02eead")
chat_info_2 = itchat.search_chatrooms(name="州的先生Python学习交流")
发送消息
在 itchat 中,我们可以通过 send() 方法主动发送一条消息出去。send() 方法接受两个参数:
所以如果我们需要给自己发送一条消息,那么代码如下所示:
# coding:utf-8import itchat
itchat.auto_login()
itchat.send(msg="哈哈,给自己发送一条信息")
接收消息
除了主动发送消息,我们还需要根据接收的消息来进行处理。在微信中,能够收到的消息有很多种类型,itchat.content 中包含了所有的消息类型的参数,其内容如下所示:
为什么要了解消息类型呢,在 itchat 中,如果我们想要登录后的微信能够接收到某个类型的消息,必须首先使用 itchat.msg_register() 装饰器对这个类型的消息进行注册。一个简单的示例如下所示:
import itchatfrom itchat.content import TEXT@itchat.msg_register(TEXT)def simple_reply(msg):
print('收到了一个消息: %s' % msg['Text'])
itchat.auto_login(True)
itchat.run()
在上面的代码中,我们首先引入了 itchat 模块和 itchat 的 TEXT 文本消息类型,然后对一个函数 simplereply() 调用了消息注册方法对文本消息进行注册,simplereply() 返回接收到的消息,最后调用 auto_login() 方法登录微信和 run() 方法侦听微信消息。
运行这段代码并登录微信后,程序将会一直侦听接收消息,如果收到文本消息,那么将会将消息打印出来,效果如下 gif 动图所示:
如果我们需要接收其他类型的消息,同样使用 @itchat.msgregister() 对消息类型进行注册即可。除了上述的通用消息注册方法,我们还可以指定消息的发送对象,来接收特定用户对象发来的特定消息类型,其通过 @itchat.msgregister() 装饰器的 isFriendChat 参数、isGroupChat 参数和 isMpChat 来实现。例如:
# 只接收来自好友的文本消息@itchat.msg_register(TEXT,isFriendChat=True)# 只接收来自于群聊的文本消息@itchat.msg_register(TEXT,isGroupChat=True)# 接收来自好友和群聊的文本消息@itchat.msg_register(TEXT,isGroupChat=True,isFriendChat=True)
这样,我们就可以自由地对接收的消息进行处理了。