利用腾讯云函数(SCF)实现京东618组队自动抢炸弹

发布于 2020-06-12  78 次阅读


前言

京东618有个组队活动,有个核心环节是需要定时上线参加的,但因为懒,而且需要频繁上线,故使用云函数来自动参加。

简介

云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助我们在无需购买和管理服务器的情况下运行代码。我们只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。

费用

资源使用量:40GBs
调用次数:100

使用

1、登陆腾讯云,使用腾讯云函数

https://cloud.tencent.com/product/scf/

2、新建云函数,选择环境py2.7,空白模板

3、获取pt_key和pt_pin参数

1)电脑登陆m.jd.com

2)F12查看cookie

4、复制代码到编辑框并修改相关参数(pt_key和pt_pin)后保存

# coding: utf-8
import requests
import time
import datetime
import sys
import logging
import urllib
import json
reload(sys)
sys.setdefaultencoding('utf8')
 
def start():
    bomb_headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'cookie': 'pt_key=******; pt_pin=********;',
        'User-Agent': 'jdapp;'
    }
    bomb_body = 'functionId=cakebaker_pk_getCakeBomb&body={}&client=wh5&clientVersion=1.0.0'
    bomb_state = requests.post('https://api.m.jd.com/client.action?functionId=cakebaker_pk_getCakeBomb', data=bomb_body, headers=bomb_headers).text
    logging.warning('炸弹状态:'+bomb_state)
    if 'timeStart' in bomb_state:
        bomb_state_json = json.loads(bomb_state)
        d_time = datetime.datetime.strptime(datetime.datetime.now().strftime("%Y-%m-%d")+bomb_state_json["data"]["result"]["timeStart"], '%Y-%m-%d%H:%M')+datetime.timedelta(hours=-8)
        logging.warning('距离开始时间还有: '+str((d_time-datetime.datetime.now()).seconds)+'秒')
        if  (d_time-datetime.datetime.now()).seconds <= 60:
            while datetime.datetime.now() < d_time+datetime.timedelta(seconds=-2):
                logging.warning(datetime.datetime.now()+datetime.timedelta(hours=8))
                time.sleep(1)
            while datetime.datetime.now() > d_time+datetime.timedelta(seconds=-2) and datetime.datetime.now() < d_time+datetime.timedelta(seconds=2):
                bomb = requests.post('https://api.m.jd.com/client.action?functionId=cakebaker_pk_getCakeBomb', data=bomb_body, headers=bomb_headers).text
                logging.warning(datetime.datetime.now()+datetime.timedelta(hours=8))
                logging.warning('京东炸弹:'+bomb)
                if '成功' in bomb:
                    s = json.loads(bomb)
                    msg = urllib.quote(str(s["data"]["result"]["tip"]))
                    groupLevel = urllib.quote(str(s["data"]["result"]["groupLevel"]))
                    opponentLevel = urllib.quote(str(s["data"]["result"]["opponentLevel"]))
                    requests.get('https://sc.ftqq.com/*********.send?text='+groupLevel+'+VS+'+opponentLevel)
                    logging.warning('成功')
                    break
        else:
            logging.warning(datetime.datetime.now()+datetime.timedelta(hours=8))
            logging.warning('非活动时间!')
    else:
        logging.warning(datetime.datetime.now()+datetime.timedelta(hours=8))
        logging.warning('非活动时间!')
 
def main_handler(event, context):
    return start()
 
 
if __name__ == '__main__':
    start()

PS:第38行为某酱的微信推送,若炸弹成功,将推送至微信,不会使用可自行删除整行。

5、进入函数配置页面,修改超时时间为60s

 


6、点击触发管理,选择添加触发条件为自定义时间触发 

自定义时间触发:30 29,59 9-21 * * * *

解释:9点-21点,每个30分或整点自动查询,并抢炸弹。

7、测试,并在调用日志查看是否执行

参考

《来晚了!京东炸弹SCF版,代码公开无任何后门,不存在偷助力等现象。》

京东自动抢炸弹


这短短的一生,我们最终都会失去。