mirror of
https://github.com/ngfchl/ptools
synced 2023-07-10 13:41:22 +08:00
1. 更新启动脚本
2. 优化更新界面 3. 优化项目结构 4. 添加站点图标
This commit is contained in:
289
auto_pt/migrations/0001_initial.py
Normal file
289
auto_pt/migrations/0001_initial.py
Normal file
@@ -0,0 +1,289 @@
|
||||
# Generated by Django 4.1 on 2022-08-25 13:16
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Notify",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("wechat_work_push", "企业微信通知"),
|
||||
("wxpusher_push", "WxPusher通知"),
|
||||
("pushdeer_push", "PushDeer通知"),
|
||||
("bark_push", "Bark通知"),
|
||||
],
|
||||
default="wechat_work_push",
|
||||
max_length=64,
|
||||
verbose_name="通知方式",
|
||||
),
|
||||
),
|
||||
(
|
||||
"enable",
|
||||
models.BooleanField(
|
||||
default=True, help_text="只有开启才能发送哦!", verbose_name="开启通知"
|
||||
),
|
||||
),
|
||||
(
|
||||
"corpid",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="微信企业ID",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="企业ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"corpsecret",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="应用的Secret/Token",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="Secret",
|
||||
),
|
||||
),
|
||||
(
|
||||
"agentid",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="APP ID",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="应用ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"touser",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="接收者用户名/UID",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="接收者",
|
||||
),
|
||||
),
|
||||
(
|
||||
"custom_server",
|
||||
models.URLField(
|
||||
blank=True,
|
||||
help_text="无自定义服务器的,请勿填写!",
|
||||
null=True,
|
||||
verbose_name="自定义服务器",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "通知推送", "verbose_name_plural": "通知推送",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="OCR",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
choices=[("baidu_aip", "百度OCR")],
|
||||
default="baidu_aip",
|
||||
max_length=64,
|
||||
verbose_name="OCR",
|
||||
),
|
||||
),
|
||||
("enable", models.BooleanField(default=False, verbose_name="启用")),
|
||||
(
|
||||
"api_key",
|
||||
models.CharField(
|
||||
blank=True, max_length=64, null=True, verbose_name="API-Key"
|
||||
),
|
||||
),
|
||||
(
|
||||
"secret_key",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="应用的Secret",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="Secret",
|
||||
),
|
||||
),
|
||||
(
|
||||
"app_id",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="APP ID",
|
||||
max_length=64,
|
||||
null=True,
|
||||
verbose_name="应用ID",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "OCR识别", "verbose_name_plural": "OCR识别",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Task",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
("name", models.CharField(max_length=32, verbose_name="任务名称")),
|
||||
("desc", models.CharField(max_length=32, verbose_name="任务描述")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "任务",
|
||||
"verbose_name_plural": "任务",
|
||||
"ordering": ("name",),
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="TaskJob",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"job_id",
|
||||
models.CharField(max_length=16, unique=True, verbose_name="任务ID"),
|
||||
),
|
||||
(
|
||||
"trigger",
|
||||
models.CharField(
|
||||
choices=[("interval", "间隔任务"), ("cron", "cron任务")],
|
||||
default="cron",
|
||||
max_length=64,
|
||||
verbose_name="任务类型",
|
||||
),
|
||||
),
|
||||
("task_exec", models.BooleanField(default=False, verbose_name="开启任务")),
|
||||
(
|
||||
"replace_existing",
|
||||
models.BooleanField(
|
||||
default=True,
|
||||
help_text="不设置此项重启项目后会报任务id已存在的错误, 设置此参数后会对已有的任务进行覆盖",
|
||||
verbose_name="覆盖任务",
|
||||
),
|
||||
),
|
||||
(
|
||||
"expression_time",
|
||||
models.CharField(
|
||||
help_text="在间隔任务表示间隔时长使用数字,单位:秒,corn任务中为corn表达式:“0 15 8 ? * * 2022”",
|
||||
max_length=64,
|
||||
verbose_name="时间表达式",
|
||||
),
|
||||
),
|
||||
(
|
||||
"start_date",
|
||||
models.DateTimeField(blank=True, null=True, verbose_name="任务开始时间"),
|
||||
),
|
||||
(
|
||||
"end_date",
|
||||
models.DateTimeField(blank=True, null=True, verbose_name="任务结束时间"),
|
||||
),
|
||||
(
|
||||
"misfire_grace_time",
|
||||
models.IntegerField(
|
||||
default=120,
|
||||
help_text="强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了",
|
||||
verbose_name="任务运行时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"jitter",
|
||||
models.IntegerField(
|
||||
default=120,
|
||||
help_text="强制执行结束的时间, 为避免撞车导致任务丢失, 没执行完就别执行了",
|
||||
verbose_name="时间浮动参数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"args",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
help_text="执行代码所需要的参数。",
|
||||
max_length=128,
|
||||
null=True,
|
||||
verbose_name="任务参数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"task",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="auto_pt.task",
|
||||
verbose_name="任务名称",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "计划任务", "verbose_name_plural": "计划任务",},
|
||||
),
|
||||
]
|
||||
867
pt_site/migrations/0001_initial.py
Normal file
867
pt_site/migrations/0001_initial.py
Normal file
@@ -0,0 +1,867 @@
|
||||
# Generated by Django 4.1 on 2022-08-25 13:16
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Downloader",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
("name", models.CharField(max_length=12, verbose_name="名称")),
|
||||
(
|
||||
"category",
|
||||
models.CharField(
|
||||
choices=[("Qb", "qBittorrent")],
|
||||
default="Qb",
|
||||
max_length=128,
|
||||
verbose_name="下载器",
|
||||
),
|
||||
),
|
||||
("username", models.CharField(max_length=16, verbose_name="用户名")),
|
||||
("password", models.CharField(max_length=128, verbose_name="密码")),
|
||||
("host", models.CharField(max_length=32, verbose_name="HOST")),
|
||||
(
|
||||
"port",
|
||||
models.IntegerField(
|
||||
default=8999,
|
||||
validators=[
|
||||
django.core.validators.MaxValueValidator(65535),
|
||||
django.core.validators.MinValueValidator(1001),
|
||||
],
|
||||
verbose_name="端口",
|
||||
),
|
||||
),
|
||||
(
|
||||
"reserved_space",
|
||||
models.IntegerField(
|
||||
default=30,
|
||||
help_text="单位GB,最小为1G,最大512G",
|
||||
validators=[
|
||||
django.core.validators.MinValueValidator(1),
|
||||
django.core.validators.MaxValueValidator(512),
|
||||
],
|
||||
verbose_name="预留磁盘空间",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "下载器", "verbose_name_plural": "下载器",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="MySite",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
("sort_id", models.IntegerField(default=1, verbose_name="排序")),
|
||||
("user_id", models.CharField(max_length=16, verbose_name="用户ID")),
|
||||
("passkey", models.CharField(max_length=128, verbose_name="PassKey")),
|
||||
("cookie", models.TextField(verbose_name="COOKIE")),
|
||||
(
|
||||
"hr",
|
||||
models.BooleanField(
|
||||
default=False, help_text="是否下载HR种子", verbose_name="开启HR下载"
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in",
|
||||
models.BooleanField(
|
||||
default=True, help_text="是否开启签到", verbose_name="开启签到"
|
||||
),
|
||||
),
|
||||
(
|
||||
"search",
|
||||
models.BooleanField(
|
||||
default=True, help_text="是否开启搜索", verbose_name="开启搜索"
|
||||
),
|
||||
),
|
||||
("invitation", models.IntegerField(default=0, verbose_name="邀请资格")),
|
||||
(
|
||||
"time_join",
|
||||
models.DateTimeField(blank=True, null=True, verbose_name="注册时间"),
|
||||
),
|
||||
(
|
||||
"latest_active",
|
||||
models.DateTimeField(blank=True, null=True, verbose_name="最近活动时间"),
|
||||
),
|
||||
(
|
||||
"sp_hour",
|
||||
models.CharField(default="", max_length=8, verbose_name="时魔"),
|
||||
),
|
||||
(
|
||||
"my_level",
|
||||
models.CharField(default="", max_length=16, verbose_name="用户等级"),
|
||||
),
|
||||
(
|
||||
"my_hr",
|
||||
models.CharField(default="", max_length=16, verbose_name="H&R"),
|
||||
),
|
||||
("leech", models.IntegerField(default=0, verbose_name="当前下载")),
|
||||
("seed", models.IntegerField(default=0, verbose_name="当前做种")),
|
||||
("mail", models.IntegerField(default=0, verbose_name="新邮件")),
|
||||
("publish", models.IntegerField(default=0, verbose_name="发布种子")),
|
||||
],
|
||||
options={"verbose_name": "我的站点", "verbose_name_plural": "我的站点",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Site",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
("name", models.CharField(max_length=32, verbose_name="站点名称")),
|
||||
(
|
||||
"url",
|
||||
models.URLField(
|
||||
default="", help_text='请保留网址结尾的"/"', verbose_name="站点网址"
|
||||
),
|
||||
),
|
||||
(
|
||||
"logo",
|
||||
models.URLField(
|
||||
default="", help_text="站点logo图标", verbose_name="站点logo"
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in_support",
|
||||
models.BooleanField(default=True, verbose_name="签到支持"),
|
||||
),
|
||||
(
|
||||
"get_torrent_support",
|
||||
models.BooleanField(default=True, verbose_name="拉取首页种子"),
|
||||
),
|
||||
(
|
||||
"get_userinfo_support",
|
||||
models.BooleanField(default=True, verbose_name="获取个人数据"),
|
||||
),
|
||||
(
|
||||
"search_support",
|
||||
models.BooleanField(default=False, verbose_name="搜索支持"),
|
||||
),
|
||||
(
|
||||
"page_default",
|
||||
models.CharField(
|
||||
default="torrents.php", max_length=64, verbose_name="默认搜索页面"
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_sign_in",
|
||||
models.CharField(
|
||||
default="attendance.php", max_length=64, verbose_name="默认签到链接"
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_detail",
|
||||
models.CharField(
|
||||
default="details.php?id={}",
|
||||
max_length=64,
|
||||
verbose_name="详情页面链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_download",
|
||||
models.CharField(
|
||||
default="download.php?id={}",
|
||||
max_length=64,
|
||||
verbose_name="默认下载链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_user",
|
||||
models.CharField(
|
||||
default="userdetails.php?id={}",
|
||||
max_length=64,
|
||||
verbose_name="用户信息链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_search",
|
||||
models.CharField(
|
||||
default="torrents.php?search={}",
|
||||
max_length=64,
|
||||
verbose_name="搜索链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_leeching",
|
||||
models.CharField(
|
||||
default="getusertorrentlistajax.php?userid={}&type=leeching",
|
||||
max_length=64,
|
||||
verbose_name="当前下载信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_uploaded",
|
||||
models.CharField(
|
||||
default="getusertorrentlistajax.php?userid={}&type=uploaded",
|
||||
max_length=64,
|
||||
verbose_name="发布种子信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_seeding",
|
||||
models.CharField(
|
||||
default="getusertorrentlistajax.php?userid={}&type=seeding",
|
||||
max_length=64,
|
||||
verbose_name="当前做种信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_completed",
|
||||
models.CharField(
|
||||
default="getusertorrentlistajax.php?userid={}&type=completed",
|
||||
max_length=64,
|
||||
verbose_name="完成种子信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_mybonus",
|
||||
models.CharField(
|
||||
default="mybonus.php", max_length=64, verbose_name="魔力值页面"
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_viewfilelist",
|
||||
models.CharField(
|
||||
default="viewfilelist.php?id={}",
|
||||
max_length=64,
|
||||
verbose_name="文件列表链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"page_viewpeerlist",
|
||||
models.CharField(
|
||||
default="viewpeerlist.php?id={}",
|
||||
max_length=64,
|
||||
verbose_name="当前用户列表",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in_method",
|
||||
models.CharField(
|
||||
default="get",
|
||||
help_text="get或post,请使用小写字母,默认get",
|
||||
max_length=5,
|
||||
verbose_name="签到请求方法",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in_captcha",
|
||||
models.BooleanField(
|
||||
default=False, help_text="有签到验证码的站点请开启", verbose_name="签到验证码"
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in_params",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
default="{}",
|
||||
help_text="默认无参数",
|
||||
max_length=128,
|
||||
null=True,
|
||||
verbose_name="签到请求参数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sign_in_headers",
|
||||
models.CharField(
|
||||
default="{}",
|
||||
help_text='字典格式:{"accept":"application/json","c":"d"},默认无参数',
|
||||
max_length=128,
|
||||
verbose_name="签到请求头",
|
||||
),
|
||||
),
|
||||
(
|
||||
"hr",
|
||||
models.BooleanField(
|
||||
default=False, help_text="站点是否开启HR", verbose_name="H&R"
|
||||
),
|
||||
),
|
||||
(
|
||||
"hr_rate",
|
||||
models.IntegerField(
|
||||
default=2, help_text="站点要求HR种子的分享率,最小:1", verbose_name="HR分享率"
|
||||
),
|
||||
),
|
||||
(
|
||||
"hr_time",
|
||||
models.IntegerField(
|
||||
default=10,
|
||||
help_text="站点要求HR种子最短做种时间,单位:小时",
|
||||
verbose_name="HR时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sp_full",
|
||||
models.FloatField(default=0, help_text="时魔满魔", verbose_name="满魔"),
|
||||
),
|
||||
(
|
||||
"limit_speed",
|
||||
models.IntegerField(
|
||||
default=100,
|
||||
help_text="站点盒子限速,家宽用户无需理会,单位:MB/S",
|
||||
verbose_name="上传速度限制",
|
||||
),
|
||||
),
|
||||
(
|
||||
"torrents_rule",
|
||||
models.CharField(
|
||||
default='//table[@class="torrents"]/tr',
|
||||
max_length=128,
|
||||
verbose_name="种子行信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"name_rule",
|
||||
models.CharField(
|
||||
default='.//td[@class="embedded"]/a/b/text()',
|
||||
max_length=128,
|
||||
verbose_name="种子名称",
|
||||
),
|
||||
),
|
||||
(
|
||||
"title_rule",
|
||||
models.CharField(
|
||||
default=".//tr/td[1]/text()",
|
||||
max_length=128,
|
||||
verbose_name="种子标题",
|
||||
),
|
||||
),
|
||||
(
|
||||
"detail_url_rule",
|
||||
models.CharField(
|
||||
default='.//td[@class="embedded"]/a[contains(@href,"detail")]/@href',
|
||||
max_length=128,
|
||||
verbose_name="种子详情",
|
||||
),
|
||||
),
|
||||
(
|
||||
"category_rule",
|
||||
models.CharField(
|
||||
default='.//td[@class="rowfollow nowrap"][1]/a[1]/img/@class',
|
||||
max_length=128,
|
||||
verbose_name="分类",
|
||||
),
|
||||
),
|
||||
(
|
||||
"poster_rule",
|
||||
models.CharField(
|
||||
default=".//table/tr/td[1]/img/@src",
|
||||
max_length=128,
|
||||
verbose_name="海报",
|
||||
),
|
||||
),
|
||||
(
|
||||
"magnet_url_rule",
|
||||
models.CharField(
|
||||
default='.//td/a[contains(@href,"download")]/@href',
|
||||
max_length=128,
|
||||
verbose_name="下载链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"download_url_rule",
|
||||
models.CharField(
|
||||
default='.//a[contains(@href,"download.php?id=") and contains(@href,"passkey")]/@href',
|
||||
max_length=128,
|
||||
verbose_name="种子链接",
|
||||
),
|
||||
),
|
||||
(
|
||||
"size_rule",
|
||||
models.CharField(
|
||||
default=".//td[5]/text()", max_length=128, verbose_name="文件大小"
|
||||
),
|
||||
),
|
||||
(
|
||||
"hr_rule",
|
||||
models.CharField(
|
||||
default='.//table/tr/td/img[@class="hitandrun"]/@title',
|
||||
max_length=128,
|
||||
verbose_name="H&R",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sale_rule",
|
||||
models.CharField(
|
||||
default='.//table/tr/td/img[contains(@class,"pro_")]/@alt',
|
||||
max_length=128,
|
||||
verbose_name="促销信息",
|
||||
),
|
||||
),
|
||||
(
|
||||
"sale_expire_rule",
|
||||
models.CharField(
|
||||
default=".//table/tr/td/font/span/@title",
|
||||
max_length=128,
|
||||
verbose_name="促销时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"release_rule",
|
||||
models.CharField(
|
||||
default=".//td[4]/span/@title",
|
||||
max_length=128,
|
||||
verbose_name="发布时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"seeders_rule",
|
||||
models.CharField(
|
||||
default=".//td[6]/b/a/text()",
|
||||
max_length=128,
|
||||
verbose_name="做种人数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"leechers_rule",
|
||||
models.CharField(
|
||||
default=".//td[7]/b/a/text()",
|
||||
max_length=128,
|
||||
verbose_name="下载人数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"completers_rule",
|
||||
models.CharField(
|
||||
default=".//td[8]/a/b/text()",
|
||||
max_length=128,
|
||||
verbose_name="完成人数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"viewfilelist_rule",
|
||||
models.CharField(
|
||||
default=".//td/text()", max_length=128, verbose_name="解析文件结构"
|
||||
),
|
||||
),
|
||||
(
|
||||
"viewpeerlist_rule",
|
||||
models.CharField(
|
||||
default=".//tr/td[9]/nobr/text()",
|
||||
max_length=128,
|
||||
verbose_name="平均下载进度",
|
||||
),
|
||||
),
|
||||
(
|
||||
"peer_speed_rule",
|
||||
models.CharField(
|
||||
default=".//tr/td[5]/nobr/text()",
|
||||
max_length=128,
|
||||
verbose_name="平均上传速度",
|
||||
),
|
||||
),
|
||||
(
|
||||
"remark",
|
||||
models.TextField(
|
||||
blank=True, default="", null=True, verbose_name="备注"
|
||||
),
|
||||
),
|
||||
(
|
||||
"invitation_rule",
|
||||
models.CharField(
|
||||
default='//a[contains(@href,"invite.php?id=")]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="邀请资格",
|
||||
),
|
||||
),
|
||||
(
|
||||
"time_join_rule",
|
||||
models.CharField(
|
||||
default='//td[contains(text(),"加入")]/following-sibling::td/span/@title',
|
||||
max_length=128,
|
||||
verbose_name="注册时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"latest_active_rule",
|
||||
models.CharField(
|
||||
default='//td[contains(text(),"最近动向")]/following-sibling::td/span/@title',
|
||||
max_length=128,
|
||||
verbose_name="最后活动时间",
|
||||
),
|
||||
),
|
||||
(
|
||||
"uploaded_rule",
|
||||
models.CharField(
|
||||
default='//font[@class="color_uploaded"]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="上传量",
|
||||
),
|
||||
),
|
||||
(
|
||||
"downloaded_rule",
|
||||
models.CharField(
|
||||
default='//font[@class="color_downloaded"]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="下载量",
|
||||
),
|
||||
),
|
||||
(
|
||||
"ratio_rule",
|
||||
models.CharField(
|
||||
default='//font[@class="color_ratio"][1]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="分享率",
|
||||
),
|
||||
),
|
||||
(
|
||||
"my_sp_rule",
|
||||
models.CharField(
|
||||
default='//a[@href="mybonus.php"]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="魔力值",
|
||||
),
|
||||
),
|
||||
(
|
||||
"hour_sp_rule",
|
||||
models.CharField(
|
||||
default='//div[contains(text(),"每小时能获取")]/text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="时魔",
|
||||
),
|
||||
),
|
||||
(
|
||||
"my_bonus_rule",
|
||||
models.CharField(
|
||||
default='//font[@class="color_bonus" and contains(text(),"积分")]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="保种积分",
|
||||
),
|
||||
),
|
||||
(
|
||||
"my_level_rule",
|
||||
models.CharField(
|
||||
default='//span[@class="medium"]/span[@class="nowrap"]/a[contains(@class,"_Name")]/@class',
|
||||
max_length=128,
|
||||
verbose_name="用户等级",
|
||||
),
|
||||
),
|
||||
(
|
||||
"my_hr_rule",
|
||||
models.CharField(
|
||||
default="//tr[14]/td[2]/a/text()",
|
||||
max_length=128,
|
||||
verbose_name="H&R",
|
||||
),
|
||||
),
|
||||
(
|
||||
"leech_rule",
|
||||
models.CharField(
|
||||
default='//img[@class="arrowdown"]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="下载数量",
|
||||
),
|
||||
),
|
||||
(
|
||||
"seed_rule",
|
||||
models.CharField(
|
||||
default='//img[@class="arrowup"]/following-sibling::text()[1]',
|
||||
max_length=128,
|
||||
verbose_name="做种数量",
|
||||
),
|
||||
),
|
||||
(
|
||||
"record_count_rule",
|
||||
models.CharField(
|
||||
default="/html/body/b/text()",
|
||||
max_length=128,
|
||||
verbose_name="种子记录数",
|
||||
),
|
||||
),
|
||||
(
|
||||
"seed_vol_rule",
|
||||
models.CharField(
|
||||
default="//tr/td[3]",
|
||||
help_text="需对数据做处理",
|
||||
max_length=128,
|
||||
verbose_name="做种大小",
|
||||
),
|
||||
),
|
||||
(
|
||||
"mailbox_rule",
|
||||
models.CharField(
|
||||
default='//a[@href="messages.php"]/following-sibling::text()[1]',
|
||||
help_text="获取新邮件",
|
||||
max_length=128,
|
||||
verbose_name="邮件规则",
|
||||
),
|
||||
),
|
||||
(
|
||||
"hash_rule",
|
||||
models.CharField(
|
||||
default='//tr[11]//td[@class="no_border_wide"][2]/text()',
|
||||
max_length=128,
|
||||
verbose_name="种子HASH",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "站点信息",
|
||||
"verbose_name_plural": "站点信息",
|
||||
"ordering": ["name"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="TorrentInfo",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(default="", max_length=256, verbose_name="种子名称"),
|
||||
),
|
||||
(
|
||||
"title",
|
||||
models.CharField(default="", max_length=256, verbose_name="标题"),
|
||||
),
|
||||
(
|
||||
"category",
|
||||
models.CharField(default="", max_length=128, verbose_name="分类"),
|
||||
),
|
||||
(
|
||||
"poster_url",
|
||||
models.URLField(default="", max_length=512, verbose_name="海报链接"),
|
||||
),
|
||||
(
|
||||
"detail_url",
|
||||
models.URLField(default="", max_length=512, verbose_name="种子详情"),
|
||||
),
|
||||
("magnet_url", models.URLField(verbose_name="下载链接")),
|
||||
(
|
||||
"download_url",
|
||||
models.URLField(max_length=255, unique=True, verbose_name="种子链接"),
|
||||
),
|
||||
("size", models.IntegerField(default=0, verbose_name="文件大小")),
|
||||
(
|
||||
"state",
|
||||
models.BooleanField(
|
||||
default=False, max_length=16, verbose_name="推送状态"
|
||||
),
|
||||
),
|
||||
(
|
||||
"save_path",
|
||||
models.FilePathField(
|
||||
default="/downloads/brush", verbose_name="保存路径"
|
||||
),
|
||||
),
|
||||
("hr", models.BooleanField(default=False, verbose_name="H&R")),
|
||||
(
|
||||
"sale_status",
|
||||
models.CharField(default="无促销", max_length=16, verbose_name="优惠状态"),
|
||||
),
|
||||
(
|
||||
"sale_expire",
|
||||
models.CharField(default="无限期", max_length=32, verbose_name="到期时间"),
|
||||
),
|
||||
(
|
||||
"on_release",
|
||||
models.CharField(default="", max_length=32, verbose_name="发布时间"),
|
||||
),
|
||||
(
|
||||
"seeders",
|
||||
models.CharField(default="0", max_length=8, verbose_name="做种人数"),
|
||||
),
|
||||
(
|
||||
"leechers",
|
||||
models.CharField(default="0", max_length=8, verbose_name="下载人数"),
|
||||
),
|
||||
(
|
||||
"completers",
|
||||
models.CharField(default="0", max_length=8, verbose_name="完成人数"),
|
||||
),
|
||||
(
|
||||
"hash_string",
|
||||
models.CharField(
|
||||
default="", max_length=128, verbose_name="Info_hash"
|
||||
),
|
||||
),
|
||||
(
|
||||
"viewfilelist",
|
||||
models.CharField(default="", max_length=128, verbose_name="文件列表"),
|
||||
),
|
||||
(
|
||||
"viewpeerlist",
|
||||
models.FloatField(default=0, max_length=128, verbose_name="下载总进度"),
|
||||
),
|
||||
(
|
||||
"peer_list_speed",
|
||||
models.FloatField(default=0, max_length=128, verbose_name="平均上传速度"),
|
||||
),
|
||||
(
|
||||
"downloader",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="pt_site.downloader",
|
||||
verbose_name="下载器",
|
||||
),
|
||||
),
|
||||
(
|
||||
"site",
|
||||
models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="pt_site.site",
|
||||
verbose_name="所属站点",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "种子管理", "verbose_name_plural": "种子管理",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SiteStatus",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"uploaded",
|
||||
models.CharField(default="0", max_length=16, verbose_name="上传量"),
|
||||
),
|
||||
(
|
||||
"downloaded",
|
||||
models.CharField(default="0", max_length=16, verbose_name="下载量"),
|
||||
),
|
||||
("ratio", models.FloatField(default=0, verbose_name="分享率")),
|
||||
("my_sp", models.FloatField(default=0, verbose_name="魔力值")),
|
||||
("my_bonus", models.FloatField(default=0, verbose_name="做种积分")),
|
||||
("seed_vol", models.IntegerField(default=0, verbose_name="做种体积")),
|
||||
(
|
||||
"site",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="pt_site.mysite",
|
||||
verbose_name="站点名称",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "我的数据", "verbose_name_plural": "我的数据",},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="SignIn",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"sign_in_today",
|
||||
models.BooleanField(default=False, verbose_name="签到"),
|
||||
),
|
||||
(
|
||||
"site",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="pt_site.mysite",
|
||||
verbose_name="站点名称",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"verbose_name": "签到", "verbose_name_plural": "签到",},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="mysite",
|
||||
name="site",
|
||||
field=models.OneToOneField(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="pt_site.site",
|
||||
verbose_name="站点",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -1,8 +1,8 @@
|
||||
# Create your views here.
|
||||
import logging
|
||||
import time
|
||||
from concurrent.futures.thread import ThreadPoolExecutor
|
||||
|
||||
import time
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from django_apscheduler.jobstores import DjangoJobStore
|
||||
|
||||
|
||||
Reference in New Issue
Block a user