脚本功能介绍:
将需要下载的应用报名放在名为“待下载应用包.txt"里
程序会优先在酷安应用商城下载对应应用,如果该应用酷安中没有会在应用宝网站下载,一般应用宝中只能下载游戏类软件
此程序有两种模式
A、间隔执行(一次执行完毕等待X秒后继续执行)
B、定时执行(固定每天一个时间点执行)
import requests
import re
import os
from clint.textui import progress
import time
import datetime
def YYB_jiansuo(bao_name):
cookies = {
'pgv_pvid': '7581333496',
'ts_uid': '6391491387',
'ts_refer': 'cn.bing.com/',
'yyb_home_guid': '74f1e6bd-6097-4617-9fc9-662e46978739',
'pac_uid': '0_98d7c9dfc3cf0',
'YYB_HOME_UUID': '97dab73d-aba0-400c-b92c-7b5a7e86e5ad',
'Hm_lvt_54c82ac440add7032803c966915f1b09': '1670504144',
'Hm_lpvt_54c82ac440add7032803c966915f1b09': '1670506516',
}
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
}
url = 'https://sj.qq.com/appdetail/'+bao_name
response = requests.get(url, cookies=cookies, headers=headers)
html = response.text
model = re.compile(r'.*?"download_url":"(.*?)",.*?', re.S) #下载链接
lins = model.findall(html)
#print(lins[0])
banben = re.compile('.*?版本号</p><p\stitle=\"(.*?)\"\s+class=.*?', re.S) #版本号
banben1 = banben.findall(html)
#print(banben1[0])
name = re.compile('.*?</script><title>(.*?)官方下载.*?', re.S) #中文名
name1 = name.findall(html)
#print(name1)
wenjianming = name1[0]+"-"+bao_name+"-"+banben1[0]
return lins[0],wenjianming
def YYB_dload(url,name):
#print(url)
dl_bao = url.split("fsname=")[1]
# ul = re.compile('.*?apk/(.*?)?fsname.*?', re.S)
# ul1 = ul.findall(url)
# print(ul1[0])
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
}
params = {
'fsname': dl_bao,
}
# dl_url = 'http://dd.myapp.com/sjy.00001/16891/apk/'+ul1[0]
# print(dl_url)
response = requests.get(url,params=params,headers=headers)
#print(response)
total_length = int(response.headers.get('content-length'))
path = name_path + "\\" + name
with open(path, "wb") as pypkg:
for chunk in progress.bar(response.iter_content(chunk_size=1024), expected_size=(total_length / 1024) + 1,width=100):
if chunk:
pypkg.write(chunk)
def download(apk):
cookies = {
'SESSID': '11c0-6388b114e307b-1669902612-9264',
'Hm_lvt_7132d8577cc4aa4ae4ee939cd42eb02b': '1669902613',
'uid': '3349387',
'username': '%E5%B0%8F%E7%AC%A8%E8%9B%8B11',
'token': '416fd271k3E1gMMTpcEBjQQeYfrVulKIR-rHxQhFiJKIkA4jw8kXvLdWVNfF5NYOWFRSvChvB55kBPMRFS-R_JiJvp7O5oJifRTDaX1iZGCMPBcmLHShWaOmVcLycrdTfp4F1OX-572fTU8r5xY2zfrnF0S-mIQw1Kt3m5hQQw8YwLDr9R-4Nt9zOj9CjAN4XQbNsMR6BxW7Lbvmj_6mj55-y5HoRg',
'forward': 'https%3A%2F%2Fdeveloper.coolapk.com%2F',
'Hm_lpvt_7132d8577cc4aa4ae4ee939cd42eb02b': '1669943400',
}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
# Requests sorts cookies= alphabetically
# 'Cookie': 'SESSID=11c0-6388b114e307b-1669902612-9264; Hm_lvt_7132d8577cc4aa4ae4ee939cd42eb02b=1669902613; uid=3349387; username=%E5%B0%8F%E7%AC%A8%E8%9B%8B11; token=416fd271k3E1gMMTpcEBjQQeYfrVulKIR-rHxQhFiJKIkA4jw8kXvLdWVNfF5NYOWFRSvChvB55kBPMRFS-R_JiJvp7O5oJifRTDaX1iZGCMPBcmLHShWaOmVcLycrdTfp4F1OX-572fTU8r5xY2zfrnF0S-mIQw1Kt3m5hQQw8YwLDr9R-4Nt9zOj9CjAN4XQbNsMR6BxW7Lbvmj_6mj55-y5HoRg; forward=https%3A%2F%2Fdeveloper.coolapk.com%2F; Hm_lpvt_7132d8577cc4aa4ae4ee939cd42eb02b=1669943400',
'Referer': 'https://www.coolapk.com/apk',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
url = "https://www.coolapk.com/apk/"+apk
response = requests.get(url, cookies=cookies, headers=headers)
if response.status_code == requests.codes.ok:
#print(response)
html = response.text
#print(html) #打印网页源码
model = re.compile(r'.*?class=\"show-dialog\"\shref=\"(.*?)\".*?', re.S) #下载链接
lins = model.findall(html)
banben = re.compile(r'.*?class=\"list_app_info\">\s\s(.*?)<.*?', re.S) #版本号
banbenhao = banben.findall(html)
name_reg = '<p class="detail_app_title">(.*?)<' #name
name = re.findall(name_reg, html)[0]
#print(name)
baozengze = re.compile(r'.*?pn=(.*?)&.*?', re.S) #bao
bao = baozengze.findall(lins[0])
a = name+'-'+bao[0]+'-'+banbenhao[0]
return lins[0], a
else:
pass
# def jianchagengxin():
# filePath = 'D:\\Desktop\\10H'
# yiyou = os.listdir(filePath)
# print(yiyou[0])
def dwlod(apk,url,name):
model = re.compile(r'.*?id=(.*?)\&h=(.*?)\&from.*?', re.S)
zifu = model.findall(url)
cookies = {
'SESSID': '11c0-6388b114e307b-1669902612-9264',
'Hm_lvt_7132d8577cc4aa4ae4ee939cd42eb02b': '1669902613',
'uid': '3349387',
'username': '%E5%B0%8F%E7%AC%A8%E8%9B%8B11',
'token': '416fd271k3E1gMMTpcEBjQQeYfrVulKIR-rHxQhFiJKIkA4jw8kXvLdWVNfF5NYOWFRSvChvB55kBPMRFS-R_JiJvp7O5oJifRTDaX1iZGCMPBcmLHShWaOmVcLycrdTfp4F1OX-572fTU8r5xY2zfrnF0S-mIQw1Kt3m5hQQw8YwLDr9R-4Nt9zOj9CjAN4XQbNsMR6BxW7Lbvmj_6mj55-y5HoRg',
'forward': 'https%3A%2F%2Fdeveloper.coolapk.com%2F',
'Hm_lpvt_7132d8577cc4aa4ae4ee939cd42eb02b': '1669943400',
}
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
# Requests sorts cookies= alphabetically
# 'Cookie': 'SESSID=11c0-6388b114e307b-1669902612-9264; Hm_lvt_7132d8577cc4aa4ae4ee939cd42eb02b=1669902613; uid=3349387; username=%E5%B0%8F%E7%AC%A8%E8%9B%8B11; token=416fd271k3E1gMMTpcEBjQQeYfrVulKIR-rHxQhFiJKIkA4jw8kXvLdWVNfF5NYOWFRSvChvB55kBPMRFS-R_JiJvp7O5oJifRTDaX1iZGCMPBcmLHShWaOmVcLycrdTfp4F1OX-572fTU8r5xY2zfrnF0S-mIQw1Kt3m5hQQw8YwLDr9R-4Nt9zOj9CjAN4XQbNsMR6BxW7Lbvmj_6mj55-y5HoRg; forward=https%3A%2F%2Fdeveloper.coolapk.com%2F; Hm_lpvt_7132d8577cc4aa4ae4ee939cd42eb02b=1669943400',
'Referer': 'https://www.coolapk.com/apk',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'sec-ch-ua': '"Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
}
params = {
'pn':apk,
'id':zifu[0][0],
'h': zifu[0][1],
'from': 'click',
}
response1 = requests.get('https://dl.coolapk.com/down', params=params, cookies=cookies, headers=headers)
#print(response1)
#下载可用
# with open("com.jingdong.app.apk", "wb") as code:
# code.write(response1.content)
total_length = int(response1.headers.get('content-length'))
path = name_path+"\\"+name
with open(path, "wb") as pypkg:
for chunk in progress.bar(response1.iter_content(chunk_size=1024), expected_size=(total_length/1024) + 1, width=100):
if chunk:
pypkg.write(chunk)
def huoquwenjianping():
yiyou = os.listdir(name_path) #文件夹中的应用
a = 0
for line in open("./待下载应用包.txt","r"): #设置文件对象并读取每一行文件
if line in ['\n', '\r\n']:
# doing something
pass
else:
applist.append(line.strip('\n'))
# applist = ['com.autonavi.minimap', 'com.ss.android.article.news', 'com.kugou.android', 'com.baidu.BaiduMap',
# 'cn.wps.moffice_eng', 'com.xiaomi.smarthome', 'com.xiaomi.shop', 'com.xiaomi.jr',
# 'com.xunmeng.pinduoduo', 'com.duokan.reader']
# for a in applist:
# for i in yiyou:
# if i in applist:
for i in applist:
try:
a = download(i)[1]
except Exception:
pass
#print(namelist)
# for a in namelist:
name = str(a)+'.apk'
#print(name)
if name in yiyou:
pass
print("<"+name.split('-')[-3]+">已是最新版本,无需更新!")
print()
else:
xin = 0
try:
xin = name.split('-')[-3]
except Exception:
print("<"+i+">这可能不是个包名,请检查包名是否正确!(也有可能是网站没有该应用)")
continue
print("<"+str(xin) + ">需要更新!新版本为"+a.split('-')[-1])
for de in yiyou:
try:
jiu = de.split('-')[-3]
if xin == jiu:
delname = name_path + "\\" + de
os.remove(delname)
except Exception:
pass
name_reg = a.split('-')[-2]
print('正在下载<' + name.split('-')[-3]+">")
try:
dwlod(name_reg, download(name_reg)[0], name)
except Exception:
print("酷安网站没有这个应用,正在从应用宝获取应用数据")
try:
YYBjiansuo=YYB_jiansuo(name_reg)
#print(YYBjiansuo)
print('正在下载<' + name.split('-')[-3]+">")
YYB_dload(YYBjiansuo[0],YYBjiansuo[1])
except Exception:
print("<"+name.split('-')[-3]+">下载出错,可能是网站没有这个应用!或者包名错误!请检查网站是否有这个应用或包名是否正确")
pass
print()
if __name__ == '__main__':
# zz = 'com.tencent.mm'
# print(download(zz)[1])
YYBjiansuo = []
applist = []
print("-------------------将需要下载的app包名放在同目录的<待下载应用包.txt>文件中-------------------")
print("此程序分为两种模式,请选择一种:")
print("A、间隔执行(一次执行完毕等待X秒后继续执行)")
print("B、定时执行(固定每天一个时间点执行)")
print("----------------------------------------")
moshi = input("请输入您想要的模式:")
if moshi == 'A':
jiangeshijian = int(input("请输入间隔更新的时间,以秒为单位:"))
name_path = input(r"请输入要存放的app路径:")
while True:
huoquwenjianping()
time.sleep(jiangeshijian)
elif moshi == 'B':
B = str(input("请输入每天开始执行时间,24小时制,如:22:00,08:30):"))
try:
h = B.split(':')[-2]
except IndexError:
h = B.split(':')[-2]
try:
m = B.split(':')[-1]
except IndexError:
m = B.split(':')[-1]
#print("h:"+h+"m:"+m)
name_path = input(r"请输入要存放的app路径:")
# print("输入的H:" + str(h) + "输入的M:" + m)
# print(type(h))
# print(type(m))
while True:
now = datetime.datetime.now()
# print("H:"+now.strftime('%H')+"M:"+now.strftime('%M'))
if now.strftime('%H') == h and now.strftime('%M') == m:
huoquwenjianping()
time.sleep(50)
else:
print("输入有误!!")
# url = lins[0]
# myfile = requests.get(url)
# open('D:/1/com.tencent.mm.apk','wb').write(myfile.content)
# import requests
#
# file_url = lins[0]
# headers11 = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
# }
# r = requests.get(file_url, stream=True,headers=headers11)
# print(r)
# with open("python.APK", "wb") as pdf:
# for chunk in r.iter_content(chunk_size=1024):
# if chunk:
# pdf.write(chunk)
# user_agent_list = [
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
# "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
# "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
# "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
# "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
# "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
# "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
# "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
# "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
# "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
# "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
# "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
# "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
# "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
# "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
# "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
# "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
# "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
# "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
# "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
# "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
# ]
# url = lins[0]
# filename = "mm.apk"
# try:
# opener = urllib.request.build_opener()
# #opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
# opener.addheaders = [('User-Agent',random.choice(user_agent_list))]
# urllib.request.install_opener(opener)
# urllib.request.urlretrieve(url,filename)
# except urllib.request.ContentTooShortError:
# print( 'Network conditions is not good.Reloading.')
# auto_down(url,filename)
# except urllib.error.HTTPError:
# print(str(urllib.error.HTTPError))
# except:
# auto_down(url,filename)
# print("sssssss oh ssssssss")
# os.system('adb shell pm list packages -3 > ./aa.txt')
# book = xlwt.Workbook(encoding='utf-8') #创建Workbook,相当于创建Excel
#
# # 创建sheet,Sheet1为表的名字,cell_overwrite_ok为是否覆盖单元格
# sheet1 = book.add_sheet(u'Sheet1', cell_overwrite_ok=True)
#
# data = []
# for line in open("./aa.txt","r"): #设置文件对象并读取每一行文件
# lin = re.compile(r'package:(.*?)\n',re.S)
# data.append(lin.findall(line))
#
# a=0
# while a<len(data):
# sheet1.write(a,0,data[a][0])
# a += 1
# savepath = './excel表格.xls'
# book.save(savepath)
#
#
# headers = {
# 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.47',
# 'Referer': 'https://cn.bing.com/',
# }
#
#
# b=0
# print(data[1][0])
# while b<len(data):
# url = "https://app.mi.com/details?id=" + data[b][0]
# print(url)
# wbdata = requests.get(url=url, headers=headers)
# html = wbdata.text
# model = re.compile(r'.*?<h3 style="margin-top: 18px">(.*?)<.*?', re.S)
# lins = model.findall(html)
# print(lins)
# if wbdata.status_code == 200:
#
# if len(lins):
# print(lins[0])
# sheet1.write(b, 1, lins)
# else:
# sheet1.write(b, 1, '应用商城无该应用')
# print("无")
#
# else:
# print("200")
# b+=1
# savepath = './excel表格.xls'
# book.save(savepath)
# os.system('del aa.txt')
# response=urllib.request.urlopen(url)
# html_content=response.read()
# print(html_content)