技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒
工具:需要两个微信号,这两个微信号互为好友
1.收集自己想要的商品url
我们就以京东来举例,获取京东的秒杀商品信息:
首先,我们在网页上打开京东,搜索我们想要的商品,这边我就以我最近买的东西为例子:
我们需要找到它的商品信息,需要打开浏览器的开发者模式,之后我们需要选择自己的配送地址,这个时候里面就发送一些接口请求:
我们选择一个有用的商品信息接口:
找到自己想要商品的信息接口,来判断它是否有货:
一般规则是:如果这个接口书籍里面有“无货”的字符信息,那就是缺货状态,否则就是有货状态,可以发送商品链接,进行购买。
我们现在已经成功获取到了商品的url信息,接下来就是设置微信了。
2.设置微信通知
微信通知我们需要两个微信号,一个作为发送方,一个作为接受方,这个两个账号需要互为好友。
注意:作为发送方的微信可能会有注册时间要求(微信好像设立了规则:如果晚于某一时间段注册的账号将不再具备网页微信登陆功能)
这边我们使用itchat模块进行模拟微信登陆:
import itchat itchat.auto_login(hotReload=True)
hotload参数设置为True可以记住第一次登陆的状态,下一次就不需要扫码登陆了。
执行以上代码可以生成登陆二维码,你只需要扫码登陆就可以了。
接下来我们需要找到被通知的那个账号:
# 找到需要发送的对象 users = itchat.search_friends(name='神一样的男子') print(users)
搜索好友信息可以使用好友的微信名字也可以使用备注名字,接下来我们获取发送对象的信息:
[{'Uin': 0,
'UserName': '@131572fb0f21d053055ba1caebd1c3089178a1ccafbf320bb72599c4d04a7e20',
'NickName': '吾',
'ContactFlag': 1, 'MemberCount': 0, 'MemberList': [], 'RemarkName': '神一样的男子', 'HideInputBarFlag': 0, 'Sex': 1, 'Signature': '消失在黑暗中', 'VerifyFlag': 0, 'OwnerUin': 0, 'PYInitial': 'W', 'PYQuanPin': 'wu', 'RemarkPYInitial': 'SYYDNZ', 'RemarkPYQuanPin': 'shenyiyangdenanzi', 'StarFriend': 0, 'AppAccountFlag': 0, 'Statues': 0, 'AttrStatus': 33657021, 'Province': '上海', 'City': '黄浦', 'Alias': '', 'SnsFlag': 1, 'UniFriend': 0, 'DisplayName': '', 'ChatRoomId': 0, 'KeyWord': '', 'EncryChatRoomId': '', 'IsOwner': 0}]
我们发送信息需要获取UserName字段,也就是发送对象的具体ID
# 获取发送对象的ID userName = users[0]['UserName']
接下来我们就可以实现发送秒杀信息了。
3.实现抢货通知
首先我们需要访问京东的数据接口-----也就是我们第一步拿到的那个url,接下来我们去访问它就可以拿到返回的接口数据:
import requests url = "https://c0.3.cn/stock?skuId=60456599372&area=2_2825_51932_0&venderId=10181278&buyNum=1&choseSuitSkuIds=&cat=9987,830,863&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=479124268&ch=1&callback=jQuery3588468" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/531.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Connection": "keep-alive" } respone = requests.get(url, headers=headers) print(respone.text)
拿到数据之后我们就可以去判断这个数据里面有没有“无货”的字符,如果没有我们就使用itchat发送抢购信息:
if (response.text.find('无货') > 0): print('暂时无货: ' + skuidUrl) else: print('你定时的抢购商品有货啦,点击立即购买 :' + skuidUrl) itchat.send("你定时的抢购商品有货啦,点击立即购买:\n{}".format(skuidUrl), toUserName=userName) flag += 1
这个抢购信息我们需要在原来的url上截取skuid,然后进行拼接:
import re pattern = re.compile("skuId=(\d+)&") url = "https://c0.3.cn/stock?skuId=60456599372&area=2_2825_51932_0&venderId=10181278&buyNum=1&choseSuitSkuIds=&cat=9987,830,863&extraParam={%22originid%22:%221%22}&fqsp=0&pdpin=&pduid=479124268&ch=1&callback=jQuery3588468" result = pattern.findall(url) skuidUrl = 'https://item.jd.com/' + result[0] + '.html'
这样我们的定时抢购就完成啦!
最后,我们可以在访问的外面设置一个while死循环,如果一直没有货就一直发送访问请求,如果OK,就跳出break!
附抢购图:
大家只需要点击抢购链接就能直接进行购买啦!