BNDou / Auto_Check_In

每日自动签到集合 | 掌上飞车 | 夸克网盘 | 人人视频 | 脚本猫 | 恩山论坛 | 小米运动
252 stars 43 forks source link

掌飞更新 #27

Closed qlnba closed 1 year ago

qlnba commented 1 year ago

chavyleung库的掌飞更新了。搬一下码子更新一下青龙支持

chiupam commented 1 year ago

那可不是搬一下码子了 基本就是要重写了 你对比这两个就知道了 旧版签到zsfc.js和新版签到zsfc.v3.js 😂

BNDou commented 1 year ago

那可不是搬一下码子了 基本就是要重写了 你对比这两个就知道了 旧版签到zsfc.js和新版签到zsfc.v3.js 😂

哇塞大佬来啦😁😁

BNDou commented 1 year ago

chavyleung库的掌飞更新了。搬一下码子更新一下青龙支持

确实是难度很大的😂

chiupam commented 1 year ago

我相信你 我只是不会写node的js 不然我早就搬到青龙里面了 😂

BNDou commented 1 year ago

我相信你 我只是不会写node的js 不然我早就搬到青龙里面了 😂

我菜鸟新手一个,还得是大佬,第一次遇到大佬哥亲临现场😁回头我研究研究,这几天在准备软考,不想分太多心

chiupam commented 1 year ago

你这那科班出身的研究起来应该就更简单了 我法学专业的只能照葫芦画瓢 😋

BNDou commented 1 year ago

你这那科班出身的研究起来应该就更简单了 我法学专业的只能照葫芦画瓢 😋

哎呀老哥你别这样了🤣我也不在行,只是感兴趣而已。真的是在虚心求学呐,指不定下次还需要您帮忙嘞

chiupam commented 1 year ago

我还在研究你说的寻宝不能领取奖励的bug 哈哈哈

BNDou commented 1 year ago

我还在研究你说的寻宝不能领取奖励的bug 哈哈哈

👍🏻👍🏻👍🏻期待

chiupam commented 1 year ago
import requests

def send_request(iFlowId):
    # 抓 https://act.game.qq.com/ams/ame/amesvr?ameVersion=0.3&iActivityId=468228 包
    # 没有特别说明要抓包就是固定值,不要改

    url = "https://act.game.qq.com/ams/ame/amesvr"

    params = {
        'ameVersion': '0.3',
        'iActivityId': '468228'
    }

    headers = {
        "Cookie": (
            "access_token=抓包中的内容; "
            "acctype=抓包中的内容; "
            "appid=抓包中的内容; "
            "openid=抓包中的内容"
        )
    }

    data = {
        'appid': '抓包中的内容',
        'sArea': '抓包中的内容',
        'sRoleId': '抓包中的内容',
        'accessToken': '抓包中的内容',
        'iActivityId': "468228",
        'iFlowId': iFlowId,
        'g_tk': '1842395457',
        'sServiceType': 'bb'
    }

    response = requests.post(url, headers=headers, params=params, data=data)
    response.encoding = 'gbk'
    body = response.json()
    print(body['flowRet']['sMsg'])

if __name__ == '__main__':
    send_request("856152")  # 856152 固定值,应该是领道具的
    send_request("856155")  # 856152 固定值,应该是领点券的

我测试了一下应该是这样领取奖励 其他应该没变化了

BNDou commented 1 year ago

@chiupam 感谢老哥,突然就通透了。还请问老哥,抓到的url里面sSDID和sMiloTag是干什么用的,这俩值每次都不同,之前一直弄不明白😂

chiupam commented 1 year ago

不晓得 反正没了也能领取奖励 不过你最好先抓个包来试一下 我没有号做验证了

BNDou commented 1 year ago

不晓得 反正没了也能领取奖励 不过你最好先抓个包来试一下 我没有号做验证了

