mirror of
https://github.com/0-8-4/miui-auto-tasks.git
synced 2024-11-25 01:29:44 +00:00
chore: 添加cookies登录方式 (#141)
* chore: 从pdm生成requirements.txt chore: 添加cookies登录方式 * modified: .github/workflows/docker-image.yml * chore: 登录成功后写入cookie到配置文件
This commit is contained in:
parent
56c27977da
commit
c5ee4496bd
17
.github/workflows/docker-image.yml
vendored
17
.github/workflows/docker-image.yml
vendored
@ -25,9 +25,24 @@ jobs:
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install PDM
|
||||
run: |
|
||||
pip install pdm
|
||||
|
||||
- name: Export requirements.txt
|
||||
run: |
|
||||
pdm export -f requirements --without-hashes -o requirements.txt
|
||||
|
||||
- name: Upload requirements.txt
|
||||
uses: actions/upload-artifact@v3.1.3
|
||||
with:
|
||||
name: requirements.txt
|
||||
path: requirements.txt
|
||||
|
||||
-
|
||||
name: run the program once to create the `/data`
|
||||
run: python3 miuitask.py
|
||||
run: |
|
||||
python3 miuitask.py
|
||||
|
||||
-
|
||||
name: Set up QEMU
|
||||
|
@ -1,8 +1,28 @@
|
||||
onepush
|
||||
orjson>=3.9.10
|
||||
loguru>=0.7.2
|
||||
pydantic>=2.4.2
|
||||
httpx>=0.25.1
|
||||
cryptography>=41.0.5
|
||||
pyyaml>=6.0.1
|
||||
tenacity>=8.2.3
|
||||
# This file is @generated by PDM.
|
||||
# Please do not edit it manually.
|
||||
|
||||
annotated-types==0.6.0
|
||||
anyio==4.0.0
|
||||
certifi==2023.7.22
|
||||
cffi==1.16.0
|
||||
charset-normalizer==3.3.2
|
||||
colorama==0.4.6
|
||||
cryptography==41.0.5
|
||||
h11==0.14.0
|
||||
httpcore==1.0.2
|
||||
httpx==0.25.1
|
||||
idna==3.4
|
||||
loguru==0.7.2
|
||||
onepush==1.3.0
|
||||
orjson==3.9.10
|
||||
pycparser==2.21
|
||||
pycryptodome==3.19.0
|
||||
pydantic==2.4.2
|
||||
pydantic-core==2.10.1
|
||||
pyyaml==6.0.1
|
||||
requests==2.31.0
|
||||
sniffio==1.3.0
|
||||
tenacity==8.2.3
|
||||
typing-extensions==4.8.0
|
||||
urllib3==2.0.7
|
||||
win32-setctime==1.1.0
|
||||
|
@ -7,17 +7,20 @@ import orjson
|
||||
|
||||
from typing import Dict, List, Optional, Union
|
||||
|
||||
from ..config import Account
|
||||
from ..config import Account, write_plugin_data
|
||||
from ..request import get, post
|
||||
from ..logger import log
|
||||
from ..data_model import LoginResultHandler
|
||||
from .sign import BaseSign
|
||||
|
||||
|
||||
class Login:
|
||||
def __init__(self, account: Account) -> None:
|
||||
self.account = account
|
||||
self.user_agent = account.user_agent
|
||||
self.uid = account.uid
|
||||
self.password = account.password
|
||||
self.cookies = account.cookies
|
||||
|
||||
async def login(self) -> Union[Dict[str, str], bool]:
|
||||
headers = {
|
||||
@ -59,6 +62,9 @@ class Login:
|
||||
'_json': 'true'
|
||||
}
|
||||
try:
|
||||
if self.cookies != {} and await BaseSign(self.cookies).check_daily_tasks(nolog=True) != []:
|
||||
log.info("Cookie有效,跳过登录")
|
||||
return self.cookies
|
||||
response = await post('https://account.xiaomi.com/pass/serviceLoginAuth2', headers=headers, data=data)
|
||||
log.debug(response.text)
|
||||
result = response.text.lstrip('&').lstrip('START').lstrip('&')
|
||||
@ -67,6 +73,8 @@ class Login:
|
||||
if api_data.success:
|
||||
log.success('小米账号登录成功')
|
||||
cookies = await self.get_cookie(api_data.location)
|
||||
self.account.cookies = cookies
|
||||
write_plugin_data()
|
||||
return cookies
|
||||
elif not api_data.pwd_wrong:
|
||||
log.error('小米账号登录失败:' + api_data.message)
|
||||
|
@ -32,7 +32,7 @@ class BaseSign:
|
||||
self.headers = {
|
||||
}
|
||||
|
||||
async def check_daily_tasks(self) -> Union[List[DailyTasksResult], List[None]]:
|
||||
async def check_daily_tasks(self, nolog: bool=False) -> Union[List[DailyTasksResult], List[None]]:
|
||||
try:
|
||||
response = await get('https://api.vip.miui.com/mtop/planet/vip/member/getCheckinPageCakeList',
|
||||
cookies=self.cookie)
|
||||
@ -49,10 +49,10 @@ class BaseSign:
|
||||
task_status.append(DailyTasksResult(name=task_name, showType=showType, desc=task_desc))
|
||||
return task_status
|
||||
else:
|
||||
log.error("获取每日任务状态失败:" + api_data.message)
|
||||
log.error("获取每日任务状态失败:" + api_data.message) if not nolog else None
|
||||
return []
|
||||
except Exception as e:
|
||||
log.exception("获取每日任务异常")
|
||||
except Exception:
|
||||
log.exception("获取每日任务异常") if not nolog else None
|
||||
return []
|
||||
|
||||
async def sign(self) -> bool:
|
||||
|
@ -1,7 +1,7 @@
|
||||
import os
|
||||
import orjson
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
from typing import Dict, List, Optional, Union
|
||||
from hashlib import md5
|
||||
|
||||
import yaml
|
||||
@ -21,12 +21,20 @@ CONFIG_PATH = DATA_PATH / "config.yaml"
|
||||
def md5_crypto(passwd: str) -> str:
|
||||
return md5(passwd.encode('utf8')).hexdigest().upper()
|
||||
|
||||
def cookies_to_dict(cookies):
|
||||
cookies_dict = {}
|
||||
for cookie in cookies.split(';'):
|
||||
key, value = cookie.strip().split('=', 1) # 分割键和值
|
||||
cookies_dict[key] = value
|
||||
return cookies_dict
|
||||
|
||||
class Account(BaseModel):
|
||||
uid: str = "100000"
|
||||
"""账户ID 非账户用户名或手机号"""
|
||||
password: str = ""
|
||||
"""账户密码或其MD5哈希"""
|
||||
cookies: Union[dict, str] = {}
|
||||
"""账户登录后的cookies"""
|
||||
user_agent: str = 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Safari/537.36'
|
||||
"""登录社区时所用浏览器的 User-Agent"""
|
||||
|
||||
@ -47,14 +55,20 @@ class Account(BaseModel):
|
||||
"""社区拔萝卜,启用功能意味着你愿意自行承担相关风险"""
|
||||
|
||||
@validator("password", allow_reuse=True)
|
||||
def _(cls, v: Optional[str]):
|
||||
def _password(cls, v: Optional[str]):
|
||||
if len(v) == 32:
|
||||
return v
|
||||
return md5_crypto(v)
|
||||
|
||||
@validator("cookies", allow_reuse=True)
|
||||
def _cookies(cls, v: Union[dict, str]):
|
||||
if type(v) == str:
|
||||
return cookies_to_dict(v)
|
||||
return v
|
||||
|
||||
|
||||
class OnePush(BaseModel):
|
||||
notifier: str = ""
|
||||
notifier: Union[str, bool] = ""
|
||||
"""是否开启消息推送"""
|
||||
params: Dict = {
|
||||
"title": "",
|
||||
|
Loading…
Reference in New Issue
Block a user