mirror of
https://github.com/zjk2017/ArcadiaScriptPublic.git
synced 2025-12-17 07:28:13 +08:00
Create JYJ.py
This commit is contained in:
860
qianyi/JYJ.py
Normal file
860
qianyi/JYJ.py
Normal file
@@ -0,0 +1,860 @@
|
||||
# !/usr/bin/python3
|
||||
# -- coding: utf-8 --
|
||||
# cron "5 10 * * *" script-path=xxx.py,tag=匹配cron用
|
||||
# const $ = new Env('劲友家小程序')
|
||||
import base64
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import time
|
||||
import urllib
|
||||
from datetime import datetime
|
||||
import requests
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Util.Padding import pad
|
||||
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
||||
|
||||
# 禁用安全请求警告
|
||||
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
||||
|
||||
IS_DEV = False
|
||||
if os.path.isfile('DEV_ENV.py'):
|
||||
import DEV_ENV
|
||||
|
||||
IS_DEV = True
|
||||
if os.path.isfile('notify.py'):
|
||||
from notify import send
|
||||
|
||||
print("加载通知服务成功!")
|
||||
else:
|
||||
print("加载通知服务失败!")
|
||||
send_msg = ''
|
||||
one_msg = ''
|
||||
|
||||
|
||||
def Log(cont=''):
|
||||
global send_msg, one_msg
|
||||
print(cont)
|
||||
if cont:
|
||||
one_msg += f'{cont}\n'
|
||||
send_msg += f'{cont}\n'
|
||||
|
||||
|
||||
# 请保留作者邀请,谢谢
|
||||
Author_inviteCustId = ['1706225299127144448']
|
||||
|
||||
|
||||
class RUN:
|
||||
def __init__(self, info, index):
|
||||
global one_msg
|
||||
one_msg = ''
|
||||
split_info = info.split('@')
|
||||
self.token = split_info[0]
|
||||
len_split_info = len(split_info)
|
||||
last_info = split_info[len_split_info - 1]
|
||||
self.send_UID = None
|
||||
if len_split_info > 0 and "UID_" in last_info:
|
||||
print('检测到设置了UID')
|
||||
print(last_info)
|
||||
self.send_UID = last_info
|
||||
self.index = index + 1
|
||||
# print(self.access_token)
|
||||
self.UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a1b) XWEB/9129"
|
||||
|
||||
self.headers = {
|
||||
'Host': 'jjw.jingjiu.com',
|
||||
'accept': 'application/json, text/plain, */*',
|
||||
'xweb_xhr': '1',
|
||||
'appid': 'wx10bc773e0851aedd',
|
||||
'authorization': self.token,
|
||||
'user-agent': self.UA,
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://servicewechat.com/wx10bc773e0851aedd/618/page-frame.html',
|
||||
'accept-language': 'zh-CN,zh;q=0.9',
|
||||
}
|
||||
self.s = requests.session()
|
||||
self.s.verify = False
|
||||
self.baseUrl = 'https://jjw.jingjiu.com/app-jingyoujia/app/'
|
||||
|
||||
def make_request(self, url, method='post', headers={}, json_data={}, params=None, data=None):
|
||||
if headers == {}:
|
||||
headers = self.headers
|
||||
try:
|
||||
if method.lower() == 'get':
|
||||
response = self.s.get(url, headers=headers, verify=False, params=params)
|
||||
elif method.lower() == 'post':
|
||||
headers = self.headers.copy()
|
||||
headers['accept'] = 'application/json, text/plain, */*'
|
||||
headers['content-type'] = 'application/json'
|
||||
response = self.s.post(url, headers=headers, json=json_data, data=data, params=params, verify=False)
|
||||
else:
|
||||
raise ValueError("不支持的请求方法❌: " + method)
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
print("请求异常❌:", e)
|
||||
except ValueError as e:
|
||||
print("值错误或不支持的请求方法❌:", e)
|
||||
except Exception as e:
|
||||
print("发生了未知错误❌:", e)
|
||||
|
||||
def encrypt(self, data):
|
||||
data = json.dumps(data)
|
||||
key = "Z0J7M480h6kppf67"
|
||||
# 将密钥和数据转换为字节
|
||||
key_bytes = key.encode('utf-8')
|
||||
data_bytes = data.encode('utf-8')
|
||||
|
||||
# 使用AES进行加密(ECB模式,PKCS7填充)
|
||||
cipher = AES.new(key_bytes, AES.MODE_ECB)
|
||||
encrypted_bytes = cipher.encrypt(pad(data_bytes, AES.block_size))
|
||||
|
||||
# 将加密后的数据转换为base64编码的字符串
|
||||
encrypted_base64 = base64.b64encode(encrypted_bytes).decode('utf-8')
|
||||
return encrypted_base64
|
||||
|
||||
def random_city_coordinates(self):
|
||||
print('\n====== 环境变量定位信息 ======')
|
||||
# 定义各个地区的经纬度边界(大致范围)
|
||||
# regions = {
|
||||
# "北京": {"min_lat": 39.26, "max_lat": 41.03, "min_lon": 115.25, "max_lon": 117.30},
|
||||
# "上海": {"min_lat": 30.40, "max_lat": 31.53, "min_lon": 120.51, "max_lon": 122.12},
|
||||
# "浙江": {"min_lat": 27.10, "max_lat": 31.53, "min_lon": 118.00, "max_lon": 123.00},
|
||||
# "深圳": {"min_lat": 22.45, "max_lat": 22.75, "min_lon": 113.75, "max_lon": 114.63},
|
||||
# "广州": {"min_lat": 22.26, "max_lat": 23.92, "min_lon": 112.57, "max_lon": 114.03},
|
||||
# "江苏": {"min_lat": 30.75, "max_lat": 35.20, "min_lon": 116.18, "max_lon": 121.56},
|
||||
# "福建": {"min_lat": 23.50, "max_lat": 28.22, "min_lon": 116.40, "max_lon": 120.43}
|
||||
# }
|
||||
|
||||
# # 随机选择一个地区
|
||||
# selected_region = random.choice(list(regions.keys()))
|
||||
# region = regions[selected_region]
|
||||
|
||||
# # 随机生成该地区的经纬度,并保留15位小数
|
||||
# latitude = round(random.uniform(region["min_lat"], region["max_lat"]), 15)
|
||||
# longitude = round(random.uniform(region["min_lon"], region["max_lon"]), 15)
|
||||
|
||||
res = ''
|
||||
mx = os.environ.get('JYJCITY')
|
||||
if not mx:
|
||||
print("请设置环境变量在运行")
|
||||
else:
|
||||
mx_list = mx.split('@')
|
||||
for num, mx_item in enumerate(mx_list, start=1):
|
||||
latitude,longitude= mx_item.split('&')
|
||||
print(f"\n纬度={latitude}\n经度={longitude}")
|
||||
return latitude, longitude
|
||||
|
||||
def generate_positive_comment(self):
|
||||
subjects = [
|
||||
"今天", "这一天", "现在", "此刻", "每一天", "每一刻", "每时每刻", "未来"
|
||||
]
|
||||
|
||||
verbs = [
|
||||
"充满希望", "充满阳光", "美好", "令人期待", "值得期待", "光辉灿烂", "充满可能", "无限美好"
|
||||
]
|
||||
|
||||
adjectives = [
|
||||
"积极", "快乐", "充满活力", "动力满满", "能量满满", "振奋", "鼓舞人心", "激动人心"
|
||||
]
|
||||
|
||||
encouragements = [
|
||||
"你真的很棒", "继续加油", "保持积极的心态", "相信自己", "不要放弃", "你的努力会有回报", "你能行", "你是最棒的"
|
||||
]
|
||||
|
||||
actions = [
|
||||
"继续前行", "努力奋斗", "坚持不懈", "勇敢追梦", "微笑面对生活", "不断进步", "追求卓越", "克服困难"
|
||||
]
|
||||
|
||||
endings = [
|
||||
"加油!", "你会成功的!", "相信自己!", "美好的事情正在发生!", "未来属于你!", "你一定能做到!", "前途一片光明!",
|
||||
"今天会很棒!"
|
||||
]
|
||||
|
||||
emojis = [
|
||||
"💪", "👍", "🌟", "😊", "🚀", "💖", "🌈", "☀️", "😁", "🏆", "✨", "👏", "🔥", "🎉", "🌻"
|
||||
]
|
||||
|
||||
subject = random.choice(subjects)
|
||||
verb = random.choice(verbs)
|
||||
adjective = random.choice(adjectives)
|
||||
encouragement = random.choice(encouragements)
|
||||
action = random.choice(actions)
|
||||
ending = random.choice(endings)
|
||||
emoji = random.choice(emojis)
|
||||
|
||||
comment = f"{subject} {verb}且{adjective}!{encouragement},{action}。{ending} {emoji}"
|
||||
|
||||
return comment
|
||||
|
||||
def get_user_info(self):
|
||||
act_name = '获取用户信息'
|
||||
Log(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/customer/detail"
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
nickName = data.get('nickName', '')
|
||||
mobile = data.get('mobile', '')
|
||||
self.custId = data.get('custId', '')
|
||||
|
||||
mobile = mobile[:3] + "*" * 4 + mobile[7:]
|
||||
Log(f"> 用户名:{nickName}\n> 手机号:{mobile}\n> ID:{self.custId}")
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def get_user_point(self, END=False):
|
||||
act_name = '获取积分信息'
|
||||
# 使用 Log 或 print 打印操作名
|
||||
log_or_print = Log if END else print
|
||||
log_or_print(f'\n====== {act_name} ======')
|
||||
# 获取当前日期和时间
|
||||
now = datetime.now()
|
||||
|
||||
# 获取当前年份和月份,并格式化为字符串 "YYYY-MM"
|
||||
current_year_month = now.strftime("%Y-%m")
|
||||
|
||||
url = f"{self.baseUrl}jingyoujia/customer/queryIntegralLogV2?changeDirection=1&yearAndMonth={current_year_month}"
|
||||
# https://jjw.jingjiu.com/app-jingyoujia/app/jingyoujia/customer/queryIntegralLogV2?changeDirection=1&yearAndMonth=2024-07
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
# totalIncIntegral = data.get('totalIncIntegral', '')
|
||||
totalIntegral = data.get('totalIntegral', '')
|
||||
# log_or_print(f"> 执行{'后' if END else '前'}积分:{totalIncIntegral}")
|
||||
log_or_print(f"> 执行{'后' if END else '前'}积分:{totalIntegral}")
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
def sign(self, END=False):
|
||||
act_name = '签到'
|
||||
# 使用 Log 或 print 打印操作名
|
||||
log_or_print = Log if END else print
|
||||
log_or_print(f'\n====== {act_name} ======')
|
||||
|
||||
url = f"{self.baseUrl}jingyoujia/taskContinuousRecord"
|
||||
response = self.make_request(url, method='post')
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
# data = response.get('data', {})
|
||||
# totalIntegral = data.get('totalIntegral', '')
|
||||
# log_or_print(f"> 执行{'后' if END else '前'}积分:{totalIntegral}")
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
def get_TopicList(self):
|
||||
act_name = '获取文章列表'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}ugcExcellent/queryUgcExcellentTopicList?pageNum=1&pageSize=20&topicType=35&themeId="
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
rows = response.get('rows', {})
|
||||
random_topic = random.choice(rows)
|
||||
topicId = random_topic.get('topicId', '')
|
||||
topic = random_topic.get('topic', '')
|
||||
imgList = random_topic.get('imgList', '')
|
||||
if len(imgList) > 0:
|
||||
imgurl = imgList[0]
|
||||
|
||||
print(f"> 随机文章【{topic}】 id:【{topicId}】")
|
||||
self.sendTopicLike(topicId, '点赞')
|
||||
random_delay(5, 8)
|
||||
self.sendTopicLike(topicId, '取消点赞')
|
||||
random_delay()
|
||||
self.addComment(topicId)
|
||||
random_delay()
|
||||
self.queryVoteInfo(imgurl)
|
||||
random_delay()
|
||||
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def queryVoteInfo(self, imgurl):
|
||||
act_name = '获取投票话题状态'
|
||||
# 使用 Log 或 print 打印操作名
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/ugcVote/queryVoteInfo/35"
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
alreadyVote = data.get('alreadyVote', '')
|
||||
voteInfoList = data.get('voteInfoList', [])
|
||||
quizId = voteInfoList[0].get('quizId', '')
|
||||
print(f"> 获取到话题id:{quizId}")
|
||||
if alreadyVote:
|
||||
self.hotTopic(imgurl)
|
||||
return True
|
||||
if quizId:
|
||||
if self.vote(quizId):
|
||||
self.hotTopic(imgurl)
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def vote(self, quizId):
|
||||
act_name = '话题投票'
|
||||
# 使用 Log 或 print 打印操作名
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/ugcVote/vote"
|
||||
data = {
|
||||
"topicType": 35,
|
||||
"voteInfoList": [{
|
||||
"quizId": quizId,
|
||||
"optionMarkList": ["B"]
|
||||
}]
|
||||
}
|
||||
response = self.make_request(url, json_data=data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', False)
|
||||
return data
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def sendTopicLike(self, topicId, type='点赞'):
|
||||
act_name = type
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/ugc/sendTopicLike"
|
||||
json_data = {
|
||||
"invokeType": 1,
|
||||
"topicId": topicId
|
||||
}
|
||||
response = self.make_request(url, json_data=json_data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'>> {act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
rewardResult = data.get('rewardResult', '')
|
||||
rewardNum = data.get('rewardNum', '')
|
||||
if rewardResult:
|
||||
print(f"> 获得【{rewardNum}】积分")
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def addComment(self, topicId):
|
||||
act_name = '评论'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/ugc/addComment"
|
||||
content = self.generate_positive_comment()
|
||||
print(f'> 随机评论:【{content}】')
|
||||
json_data = {
|
||||
"invokeType": 1,
|
||||
"topicId": topicId,
|
||||
"content": content
|
||||
}
|
||||
response = self.make_request(url, json_data=json_data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'> {act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
rewardResult = data.get('rewardResult', '')
|
||||
rewardNum = data.get('rewardNum', '')
|
||||
if rewardResult:
|
||||
print(f"> 获得【{rewardNum}】积分")
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def hotTopic(self, imgurl):
|
||||
act_name = '发帖'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/ugc/hotTopic"
|
||||
content = self.generate_positive_comment()
|
||||
print(f'随机帖子:【{content}】')
|
||||
json_data = {
|
||||
"content": content,
|
||||
"imgList": [imgurl],
|
||||
"topicType": 35,
|
||||
"themeId": 62
|
||||
}
|
||||
response = self.make_request(url, json_data=json_data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'> {act_name}成功!✅')
|
||||
self.finish_task()
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def finish_task(self):
|
||||
act_name = '完成任务'
|
||||
print(f'====== {act_name} ======')
|
||||
url = f"https://jjw.jingjiu.com/app-jingyoujia/business/member/task/finish"
|
||||
json_data = {
|
||||
"taskType": self.taskType,
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
print(f'>调试 {json_data}')
|
||||
|
||||
response = self.make_request(url, json_data=json_data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'> {act_name}成功!✅')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def currentGrowMedicine(self):
|
||||
act_name = '获取药材成长信息'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/currentGrowMedicine"
|
||||
MedicineLi = {
|
||||
1: "枸杞",
|
||||
2: "淮山药",
|
||||
3: "肉苁蓉",
|
||||
4: "仙茅",
|
||||
5: "肉桂",
|
||||
6: "当归 ",
|
||||
7: "丁香",
|
||||
8: "淫羊藿",
|
||||
9: "黄芪"
|
||||
}
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
data = response.get('data', {})
|
||||
print(f'{act_name}成功!✅')
|
||||
# 药材类型
|
||||
medicineType = data.get('medicineType', '')
|
||||
Log(f'> 当前药材:【{MedicineLi[medicineType]}】')
|
||||
# 总需水量
|
||||
totalWaterNum = data.get('totalWaterNum', '')
|
||||
# 剩余总需水量
|
||||
totalSurplusWaterNum = data.get('totalSurplusWaterNum', '')
|
||||
# 当前阶段剩余需水量
|
||||
surplusWaterNum = data.get('surplusWaterNum', '')
|
||||
# 当前阶段总需水量
|
||||
currentStageWaterNum = data.get('currentStageWaterNum', '')
|
||||
# 当前已浇水量
|
||||
totalDoneWaterNum = data.get('totalDoneWaterNum', '')
|
||||
Log(f'> 当前阶段进度:{(currentStageWaterNum - surplusWaterNum)}/{currentStageWaterNum}')
|
||||
Log(f'> 当前阶段剩余需水量:{surplusWaterNum}')
|
||||
Log(f'> 总进度:{totalDoneWaterNum}/{totalWaterNum}')
|
||||
Log(f'> 剩余总需水量:{totalSurplusWaterNum}')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def taskList(self):
|
||||
act_name = '获取任务列表'
|
||||
Log(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/task/taskList"
|
||||
|
||||
response = self.make_request(url, method='get')
|
||||
if response.get('code', -1) == 200:
|
||||
data = response.get('data', '')
|
||||
print(f'{act_name}成功!✅')
|
||||
for task in data:
|
||||
self.taskType = task.get('taskType', '')
|
||||
finish = task.get('finish', '')
|
||||
name = task.get('name', '')
|
||||
Log(f'>> 当前任务【{name}】')
|
||||
skip_task = [1, 2, 5, 9]
|
||||
if self.taskType in skip_task:
|
||||
print('暂不支持,跳过')
|
||||
continue
|
||||
if finish:
|
||||
Log(f'> 已完成✅')
|
||||
continue
|
||||
if name == '生活圈互动领水滴':
|
||||
self.get_TopicList()
|
||||
elif name == '每日浇水领水滴':
|
||||
for i in range(3):
|
||||
self.water(i + 1)
|
||||
random_delay(3, 5)
|
||||
elif name == '订阅提醒领水滴':
|
||||
self.subscribe()
|
||||
elif name == '不做健康打卡领水滴':
|
||||
self.photoPunch()
|
||||
random_delay()
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def subscribe(self):
|
||||
act_name = f'订阅通知'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/task/subscribe"
|
||||
json_data = {
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
data = {
|
||||
"v1": self.encrypt(json_data)
|
||||
}
|
||||
|
||||
response = self.make_request(url, json_data=data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'> {act_name}成功!✅')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def photoPunch(self):
|
||||
act_name = f'拍照打卡'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/activityCommon/photoPunch"
|
||||
json_data = {
|
||||
"activityType": "MOUNTAIN_CLIMBING_2024",
|
||||
"recordUrl": "https://jjw-oos.jingjiu.com/jingyoujia/images/pages/online-punch/example.png",
|
||||
"code": "",
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
response = self.make_request(url, json_data=json_data)
|
||||
if response.get('code', -1) == 200:
|
||||
data = response.get('data', {})
|
||||
print(f'{act_name}成功!✅')
|
||||
water = data.get('water', False)
|
||||
if water:
|
||||
waterNum = data.get('waterNum', 0)
|
||||
print(f'> 获得【{waterNum}】水滴')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def water(self, i):
|
||||
act_name = f'第【{i}】次浇水'
|
||||
print(f'====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/water"
|
||||
json_data = {
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
data = {
|
||||
"v1": self.encrypt(json_data)
|
||||
}
|
||||
response = self.make_request(url, json_data=data)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'> {act_name}成功!✅')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def everyDayWaterStatus(self):
|
||||
act_name = f'获取每日水滴状态'
|
||||
print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/user/everyDayWaterStatus"
|
||||
|
||||
params = {
|
||||
'lat': self.lat,
|
||||
'lon': self.lon,
|
||||
}
|
||||
|
||||
response = self.make_request(url, method='get', params=params)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', False)
|
||||
if data:
|
||||
print('> 可领取')
|
||||
self.everyDayWater()
|
||||
else:
|
||||
print('> 已领取')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def game_userInfo(self, END=False):
|
||||
act_name = f'获取水滴数量'
|
||||
# 使用 Log 或 print 打印操作名
|
||||
log_or_print = Log if END else print
|
||||
log_or_print(f'\n====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/user/userInfo"
|
||||
|
||||
params = {
|
||||
'lat': self.lat,
|
||||
'lon': self.lon,
|
||||
}
|
||||
|
||||
response = self.make_request(url, method='get', params=params)
|
||||
if response.get('code', -1) == 200:
|
||||
print(f'{act_name}成功!✅')
|
||||
data = response.get('data', {})
|
||||
waterNum = data.get('waterNum', 0)
|
||||
log_or_print(f'> 当前剩余水滴【{waterNum}】')
|
||||
log_or_print(f'> 可浇水【{waterNum // 10}】次')
|
||||
if waterNum > 0:
|
||||
for i in range(waterNum // 10):
|
||||
self.water(i + 1)
|
||||
random_delay(2, 5)
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def everyDayWater(self):
|
||||
act_name = f'领取每日水滴'
|
||||
print(f'====== {act_name} ======')
|
||||
url = f"{self.baseUrl}jingyoujia/game/user/everyDayWater"
|
||||
json_data = {
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
data = {
|
||||
"v1": self.encrypt(json_data)
|
||||
}
|
||||
response = self.make_request(url, json_data=data)
|
||||
if response.get('code', -1) == 200:
|
||||
data = response.get('data', 0)
|
||||
print(f'> {act_name}成功!✅')
|
||||
print(f'> 获得:【{data}】水滴')
|
||||
return True
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
return False
|
||||
else:
|
||||
print(response)
|
||||
return False
|
||||
|
||||
def invite(self):
|
||||
act_name = f'助力'
|
||||
print(f'====== {act_name} ======')
|
||||
max_help = 3
|
||||
url = f"{self.baseUrl}jingyoujia/game/user/invite"
|
||||
for code in Author_inviteCustId:
|
||||
if max_help < 1: break
|
||||
if code == self.custId:
|
||||
print('> 跳过助力自己')
|
||||
continue
|
||||
json_data = {
|
||||
"inviteCustId": code,
|
||||
"lat": self.lat,
|
||||
"lon": self.lon
|
||||
}
|
||||
data = {
|
||||
"v1": self.encrypt(json_data)
|
||||
}
|
||||
response = self.make_request(url, json_data=data)
|
||||
if response.get('code', -1) == 200:
|
||||
data = response.get('data', 0)
|
||||
success = data.get('success', False)
|
||||
if success:
|
||||
print(f'> 助力成功!剩余可助力【{max_help}】次✅')
|
||||
max_help -= 1
|
||||
elif data.get('msg', '') == '今日己为他助力过啦~明天再来':
|
||||
print(f'> 助力失败:已助力过!❌')
|
||||
max_help -= 1
|
||||
else:
|
||||
msg = data.get('msg', '')
|
||||
print(f'> 助力失败:{msg}❌')
|
||||
|
||||
elif not response:
|
||||
Log(f"> 账号 {self.index}: ck过期 请重新抓取❌")
|
||||
continue
|
||||
else:
|
||||
print(response)
|
||||
continue
|
||||
random_delay(2, 5)
|
||||
|
||||
def main(self):
|
||||
Log(f"\n开始执行第{self.index}个账号--------------->>>>>")
|
||||
if self.get_user_info():
|
||||
# self.region, self.lat, self.lon = self.random_city_coordinates()
|
||||
self.lat, self.lon = self.random_city_coordinates()
|
||||
self.everyDayWaterStatus()
|
||||
self.invite()
|
||||
self.taskList()
|
||||
self.game_userInfo()
|
||||
self.game_userInfo(True)
|
||||
self.currentGrowMedicine()
|
||||
# 要解密body的
|
||||
# self.sign(True)
|
||||
self.get_user_point(True)
|
||||
self.sendMsg()
|
||||
return True
|
||||
else:
|
||||
self.sendMsg()
|
||||
return False
|
||||
|
||||
def sendMsg(self):
|
||||
if self.send_UID:
|
||||
push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME)
|
||||
print(push_res)
|
||||
|
||||
|
||||
def random_delay(min_delay=1, max_delay=5):
|
||||
"""
|
||||
在min_delay和max_delay之间产生一个随机的延时时间,然后暂停执行。
|
||||
参数:
|
||||
min_delay (int/float): 最小延时时间(秒)
|
||||
max_delay (int/float): 最大延时时间(秒)
|
||||
"""
|
||||
delay = random.uniform(min_delay, max_delay)
|
||||
print(f">本次随机延迟:【{delay:.2f}】 秒.....")
|
||||
time.sleep(delay)
|
||||
|
||||
|
||||
def down_file(filename, file_url):
|
||||
print(f'开始下载:{filename},下载地址:{file_url}')
|
||||
try:
|
||||
response = requests.get(file_url, verify=False, timeout=10)
|
||||
response.raise_for_status()
|
||||
with open(filename + '.tmp', 'wb') as f:
|
||||
f.write(response.content)
|
||||
print(f'【{filename}】下载完成!')
|
||||
|
||||
# 检查临时文件是否存在
|
||||
temp_filename = filename + '.tmp'
|
||||
if os.path.exists(temp_filename):
|
||||
# 删除原有文件
|
||||
if os.path.exists(filename):
|
||||
os.remove(filename)
|
||||
# 重命名临时文件
|
||||
os.rename(temp_filename, filename)
|
||||
print(f'【{filename}】重命名成功!')
|
||||
return True
|
||||
else:
|
||||
print(f'【{filename}】临时文件不存在!')
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f'【{filename}】下载失败:{str(e)}')
|
||||
return False
|
||||
|
||||
|
||||
def import_Tools():
|
||||
global CHERWIN_TOOLS, ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode
|
||||
import CHERWIN_TOOLS
|
||||
ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,
|
||||
local_version)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
APP_NAME = '劲友家小程序'
|
||||
ENV_NAME = 'JYJ'
|
||||
ENV_NAME2 = 'JYJCITY'
|
||||
CK_URL = 'jjw.jingjiu.com请求头'
|
||||
CK_NAME = 'authorization'
|
||||
CK_NAME2 = 'latitude'
|
||||
CK_NAME3 = 'longitude'
|
||||
CK_EX = 'JYJwx eyJ0eXAiOxxxxx'
|
||||
CK_EX2 = '35.11111xxxxx'
|
||||
CK_EX3 = '119.1111J0eXAiOxxxxx'
|
||||
print(f'''
|
||||
✨✨✨ {APP_NAME}脚本✨✨✨
|
||||
✨ 功能:
|
||||
互动:发帖、点赞、收藏、分享 劲酒庄园:部分日常任务
|
||||
✨ 抓包步骤:
|
||||
打开{APP_NAME}
|
||||
授权登陆
|
||||
打开抓包工具
|
||||
找{CK_URL}{CK_NAME} {CK_NAME2} {CK_NAME3}
|
||||
参数示例:{CK_EX}{CK_EX2}{CK_EX3}
|
||||
✨ ✨✨wxpusher一对一推送功能,
|
||||
✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送
|
||||
✨需要在{ENV_NAME}变量最后添加@wxpusher的UID
|
||||
✨ 设置青龙变量:
|
||||
export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割
|
||||
export {ENV_NAME2}='{CK_NAME2}{CK_NAME3}参数值'多账号#或&分割
|
||||
export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启
|
||||
✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包
|
||||
✨ 推荐cron:5 10 * * *
|
||||
✨✨✨ @Author CHERWIN✨✨✨
|
||||
✨✨✨ @Author2 ArcadiaScriptPublic 频道:https://t.me/ArcadiaScript 群组:https://t.me/ArcadiaScriptPublic
|
||||
1修复使用外地经纬度问题,变量为JYJCITY 格式 {CK_EX2}{CK_EX3} 自己经纬度更靠谱
|
||||
2修复取消点赞失败
|
||||
3修复获取总积分不正确问题
|
||||
4签到抽奖暂时手动吧
|
||||
✨✨✨
|
||||
''')
|
||||
local_script_name = os.path.basename(__file__)
|
||||
local_version = '2024.06.03'
|
||||
if IS_DEV:
|
||||
import_Tools()
|
||||
else:
|
||||
if os.path.isfile('CHERWIN_TOOLS.py'):
|
||||
import_Tools()
|
||||
else:
|
||||
if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'):
|
||||
print('脚本依赖下载完成请重新运行脚本')
|
||||
import_Tools()
|
||||
else:
|
||||
print(
|
||||
'脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖')
|
||||
exit()
|
||||
print(TIPS)
|
||||
token = ''
|
||||
token = ENV if ENV else token
|
||||
if not token:
|
||||
print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''")
|
||||
exit()
|
||||
tokens = CHERWIN_TOOLS.ENV_SPLIT(token)
|
||||
# print(tokens)
|
||||
if len(tokens) > 0:
|
||||
print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<")
|
||||
access_token = []
|
||||
for index, infos in enumerate(tokens):
|
||||
run_result = RUN(infos, index).main()
|
||||
if not run_result: continue
|
||||
# if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML)
|
||||
Reference in New Issue
Block a user