Passed
Push — master ( c3bfdf...75ad6c )
by Leon
02:21
created

ck_acfun.AcFun.get_cookies()   A

Complexity

Conditions 3

Size

Total Lines 19
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 17
nop 4
dl 0
loc 19
rs 9.55
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
"""
3
cron: 31 7 * * *
4
new Env('AcFun');
5
"""
6
7
import re
8
9
import requests
10
import urllib3
11
12
from notify_mtr import send
13
from utils import get_data
14
15
urllib3.disable_warnings()
16
17
18
class AcFun:
19
    def __init__(self, check_items):
20
        self.check_items = check_items
21
        self.contentid = "27259341"
22
23
    def login(self, phone, password, session):
24
        url = "https://id.app.acfun.cn/rest/web/login/signin"
25
        data = f"password={password}&username={phone}&key=&captcha="
26
        res = session.post(url=url, data=data).json()
27
        if res.get("result") == 0:
28
            return True
29
        else:
30
            return res.get("err_msg")
31
32
    def get_video(self, session):
33
        url = "https://www.acfun.cn/rest/pc-direct/rank/channel"
34
        response = session.get(url=url)
35
        self.contentid = response.json().get("rankList")[0].get("contentId")
36
        return self.contentid
37
38
    def sign(self, session):
39
        url = "https://www.acfun.cn/rest/pc-direct/user/signIn"
40
        response = session.post(url=url)
41
        return response.json().get("msg")
42
43
    def danmu(self, session):
44
        url = "https://www.acfun.cn/rest/pc-direct/new-danmaku/add"
45
        data = {
46
            "mode": "1",
47
            "color": "16777215",
48
            "size": "25",
49
            "body": "123321",
50
            "videoId": "26113662",
51
            "position": "2719",
52
            "type": "douga",
53
            "id": "31224739",
54
            "subChannelId": "1",
55
            "subChannelName": "动画",
56
        }
57
        res = session.get(url=f"https://www.acfun.cn/v/ac{self.contentid}")
58
        videoId = re.findall('"currentVideoId":(\d+),', res.text)
59
        subChannel = re.findall(
60
            '{subChannelId:(\d+),subChannelName:"([\u4e00-\u9fa5]+)"}', res.text
61
        )
62
        if len(videoId) > 0:
63
            data["videoId"] = videoId[0]
64
            data["subChannelId"] = subChannel[0][0]
65
            data["subChannelName"] = subChannel[0][1]
66
        response = session.post(url=url, data=data)
67
        if response.json().get("result") == 0:
68
            msg = "弹幕成功"
69
        else:
70
            msg = "弹幕失败"
71
        return msg
72
73
    def throwbanana(self, session):
74
        url = "https://www.acfun.cn/rest/pc-direct/banana/throwBanana"
75
        data = {"resourceId": self.contentid, "count": "1", "resourceType": "2"}
76
        response = session.post(url=url, data=data)
77
        if response.json().get("result") == 0:
78
            msg = "香蕉成功"
79
        else:
80
            msg = "香蕉失败"
81
        return msg
82
83
    def like(self, session):
84
        like_url = "https://kuaishouzt.com/rest/zt/interact/add"
85
        unlike_url = "https://kuaishouzt.com/rest/zt/interact/delete"
86
        body = f"kpn=ACFUN_APP&kpf=PC_WEB&subBiz=mainApp&interactType=1&objectType=2&objectId={self.contentid}"
87
        response = session.post(url=like_url, data=body)
88
        session.post(url=unlike_url, data=body)
89
        if response.json().get("result") == 1:
90
            msg = "点赞成功"
91
        else:
92
            msg = "点赞失败"
93
        return msg
94
95
    # def share(self, session):
96
    #     url = "https://api-ipv6.acfunchina.com/rest/app/task/reportTaskAction?taskType=1&market=tencent&product=ACFUN_APP&appMode=0"
97
    #     response = session.get(url=url)
98
    #     if response.json().get("result") == 0:
99
    #         msg = "分享成功"
100
    #     else:
101
    #         msg = "分享失败"
102
    #     return msg
103
104
    def main(self):
105
        msg_all = ""
106
        for check_item in self.check_items:
107
            phone = check_item.get("phone")
108
            password = check_item.get("password")
109
110
            headers = {
111
                "accept": "*/*",
112
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
113
                "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
114
                "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70",
115
                "Referer": "https://www.acfun.cn/",
116
            }
117
            s = requests.session()
118
            s.headers.update(headers)
119
120
            flag = self.login(phone=phone, password=password, session=s)
121
            if flag is True:
122
                self.get_video(s)
123
                sign_msg = self.sign(s)
124
                like_msg = self.like(s)
125
                # share_msg = self.share(s)
126
                danmu_msg = self.danmu(s)
127
                throwbanana_msg = self.throwbanana(s)
128
129
                msg = (
130
                    f"帐号信息: *******{phone[-4:]}\n"
131
                    f"签到状态: {sign_msg}\n"
132
                    f"点赞任务: {like_msg}\n"
133
                    f"弹幕任务: {danmu_msg}\n"
134
                    f"香蕉任务: {throwbanana_msg}\n"
135
                    # f"分享任务: {share_msg}"
136
                )
137
138
            else:
139
                msg = f"*******{phone[-4:]} {flag}"
140
141
            msg_all += msg + "\n\n"
142
        return msg_all
143
144
145
if __name__ == "__main__":
146
    data = get_data()
147
    _check_items = data.get("ACFUN", [])
148
    res = AcFun(check_items=_check_items).main()
149
    send("AcFun", res)
150