ck_weibo   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 114
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 86
dl 0
loc 114
rs 10
c 0
b 0
f 0
wmc 13

5 Methods

Rating   Name   Duplication   Size   Complexity  
A WeiBo.__init__() 0 2 1
A WeiBo.main() 0 18 2
A WeiBo.card() 0 12 2
A WeiBo.pay() 0 35 4
A WeiBo.sign() 0 17 4
1
# -*- coding: utf-8 -*-
2
"""
3
cron: 48 7 * * *
4
new Env('微博');
5
"""
6
7
from urllib.parse import parse_qsl, urlsplit
8
9
import requests
10
11
from notify_mtr import send
12
from utils import get_data
13
14
15
class WeiBo:
16
    def __init__(self, check_items):
17
        self.check_items = check_items
18
19
    @staticmethod
20
    def sign(token):
21
        headers = {"User-Agent": "Weibo/52588 (iPhone; iOS 14.5; Scale/3.00)"}
22
        res = requests.get(
23
            url=f"https://api.weibo.cn/2/checkin/add?c=iphone&{token}", headers=headers
24
        ).json()
25
        if res.get("status") == 10000:
26
            return (
27
                f'连续签到: {res.get("data").get("continuous")}天\n'
28
                f'本次收益: {res.get("data").get("desc")}'
29
            )
30
31
        if res.get("errno") == 30000:
32
            return "每日签到: 已签到"
33
        if res.get("status") == 90005:
34
            return f'每日签到: {res.get("msg")}'
35
        return "每日签到: 签到失败"
36
37
    @staticmethod
38
    def card(token):
39
        headers = {"User-Agent": "Weibo/52588 (iPhone; iOS 14.5; Scale/3.00)"}
40
        res = requests.get(
41
            url=f"https://api.weibo.cn/2/!/ug/king_act_home?c=iphone&{token}",
42
            headers=headers,
43
        ).json()
44
        if res.get("status") != 10000:
45
            return "每日打卡: 活动过期或失效"
46
        nickname = res.get("data").get("user").get("nickname")
47
        return (
48
            f"用户昵称: {nickname}\n"
49
            f'每日打卡: {res.get("data").get("signin").get("title").split("<")[0]}天\n'
50
            f'积分总计: {res.get("data").get("user").get("energy")}'
51
        )
52
53
    @staticmethod
54
    def pay(token):
55
        headers = {
56
            "Accept-Encoding": "gzip, deflate",
57
            "Connection": "keep-alive",
58
            "Content-Type": "application/x-www-form-urlencoded",
59
            "Host": "pay.sc.weibo.com",
60
            "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) "
61
            "AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 "
62
            "Weibo (iPhone10,1__weibo__11.2.1__iphone__os14.5)",
63
        }
64
        data = f"{token}&lang=zh_CN&wm=3333_2001"
65
        response = requests.post(
66
            url="https://pay.sc.weibo.com/aj/mobile/home/welfare/signin/do",
67
            headers=headers,
68
            data=data,
69
        )
70
        try:
71
            res = response.json()
72
            if res.get("status") == 1:
73
                msg = f'微博钱包: {res.get("score")} 积分'
74
            elif res.get("status") == 2:
75
                msg = "微博钱包: 已签到"
76
                info_res = requests.post(
77
                    url="https://pay.sc.weibo.com/api/client/sdk/app/balance",
78
                    headers=headers,
79
                    data=data,
80
                ).json()
81
                msg += f"\n当前现金: {info_res.get('data').get('balance')} 元"
82
            else:
83
                msg = "微博钱包: Cookie失效"
84
            return msg
85
        except Exception:
86
            msg = "微博钱包: Cookie失效"
87
            return msg
88
89
    def main(self):
90
        msg_all = ""
91
        for check_item in self.check_items:
92
            url = check_item.get("url")
93
            query_dict = dict(parse_qsl(urlsplit(url).query))
94
            token = "&".join(
95
                [
96
                    f"{key}={value}"
97
                    for key, value in query_dict.items()
98
                    if key in ["from", "uid", "s", "gsid"]
99
                ]
100
            )
101
            sign_msg = self.sign(token=token)
102
            card_msg = self.card(token=token)
103
            pay_msg = self.pay(token=token)
104
            msg = f"{sign_msg}\n{card_msg}\n{pay_msg}"
105
            msg_all += msg + "\n\n"
106
        return msg_all
107
108
109
if __name__ == "__main__":
110
    _data = get_data()
111
    _check_items = _data.get("WEIBO", [])
112
    result = WeiBo(check_items=_check_items).main()
113
    send("微博", result)
114