还是非常感谢,麻烦您了😄回头我测试一下。您也是在准备做寻宝模块吗

chiupam commented 1 year ago

有打算 不过可能要备国考

chiupam commented 1 year ago
import json
import re

import requests

def index():
    # 这里只需要填写查询的QQ号就行

    def extract(_html, _pattern):
        match = re.search(_pattern, _html)
        if match:
            return json.loads(re.sub(r'^\((.*)\)$', r'\1', match.group(1)))
        return None

    url = "https://bang.qq.com/app/speed/treasure/index"
    params = {
        "roleId": "xxxxxxxxxx",  # QQ帐号,抓包抓取
        "areaId": "1",  # 1是电信区,抓包抓取
        "uin": "xxxxxxxxxx"  # QQ帐号,抓包抓取
    }

    response = requests.get(url, params=params)
    response.encoding = 'utf-8'
    user = extract(response.text, r'window\.userInfo\s*=\s*eval\(\'([^\']+)\'\);')
    starId = False

    if user:
        starId = max([key for key, value in user.get('starInfo', {}).items() if value == 1])
        print("最高地图解锁星级:", starId)
    else:
        print("未找到用户信息")

    if starId:
        map_dicts = extract(response.text, r'window\.mapInfo\s*=\s*eval\(\'([^\']+)\'\);')
        luck_dicts = [item for item in map_dicts[starId] if item.get('isdaji') == 1]
        mapId, mapName = (luck_dicts[0]['id'], luck_dicts[0]['name']) if luck_dicts else (False, False)
        print(f'今日大吉地图是[{mapName}] 地图id是[{mapId}]')
    else:
        print("未找到地图信息")

if __name__ == '__main__':
    index()

获取最高地图解锁星级,今日大吉地图名称和今日大吉地图ID,只需要填写QQ号码即可

BNDou commented 1 year ago

@chiupam 大佬代码书写的很漂亮啊,又精干,我好久没写码子,正则看不太懂了还得复习一下哈哈哈😂

chiupam commented 1 year ago
import json
import re

import requests

def index():
    # 这里只需要填写查询的QQ号就行

    def extract(_html, _pattern):
        match = re.search(_pattern, _html)
        if match:
            return json.loads(re.sub(r'^\((.*)\)$', r'\1', match.group(1)))
        return None

    url = "https://bang.qq.com/app/speed/treasure/index"
    params = {
        "roleId": "xxxxxxxxxx",  # QQ帐号,抓包抓取
        "areaId": "1",  # 1是电信区,抓包抓取
        "uin": "xxxxxxxxxx"  # QQ帐号,抓包抓取
    }

    response = requests.get(url, params=params)
    response.encoding = 'utf-8'
    user = extract(response.text, r'window\.userInfo\s*=\s*eval\(\'([^\']+)\'\);')
    starId = False

    if user:
        starId = max([key for key, value in user.get('starInfo', {}).items() if value == 1])
        print("最高地图解锁星级:", starId)
    else:
        print("未找到用户信息")

    if starId:
        map_dicts = extract(response.text, r'window\.mapInfo\s*=\s*eval\(\'([^\']+)\'\);')
        luck_dicts = [item for item in map_dicts[starId] if item.get('isdaji') == 1]
        mapId, mapName = (luck_dicts[0]['id'], luck_dicts[0]['name']) if luck_dicts else (False, False)
        print(f'今日大吉地图是[{mapName}] 地图id是[{mapId}]')
    else:
        print("未找到地图信息")

