Files
kami_itunes_third_api/src/service/itunes.py
danial 371fe49d1a feat(service): 添加代理服务并更新相关功能
- 新增 ProxyService 类,用于管理代理服务器
- 在 iTunes 服务中集成代理服务
- 更新 .gitignore 文件,添加新忽略项
- 在配置文件中添加代理服务器地址
- 更新相关模块以支持代理服务
2024-10-31 00:36:33 +08:00

173 lines
6.1 KiB
Python

import time
import uuid
from loguru import logger
from src.integrations.itunes.api import AppleClient
from src.integrations.itunes.models.login import (
ItunesSuccessLoginPlistData,
)
from src.integrations.itunes.models.redeem import (
RedeemSuccessResponse,
)
from src.integrations.june.api import SixClient
from src.integrations.june.models.login import AppleAccountModel, ItunesLoginModel
from src.models.model import (
LoginSuccessResponse,
LoginFailureResponse,
AppleAccountRedeemResponse,
RedeemRequestModel,
)
from src.schema.models import (
get_session,
AppleCardLoginLogSchema,
AppleCardRedeemLogSchema,
)
class ItunesService:
def __init__(self):
self.june_client_service = SixClient()
self.apple_client_service = AppleClient()
def login(
self,
account: AppleAccountModel,
retries: int = 3,
) -> LoginSuccessResponse | LoginFailureResponse:
"""
登录itunes
:param retries:
:param account:
:return:
"""
start_time = time.time()
sign_sap_from_june = self.june_client_service.get_sign_sap_setup()
middle_time_1 = time.time()
logger.info(f"[+] 获取签到参数耗时: {middle_time_1 - start_time}")
sign_sap_setup_buffer = self.apple_client_service.query_sign_sap_setup(
sign_sap_from_june.Data
)
middle_time_2 = time.time()
logger.info(f"[+] 获取签到证书耗时: {middle_time_2 - middle_time_1}")
sign_sap_cert = self.june_client_service.get_sign_sap_setup_cert(
account, sign_sap_from_june, sign_sap_setup_buffer
)
middle_time_3 = time.time()
logger.info(f"[+] 获取签到证书耗时: {middle_time_3 - middle_time_2}")
login_schema = self.apple_client_service.login(sign_sap_cert.Data)
logger.info(f"[+] 登录耗时: {time.time() - middle_time_3}")
session = get_session()()
db_id = uuid.uuid4().hex
if isinstance(login_schema.response, ItunesSuccessLoginPlistData):
# 登录成功
session.add(
AppleCardLoginLogSchema(
id=db_id,
account_name=account.account,
account_password=account.password,
status=1,
origin_log=login_schema.origin_log,
)
)
response_result = LoginSuccessResponse(
login_schema=ItunesLoginModel(
server_id=login_schema.server_id,
guid=sign_sap_cert.Data.guid,
dsis=int(login_schema.response.ds_person_id),
passwordToken=login_schema.response.password_token,
),
cookies=self.apple_client_service.export_cookies(),
apple_card_login_log_id=db_id,
)
else:
# 登录失败
session.add(
AppleCardLoginLogSchema(
id=db_id,
account_name=account.account,
account_password=account.password,
status=0,
origin_log=login_schema.origin_log,
)
)
# 失败编码 -5000 AppleID或密码错误
response_result = LoginFailureResponse(
status=login_schema.response.status,
failure_type=login_schema.response.failureType,
message=login_schema.response.customerMessage,
apple_card_login_log_id=db_id,
)
session.commit()
session.close()
return response_result
def redeem(
self, code: str, item: RedeemRequestModel, set_cookie: bool = False
) -> AppleAccountRedeemResponse:
"""
兑换代码
:param set_cookie:
:param item:
:param code:
:return:
"""
if set_cookie:
self.apple_client_service.import_cookies(item.cookies)
session = get_session()()
result = self.apple_client_service.redeem(
code,
ItunesLoginModel(
account_name=item.account_name,
server_id=item.login_schema.server_id,
guid=item.login_schema.guid,
dsis=int(item.login_schema.dsis),
passwordToken=item.login_schema.password_token,
),
)
if isinstance(result, RedeemSuccessResponse):
# 充值成功
response_result = AppleAccountRedeemResponse(
status=20,
balance=result.totalCredit.moneyRaw,
amount=result.redeemedCredit.moneyRaw,
)
session.add(
AppleCardRedeemLogSchema(
apple_card_login_log_id=item.apple_card_login_log_id,
account_name=item.account_name,
order_no=item.order_no,
origin_log_status_code=200,
redeem_status=response_result.status,
amount=result.redeemedCredit.moneyRaw,
account_balance=result.totalCredit.moneyRaw,
card_pass=code,
origin_log=result.origin_log,
)
)
else:
# 充值失败
response_result = AppleAccountRedeemResponse(
status=result.status,
remark=result.userPresentableErrorMessage,
)
session.add(
AppleCardRedeemLogSchema(
apple_card_login_log_id=item.apple_card_login_log_id,
account_name=item.account_name,
order_no=item.order_no,
amount=0,
origin_log_status_code=result.origin_status_code,
redeem_status=response_result.status,
account_balance=0,
card_pass=code,
origin_log=result.origin_log,
)
)
session.commit()
session.close()
return response_result