def dig(status):
    # 只需要抓 https://bang.qq.com/app/speed/treasure/ajax/startDigTreasure 包就可以获取了

    url = f"https://bang.qq.com/app/speed/treasure/ajax/{status}DigTreasure"
    headers = {
        "Referer": "https://bang.qq.com/app/speed/treasure/index",
        "Cookie": (
            "access_token=xxxxxxxxxx; "  # 抓包抓取
            "acctype=qc; "  # 固定值
            "appid=1105330667; "  # 固定值
            "openid=xxxxxxxxxx"  # 抓包抓取
        )
    }
    data = {
        "mapId": "1",  # 地图 mapId,脚本获取
        "starId": "1",  # 地图星级 starId,脚本获取
        "areaId": "1",  # 1是电信区,抓包抓取
        "roleId": "xxxxxxxxxx",  # QQ帐号,抓包抓取
        "userId": "xxxxxxxxxx",  # 抓包抓取
        "uin": "xxxxxxxxxx",  # QQ帐号,抓包抓取
        "token": "xxxxxxxxxx"  # 抓包抓取
    }
    response = requests.post(url, headers=headers, data=data)
    response.encoding = 'gbk'
    print(response.json())

def treasure(iFlowId):
    # 这里就不用抓包了,直接用 dig 函数中处理过的包,修改一下传入对应参数就行

    url = "https://act.game.qq.com/ams/ame/amesvr"
    params = {
        'ameVersion': '0.3',  # 固定值
        'iActivityId': '468228'  # 固定值
    }
    headers = {
        "Cookie": (
            "access_token=xxxxxxxxxx; "  # 抓包抓取
            "acctype=qc; "  # 固定值
            "appid=1105330667; "  # 固定值
            "openid=xxxxxxxxxx"  # 抓包抓取
        )
    }
    data = {
        'appid': '1105330667',  # 固定值
        'sArea': 'xxxxxxxxxx',  # 通过 dig 请求体的 body 中获取 areaId 的值
        'sRoleId': 'xxxxxxxxxx',  # 通过 dig 请求体的 body 中获取 roleId 的值
        'accessToken': 'xxxxxxxxxx',  # 通过 dig 请求头的 headers 中获取 access_token 的值
        'iActivityId': "468228",  # 固定值
        'iFlowId': iFlowId,  # 固定传入值,一个是856152,另一个是856155
        'g_tk': '1842395457',  # 固定值
        'sServiceType': 'bb'  # 固定值
    }
    response = requests.post(url, headers=headers, params=params, data=data)
    response.encoding = 'gbk'
    print(response.json()['flowRet'])

if __name__ == '__main__':
    index()  # 获取地图星级、大吉地图信息
    dig("start")  # 开始寻宝,如果在寻宝中了则会透露出开始寻宝的时间啊
    dig("end")  # 结束寻宝,如果没有到时间就结束会消耗每日次数
    treasure("856152")  # 856152 固定值,应该是领道具的
    treasure("856155")  # 856152 固定值,应该是领点券的

剩下的看你了

BNDou commented 1 year ago

@chiupam 还有100经验的领取,iflowid是不是也有对应固定的id

chiupam commented 1 year ago

@chiupam 还有100经验的领取,iflowid是不是也有对应固定的id

100经验❓这经验给狗狗都不想去领 签到那边的iflowId好像是每个月不一样 我现在还找不到它从哪算来的 或许下个月也能用上个月的 不过也还不清楚 得等下个月才知道 但航海的iflowId是固定那两个 如果不是的话多找几个号抓下包看看

BNDou commented 1 year ago

@chiupam 也是哦🤣签到那边的我抓了几个找了下规则,cookie里面有这个字段speedqqcomrouteLine=a20230921lb6s7dp

然后就可以获取签到html页面,url可以拼接出来"http://speed.qq.com/lbact/"+speedqqcomrouteLine+"/zfmrqd.html"

用Beautifulsoup模块提取html里面标签就能取到iflowid,但前提是得每月抓一次cookie来更新它

chiupam commented 1 year ago

每个月的月初吗?

BNDou commented 1 year ago

每个月的月初吗?

旧版是,但是旧版url是固定的,新版url每个月应该不一样,是由a+年月日+一串字符组成的路径,只要确定了每个月的url,所有的id就都有了 mmexport1697628992958.png