podflow 20250415.1__py3-none-any.whl → 20250417__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- podflow/__init__.py +1 -1
- podflow/bilibili/build.py +9 -3
- podflow/bilibili/get.py +81 -17
- podflow/httpfs/progress_bar.py +32 -0
- podflow/main_podcast.py +28 -36
- podflow/makeup/make_up_file.py +3 -6
- podflow/message/create_main_rss.py +3 -8
- podflow/message/get_original_rss.py +1 -14
- podflow/message/get_youtube_and_bilibili_video_format.py +2 -4
- podflow/message/optimize_download.py +2 -10
- podflow/message/update_youtube_bilibili_rss.py +3 -6
- podflow/templates/index.html +5 -1
- podflow/upload/linked_client.py +2 -0
- podflow/youtube/build.py +6 -1
- podflow/youtube/get.py +12 -14
- {podflow-20250415.1.dist-info → podflow-20250417.dist-info}/METADATA +3 -1
- {podflow-20250415.1.dist-info → podflow-20250417.dist-info}/RECORD +20 -19
- {podflow-20250415.1.dist-info → podflow-20250417.dist-info}/WHEEL +0 -0
- {podflow-20250415.1.dist-info → podflow-20250417.dist-info}/entry_points.txt +0 -0
- {podflow-20250415.1.dist-info → podflow-20250417.dist-info}/top_level.txt +0 -0
podflow/__init__.py
CHANGED
podflow/bilibili/build.py
CHANGED
@@ -6,11 +6,10 @@ import html
|
|
6
6
|
import contextlib
|
7
7
|
from datetime import datetime, timezone
|
8
8
|
from podflow import gVar
|
9
|
-
from podflow.message.xml_rss import xml_rss
|
10
|
-
from podflow.basic.file_save import file_save
|
11
9
|
from podflow.message.xml_item import xml_item
|
12
10
|
from podflow.bilibili.get import get_bilibili_cid
|
13
11
|
from podflow.message.format_time import format_time
|
12
|
+
from podflow.httpfs.progress_bar import progress_bar
|
14
13
|
from podflow.basic.get_file_list import get_file_list
|
15
14
|
from podflow.message.xml_original_item import xml_original_item
|
16
15
|
|
@@ -23,6 +22,7 @@ def get_items_list(
|
|
23
22
|
items_counts,
|
24
23
|
output_dir,
|
25
24
|
items_list,
|
25
|
+
ratio_part,
|
26
26
|
):
|
27
27
|
pubDate = datetime.fromtimestamp(item["created"], timezone.utc).strftime(
|
28
28
|
"%Y-%m-%dT%H:%M:%S%z"
|
@@ -63,6 +63,7 @@ def get_items_list(
|
|
63
63
|
title_change,
|
64
64
|
)
|
65
65
|
items_list.append(f"{xml_item_text}<!-- {output_dir} -->")
|
66
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
66
67
|
elif guid_edgeinfos and items_counts[guid] == len(guid_edgeinfos):
|
67
68
|
cid_edgeinfos = {
|
68
69
|
guid_edgeinfo["cid"]: guid_edgeinfo["title"]
|
@@ -100,6 +101,7 @@ def get_items_list(
|
|
100
101
|
title_change,
|
101
102
|
)
|
102
103
|
items_list.append(f"{xml_item_text}<!-- {output_dir} -->")
|
104
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
103
105
|
else:
|
104
106
|
xml_item_text = xml_item(
|
105
107
|
item["bvid"],
|
@@ -113,10 +115,11 @@ def get_items_list(
|
|
113
115
|
title_change,
|
114
116
|
)
|
115
117
|
items_list.append(f"{xml_item_text}<!-- {output_dir} -->")
|
118
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
116
119
|
|
117
120
|
|
118
121
|
# 生成哔哩哔哩对应channel的需更新的items模块
|
119
|
-
def bilibili_xml_items(output_dir):
|
122
|
+
def bilibili_xml_items(output_dir, ratio_part):
|
120
123
|
channelid_bilibili_value = gVar.channelid_bilibili[
|
121
124
|
gVar.channelid_bilibili_ids[output_dir]
|
122
125
|
]
|
@@ -141,6 +144,7 @@ def bilibili_xml_items(output_dir):
|
|
141
144
|
items_counts,
|
142
145
|
output_dir,
|
143
146
|
items_list,
|
147
|
+
ratio_part,
|
144
148
|
)
|
145
149
|
if item["description"] and item["description"][0] == "『":
|
146
150
|
original_judgment = False
|
@@ -162,6 +166,7 @@ def bilibili_xml_items(output_dir):
|
|
162
166
|
items_list.append(
|
163
167
|
f"{xml_original_item(xml, channelid_title, original_judgment, title_change)}<!-- {output_dir} -->"
|
164
168
|
)
|
169
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
165
170
|
xml_num += 1
|
166
171
|
if xml_num >= entry_count:
|
167
172
|
break
|
@@ -182,6 +187,7 @@ def bilibili_xml_items(output_dir):
|
|
182
187
|
items_counts,
|
183
188
|
output_dir,
|
184
189
|
items_list,
|
190
|
+
ratio_part,
|
185
191
|
)
|
186
192
|
# 生成对应xml
|
187
193
|
description = html.escape(output_dir_value["content"]["sign"])
|
podflow/bilibili/get.py
CHANGED
@@ -12,6 +12,7 @@ from hashlib import md5
|
|
12
12
|
from functools import reduce
|
13
13
|
from podflow import gVar
|
14
14
|
from podflow.basic.http_client import http_client
|
15
|
+
from podflow.httpfs.progress_bar import progress_bar
|
15
16
|
from podflow.basic.get_file_list import get_file_list
|
16
17
|
from podflow.basic.list_merge_tidy import list_merge_tidy
|
17
18
|
|
@@ -19,10 +20,70 @@ from podflow.basic.list_merge_tidy import list_merge_tidy
|
|
19
20
|
# WBI签名模块
|
20
21
|
def WBI_signature(params={}, img_key="", sub_key=""):
|
21
22
|
mixinKeyEncTab = [
|
22
|
-
46,
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
46,
|
24
|
+
47,
|
25
|
+
18,
|
26
|
+
2,
|
27
|
+
53,
|
28
|
+
8,
|
29
|
+
23,
|
30
|
+
32,
|
31
|
+
15,
|
32
|
+
50,
|
33
|
+
10,
|
34
|
+
31,
|
35
|
+
58,
|
36
|
+
3,
|
37
|
+
45,
|
38
|
+
35,
|
39
|
+
27,
|
40
|
+
43,
|
41
|
+
5,
|
42
|
+
49,
|
43
|
+
33,
|
44
|
+
9,
|
45
|
+
42,
|
46
|
+
19,
|
47
|
+
29,
|
48
|
+
28,
|
49
|
+
14,
|
50
|
+
39,
|
51
|
+
12,
|
52
|
+
38,
|
53
|
+
41,
|
54
|
+
13,
|
55
|
+
37,
|
56
|
+
48,
|
57
|
+
7,
|
58
|
+
16,
|
59
|
+
24,
|
60
|
+
55,
|
61
|
+
40,
|
62
|
+
61,
|
63
|
+
26,
|
64
|
+
17,
|
65
|
+
0,
|
66
|
+
1,
|
67
|
+
60,
|
68
|
+
51,
|
69
|
+
30,
|
70
|
+
4,
|
71
|
+
22,
|
72
|
+
25,
|
73
|
+
54,
|
74
|
+
21,
|
75
|
+
56,
|
76
|
+
59,
|
77
|
+
6,
|
78
|
+
63,
|
79
|
+
57,
|
80
|
+
62,
|
81
|
+
11,
|
82
|
+
36,
|
83
|
+
20,
|
84
|
+
34,
|
85
|
+
44,
|
86
|
+
52,
|
26
87
|
]
|
27
88
|
|
28
89
|
def getMixinKey(orig: str):
|
@@ -302,7 +363,9 @@ def bilibili_json_update(bilibili_key, bilibili_value):
|
|
302
363
|
else:
|
303
364
|
return bilibili_card_json["code"]
|
304
365
|
# 查询哔哩哔哩用户投稿视频明细
|
305
|
-
for num in range(
|
366
|
+
for num in range(
|
367
|
+
math.ceil(gVar.channelid_bilibili[bilibili_value]["update_size"] / 25)
|
368
|
+
):
|
306
369
|
num += 1
|
307
370
|
bilibili_entry, bilibili_list = get_bilibili_vlist(
|
308
371
|
bilibili_key,
|
@@ -325,6 +388,7 @@ def bilibili_rss_update(
|
|
325
388
|
rss_update_lock,
|
326
389
|
):
|
327
390
|
bilibili_content_bvid_backward = [] # 初始化向后更新的内容列表
|
391
|
+
last_size = gVar.channelid_bilibili[bilibili_value]["last_size"]
|
328
392
|
# 获取已下载文件列表
|
329
393
|
bilibili_content_bvid_original = get_file_list(
|
330
394
|
bilibili_key, gVar.channelid_bilibili[bilibili_value]["media"]
|
@@ -358,13 +422,13 @@ def bilibili_rss_update(
|
|
358
422
|
"content": bilibili_space,
|
359
423
|
"type": "int",
|
360
424
|
} # 设置为整型内容
|
361
|
-
|
425
|
+
bilibili_space_new = guids
|
362
426
|
elif bilibili_space is None:
|
363
427
|
gVar.channelid_bilibili_rss[bilibili_key] = {
|
364
428
|
"content": bilibili_space_original,
|
365
429
|
"type": "json",
|
366
430
|
} # 使用原始json内容
|
367
|
-
|
431
|
+
bilibili_space_new = guids
|
368
432
|
else:
|
369
433
|
gVar.channelid_bilibili_rss[bilibili_key] = {
|
370
434
|
"content": bilibili_space,
|
@@ -377,7 +441,6 @@ def bilibili_rss_update(
|
|
377
441
|
bilibili_content_bvid = bilibili_space["list"][
|
378
442
|
: gVar.channelid_bilibili[bilibili_value]["update_size"]
|
379
443
|
]
|
380
|
-
gVar.xmls_quantity[bilibili_key]["update"] = len(bilibili_content_bvid)
|
381
444
|
bilibili_space_new = list_merge_tidy(
|
382
445
|
bilibili_content_bvid, guids
|
383
446
|
) # 合并新内容和原内容
|
@@ -387,7 +450,9 @@ def bilibili_rss_update(
|
|
387
450
|
for exclude in bilibili_content_bvid
|
388
451
|
if exclude not in bilibili_content_bvid_original # 筛选新增的内容
|
389
452
|
]:
|
390
|
-
gVar.channelid_bilibili_ids_update[bilibili_key] =
|
453
|
+
gVar.channelid_bilibili_ids_update[bilibili_key] = (
|
454
|
+
bilibili_value # 需要更新ID
|
455
|
+
)
|
391
456
|
gVar.bilibili_content_bvid_update[bilibili_key] = (
|
392
457
|
bilibili_content_bvid # 更新新增内容
|
393
458
|
)
|
@@ -395,9 +460,9 @@ def bilibili_rss_update(
|
|
395
460
|
if (
|
396
461
|
gVar.channelid_bilibili[bilibili_value]["BackwardUpdate"] and guids
|
397
462
|
): # 如果设置了向后更新
|
398
|
-
backward_update_size =
|
399
|
-
|
400
|
-
|
463
|
+
backward_update_size = last_size - len(
|
464
|
+
bilibili_space_new
|
465
|
+
) # 计算需要向后更新的数量
|
401
466
|
if backward_update_size > 0:
|
402
467
|
backward_update_size = min(
|
403
468
|
backward_update_size,
|
@@ -483,10 +548,9 @@ def bilibili_rss_update(
|
|
483
548
|
gVar.bilibili_content_bvid_backward_update[bilibili_key] = (
|
484
549
|
bilibili_content_bvid_backward # 更新最终的向后更新内容
|
485
550
|
)
|
486
|
-
gVar.xmls_quantity[bilibili_key]
|
551
|
+
gVar.xmls_quantity[bilibili_key] = min(last_size, len(bilibili_space_new)) + len(
|
552
|
+
bilibili_content_bvid_backward
|
553
|
+
)
|
487
554
|
# 更新进度条
|
488
555
|
with rss_update_lock:
|
489
|
-
|
490
|
-
if ratio > 0.09:
|
491
|
-
ratio = 0.09
|
492
|
-
gVar.index_message["schedule"][1] = ratio
|
556
|
+
progress_bar(ratio_thread, 0.09)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# podflow/httpfs/progress_bar.py
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
import random
|
5
|
+
from podflow import gVar
|
6
|
+
|
7
|
+
|
8
|
+
def progress_update(
|
9
|
+
ratio,
|
10
|
+
added=False,
|
11
|
+
refresh=0,
|
12
|
+
num=0
|
13
|
+
):
|
14
|
+
state = {
|
15
|
+
1: "准备中",
|
16
|
+
2: "构建中",
|
17
|
+
3: "已完成",
|
18
|
+
}
|
19
|
+
if num != 0:
|
20
|
+
ratio +=random.uniform(0, num)
|
21
|
+
if added:
|
22
|
+
ratio += gVar.index_message["schedule"][1]
|
23
|
+
gVar.index_message["schedule"][1] = ratio
|
24
|
+
if refresh != 0:
|
25
|
+
gVar.index_message["schedule"][0] = state[refresh]
|
26
|
+
|
27
|
+
|
28
|
+
def progress_bar(ratio_part, maximum):
|
29
|
+
ratio = gVar.index_message["schedule"][1] + ratio_part
|
30
|
+
if ratio > maximum:
|
31
|
+
ratio = maximum
|
32
|
+
progress_update(ratio)
|
podflow/main_podcast.py
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
import sys
|
5
5
|
import json
|
6
6
|
import time
|
7
|
-
import random
|
8
7
|
import urllib
|
9
8
|
import subprocess
|
10
9
|
|
@@ -18,6 +17,7 @@ from podflow.basic.time_print import time_print
|
|
18
17
|
# 网络和 HTTP 模块
|
19
18
|
from podflow.httpfs.browser import open_url
|
20
19
|
from podflow.httpfs.port_judge import port_judge
|
20
|
+
from podflow.httpfs.progress_bar import progress_update
|
21
21
|
from podflow.httpfs.app_bottle import bottle_app_instance
|
22
22
|
|
23
23
|
# 下载和视频处理模块
|
@@ -49,8 +49,8 @@ from podflow.makeup.del_makeup_format_fail import del_makeup_format_fail
|
|
49
49
|
from podflow.makeup.make_up_file_format_mod import make_up_file_format_mod
|
50
50
|
|
51
51
|
# 移除模块
|
52
|
-
from podflow.remove.remove_file import remove_file
|
53
52
|
from podflow.remove.remove_dir import remove_dir
|
53
|
+
from podflow.remove.remove_file import remove_file
|
54
54
|
|
55
55
|
# 处理 YouTube 信息模块
|
56
56
|
from podflow.youtube.build import print_fail_youtube
|
@@ -109,32 +109,27 @@ def main_podcast():
|
|
109
109
|
# 主流程
|
110
110
|
while parse.update_num > 0 or parse.update_num == -1: # 循环主更新
|
111
111
|
# 主进度条
|
112
|
-
|
112
|
+
progress_update(0, refresh=1)
|
113
113
|
# 暂停进程打印
|
114
114
|
gVar.server_process_print_flag[0] = "pause"
|
115
115
|
# 获取YouTube cookie
|
116
116
|
gVar.youtube_cookie = get_youtube_cookie(gVar.channelid_youtube_ids_original)
|
117
|
-
|
117
|
+
progress_update(0.01 ,num=0.0049)
|
118
118
|
# 更新哔哩哔哩data
|
119
119
|
gVar.channelid_bilibili_ids, gVar.bilibili_data = get_bilibili_data(
|
120
120
|
gVar.channelid_bilibili_ids_original
|
121
121
|
)
|
122
|
-
|
122
|
+
progress_update(0.02, num=0.0049)
|
123
123
|
# 恢复进程打印
|
124
124
|
bottle_app_instance.cherry_print()
|
125
125
|
# 获取原始xml字典和rss文本
|
126
|
-
(
|
127
|
-
|
128
|
-
gVar.hash_rss_original,
|
129
|
-
gVar.xmls_original_fail,
|
130
|
-
gVar.xmls_quantity,
|
131
|
-
) = get_original_rss()
|
132
|
-
gVar.index_message["schedule"][1] = 0.025 + random.uniform(0, 0.0024)
|
126
|
+
gVar.xmls_original, gVar.hash_rss_original, gVar.xmls_original_fail = get_original_rss()
|
127
|
+
progress_update(0.025, num=-0.0024)
|
133
128
|
# 暂停进程打印
|
134
129
|
gVar.server_process_print_flag[0] = "pause"
|
135
130
|
# 连接上传服务器
|
136
131
|
upload_url = connect_upload_server()
|
137
|
-
|
132
|
+
progress_update(0.03, num=0.0024)
|
138
133
|
# 恢复进程打印
|
139
134
|
bottle_app_instance.cherry_print()
|
140
135
|
# 登陆上传服务器
|
@@ -144,20 +139,20 @@ def main_podcast():
|
|
144
139
|
gVar.config["upload"] = False
|
145
140
|
else:
|
146
141
|
gVar.config["upload"] = False
|
147
|
-
|
142
|
+
progress_update(0.035, num=0.0024)
|
148
143
|
# 初始化原始上传信息
|
149
144
|
get_upload_original()
|
150
|
-
|
145
|
+
progress_update(0.04)
|
151
146
|
# 更新Youtube和哔哩哔哩频道xml
|
152
147
|
update_youtube_bilibili_rss()
|
153
|
-
|
148
|
+
progress_update(0.1)
|
154
149
|
# 判断是否有更新内容
|
155
150
|
if gVar.channelid_youtube_ids_update or gVar.channelid_bilibili_ids_update:
|
156
151
|
gVar.update_generate_rss = True
|
157
152
|
if gVar.update_generate_rss:
|
158
153
|
# 根据日出日落修改封面(只适用原封面)
|
159
154
|
channge_icon()
|
160
|
-
|
155
|
+
progress_update(0.11, num=0.0049)
|
161
156
|
# 输出需要更新的信息
|
162
157
|
update_information_display(
|
163
158
|
gVar.channelid_youtube_ids_update,
|
@@ -171,12 +166,12 @@ def main_podcast():
|
|
171
166
|
gVar.bilibili_content_bvid_backward_update,
|
172
167
|
"BiliBili",
|
173
168
|
)
|
174
|
-
|
169
|
+
progress_update(0.12)
|
175
170
|
# 暂停进程打印
|
176
171
|
gVar.server_process_print_flag[0] = "pause"
|
177
172
|
# 获取视频格式信息
|
178
173
|
get_video_format()
|
179
|
-
|
174
|
+
progress_update(0.199)
|
180
175
|
# 恢复进程打印
|
181
176
|
bottle_app_instance.cherry_print()
|
182
177
|
# 优化下载顺序
|
@@ -184,63 +179,63 @@ def main_podcast():
|
|
184
179
|
# 删除中断下载的媒体文件
|
185
180
|
if gVar.config["delete_incompletement"]:
|
186
181
|
delete_part(gVar.channelid_youtube_ids | gVar.channelid_bilibili_ids)
|
187
|
-
|
182
|
+
progress_update(0.20, refresh=2)
|
188
183
|
# 暂停进程打印
|
189
184
|
gVar.server_process_print_flag[0] = "pause"
|
190
185
|
# 下载并构建YouTube和哔哩哔哩视频
|
191
186
|
download_and_build()
|
192
|
-
|
187
|
+
progress_update(0.8)
|
193
188
|
# 添加新媒体至上传列表
|
194
189
|
add_upload()
|
195
|
-
|
190
|
+
progress_update(0.81, num=0.0049)
|
196
191
|
# 恢复进程打印
|
197
192
|
bottle_app_instance.cherry_print()
|
198
193
|
# 打印无法保留原节目信息
|
199
194
|
original_rss_fail_print(gVar.xmls_original_fail)
|
200
|
-
|
195
|
+
progress_update(0.82, num=0.0049)
|
201
196
|
# 打印无法获取youtube信息
|
202
197
|
print_fail_youtube()
|
203
|
-
|
198
|
+
progress_update(0.83, num=0.0049)
|
204
199
|
if gVar.config["remove_media"]:
|
205
200
|
# 删除不在rss中的媒体文件
|
206
201
|
remove_file()
|
207
202
|
# 删除已抛弃的媒体文件夹
|
208
203
|
remove_dir()
|
209
|
-
|
204
|
+
progress_update(0.84)
|
210
205
|
# 补全缺失媒体文件到字典
|
211
206
|
make_up_file()
|
212
|
-
|
207
|
+
progress_update(0.85)
|
213
208
|
# 按参数获取需要补全的最大个数
|
214
209
|
gVar.make_up_file_format = split_dict(
|
215
210
|
gVar.make_up_file_format,
|
216
211
|
gVar.config["completion_count"],
|
217
212
|
True,
|
218
213
|
)[0]
|
219
|
-
|
214
|
+
progress_update(0.86, num=0.0049)
|
220
215
|
# 暂停进程打印
|
221
216
|
gVar.server_process_print_flag[0] = "pause"
|
222
217
|
# 补全在rss中缺失的媒体格式信息
|
223
218
|
make_up_file_format_mod()
|
224
|
-
|
219
|
+
progress_update(0.90, num=0.0049)
|
225
220
|
# 恢复进程打印
|
226
221
|
bottle_app_instance.cherry_print()
|
227
|
-
|
222
|
+
progress_update(0.91, num=0.0049)
|
228
223
|
# 删除无法补全的媒体
|
229
224
|
del_makeup_format_fail()
|
230
|
-
|
225
|
+
progress_update(0.92, num=0.0049)
|
231
226
|
# 暂停进程打印
|
232
227
|
gVar.server_process_print_flag[0] = "pause"
|
233
228
|
# 保存rss文件模块
|
234
229
|
save_rss()
|
235
|
-
|
230
|
+
progress_update(0.93, num=0.0049)
|
236
231
|
# 下载补全Youtube和哔哩哔哩视频模块
|
237
232
|
make_up_file_mod()
|
238
|
-
|
233
|
+
progress_update(0.99, num=0.0099)
|
239
234
|
# 恢复进程打印
|
240
235
|
bottle_app_instance.cherry_print()
|
241
236
|
# 更新并保存上传列表
|
242
237
|
update_upload()
|
243
|
-
|
238
|
+
progress_update(1, refresh=3)
|
244
239
|
else:
|
245
240
|
time_print("频道无更新内容")
|
246
241
|
# 清空变量内数据
|
@@ -289,6 +284,3 @@ def main_podcast():
|
|
289
284
|
# 关闭CherryPy服务器
|
290
285
|
time_print("Podflow运行结束")
|
291
286
|
cherrypy.engine.exit()
|
292
|
-
|
293
|
-
from podflow.basic.file_save import file_save
|
294
|
-
file_save(gVar.video_id_update_format,"video_id_update_format.json")
|
podflow/makeup/make_up_file.py
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
import os
|
5
5
|
from podflow import gVar
|
6
|
+
from podflow.httpfs.progress_bar import progress_bar
|
6
7
|
|
7
8
|
|
8
9
|
# 补全缺失媒体文件到字典模块
|
@@ -36,8 +37,7 @@ def make_up_file():
|
|
36
37
|
video_id_format["quality"] = video_quality
|
37
38
|
gVar.make_up_file_format[main] = video_id_format
|
38
39
|
# 更新进度条
|
39
|
-
|
40
|
-
gVar.index_message["schedule"][1] = ratio
|
40
|
+
progress_bar(ratio_part, 0.85)
|
41
41
|
|
42
42
|
for output_dir, name in channelid_bilibili_ids.items():
|
43
43
|
bilibili_os_list = os.listdir(f"channel_audiovisual/{output_dir}")
|
@@ -61,7 +61,4 @@ def make_up_file():
|
|
61
61
|
video_id_format["quality"] = video_quality
|
62
62
|
gVar.make_up_file_format[main] = video_id_format
|
63
63
|
# 更新进度条
|
64
|
-
|
65
|
-
if ratio > 0.85:
|
66
|
-
ratio = 0.85
|
67
|
-
gVar.index_message["schedule"][1] = ratio
|
64
|
+
progress_bar(ratio_part, 0.85)
|
@@ -29,7 +29,7 @@ def create_main_rss():
|
|
29
29
|
}
|
30
30
|
all_channelid = list(gVar.all_items.keys())
|
31
31
|
|
32
|
-
ratio_part = 0.6 /
|
32
|
+
ratio_part = 0.6 / sum(gVar.xmls_quantity.values()) if all_channelid else 0
|
33
33
|
|
34
34
|
while all_channelid:
|
35
35
|
for index, output_dir in enumerate(all_channelid):
|
@@ -39,7 +39,7 @@ def create_main_rss():
|
|
39
39
|
if output_dir in channelid_youtube_ids:
|
40
40
|
output_dir_youtube = channelid_youtube_ids[output_dir]
|
41
41
|
channelid_youtube_value = gVar.channelid_youtube[output_dir_youtube]
|
42
|
-
items = youtube_xml_items(output_dir)
|
42
|
+
items = youtube_xml_items(output_dir, [ratio_part, 0.8])
|
43
43
|
items["DisplayRSSaddress"] = channelid_youtube_value[
|
44
44
|
"DisplayRSSaddress"
|
45
45
|
]
|
@@ -56,7 +56,7 @@ def create_main_rss():
|
|
56
56
|
channelid_bilibili_value = gVar.channelid_bilibili[
|
57
57
|
output_dir_bilibili
|
58
58
|
]
|
59
|
-
items = bilibili_xml_items(output_dir)
|
59
|
+
items = bilibili_xml_items(output_dir, [ratio_part, 0.8])
|
60
60
|
items["DisplayRSSaddress"] = channelid_bilibili_value[
|
61
61
|
"DisplayRSSaddress"
|
62
62
|
]
|
@@ -68,10 +68,5 @@ def create_main_rss():
|
|
68
68
|
"bilibili", items["items"]
|
69
69
|
)
|
70
70
|
gVar.all_items[output_dir] = items
|
71
|
-
# 主进度条更新
|
72
|
-
ratio = gVar.index_message["schedule"][1] + ratio_part
|
73
|
-
if ratio > 0.8:
|
74
|
-
ratio = 0.8
|
75
|
-
gVar.index_message["schedule"][1] = ratio
|
76
71
|
del all_channelid[index]
|
77
72
|
break
|
@@ -30,7 +30,6 @@ def rss_create_hash(data):
|
|
30
30
|
# 获取原始xml模块
|
31
31
|
def get_original_rss():
|
32
32
|
xmls_original_fail = []
|
33
|
-
xmls_quantity = {}
|
34
33
|
# 获取原始总xml文件
|
35
34
|
try:
|
36
35
|
with open(
|
@@ -62,21 +61,9 @@ def get_original_rss():
|
|
62
61
|
f"<!-- {{{channelid_key}}} -->\n"
|
63
62
|
)[1]
|
64
63
|
get_xmls_original[channelid_key] = get_xmls_original_key
|
65
|
-
xmls_quantity[channelid_key] = {
|
66
|
-
"original": len(
|
67
|
-
get_xmls_original_key.split(f"<!-- {channelid_key} -->")
|
68
|
-
)
|
69
|
-
}
|
70
64
|
except FileNotFoundError: # 文件不存在直接更新
|
71
65
|
xmls_original_fail.append(channelid_key)
|
72
|
-
xmls_quantity[channelid_key] = {"original": 0}
|
73
|
-
else:
|
74
|
-
xmls_quantity[channelid_key] = {
|
75
|
-
"original": len(
|
76
|
-
get_xmls_original[channelid_key].split(f"<!-- {channelid_key} -->")
|
77
|
-
)
|
78
|
-
}
|
79
66
|
# 生成原始rss的哈希值
|
80
67
|
hash_rss_original = rss_create_hash(rss_original)
|
81
68
|
|
82
|
-
return get_xmls_original, hash_rss_original, xmls_original_fail
|
69
|
+
return get_xmls_original, hash_rss_original, xmls_original_fail
|
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
from podflow import gVar
|
5
5
|
from podflow.basic.write_log import write_log
|
6
|
+
from podflow.httpfs.progress_bar import progress_bar
|
6
7
|
from podflow.message.media_format import media_format
|
7
8
|
|
8
9
|
|
@@ -107,7 +108,4 @@ def get_youtube_and_bilibili_video_format(
|
|
107
108
|
del gVar.video_id_update_format[id_num]
|
108
109
|
with ratio_part_lock:
|
109
110
|
# 主进度条更新
|
110
|
-
|
111
|
-
if ratio > 0.199:
|
112
|
-
ratio = 0.199
|
113
|
-
gVar.index_message["schedule"][1] = ratio
|
111
|
+
progress_bar(ratio_part, 0.199)
|
@@ -10,18 +10,10 @@ from podflow.basic.time_print import time_print
|
|
10
10
|
def optimize_download():
|
11
11
|
xmls_quantity = gVar.xmls_quantity
|
12
12
|
video_id_update_format = gVar.video_id_update_format
|
13
|
-
channel_sums = {}
|
14
13
|
sorted_video_id_update_format = {}
|
15
|
-
time_print("开始计算频道媒体数量")
|
16
|
-
# 计算每个频道的总和
|
17
|
-
for channel_id, values in xmls_quantity.items():
|
18
|
-
total = values["original"] + values["update"] + values["backward"]
|
19
|
-
channel_sums[channel_id] = total
|
20
|
-
gVar.xmls_quantity[channel_id]["total"] = total
|
21
|
-
time_print("开始对频道进行排序")
|
22
|
-
# 按总和从大到小排序
|
23
|
-
sorted_channels = sorted(channel_sums.items(), key=lambda x: x[1], reverse=True)
|
24
14
|
time_print("开始优化下载顺序")
|
15
|
+
# 按总和从大到小排序
|
16
|
+
sorted_channels = sorted(xmls_quantity.items(), key=lambda x: x[1], reverse=True)
|
25
17
|
# 根据总和排序数据
|
26
18
|
for channel_id, _ in sorted_channels:
|
27
19
|
for key, value in video_id_update_format.items():
|
@@ -9,6 +9,7 @@ from podflow.basic.write_log import write_log
|
|
9
9
|
from podflow.youtube.get import youtube_rss_update
|
10
10
|
from podflow.basic.folder_build import folder_build
|
11
11
|
from podflow.bilibili.get import bilibili_rss_update
|
12
|
+
from podflow.httpfs.progress_bar import progress_bar
|
12
13
|
|
13
14
|
|
14
15
|
# 更新Youtube和哔哩哔哩频道xml多线程模块
|
@@ -115,8 +116,7 @@ def update_youtube_bilibili_rss():
|
|
115
116
|
del gVar.channelid_youtube_ids[youtube_key]
|
116
117
|
write_log(f"YouTube频道 {youtube_value} 无法更新")
|
117
118
|
# 更新进度条
|
118
|
-
|
119
|
-
gVar.index_message["schedule"][1] = ratio
|
119
|
+
progress_bar(ratio_part, 0.1)
|
120
120
|
|
121
121
|
# 更新哔哩哔哩频道
|
122
122
|
for bilibili_key, bilibili_value in gVar.channelid_bilibili_ids.copy().items():
|
@@ -136,7 +136,4 @@ def update_youtube_bilibili_rss():
|
|
136
136
|
# 构建频道文件夹
|
137
137
|
folder_build(bilibili_key, "channel_audiovisual")
|
138
138
|
# 更新进度条
|
139
|
-
|
140
|
-
if ratio > 0.1:
|
141
|
-
ratio = 0.1
|
142
|
-
gVar.index_message["schedule"][1] = ratio
|
139
|
+
progress_bar(ratio_part, 0.1)
|
podflow/templates/index.html
CHANGED
@@ -176,6 +176,10 @@
|
|
176
176
|
}
|
177
177
|
.button-container {
|
178
178
|
margin-top: 10px;
|
179
|
+
display: flex;
|
180
|
+
justify-content: center; /* 水平居中 */
|
181
|
+
flex-wrap: wrap; /* 换行 */
|
182
|
+
gap: 10px; /* 按钮间距 */
|
179
183
|
}
|
180
184
|
button {
|
181
185
|
background-color: var(--button-bg);
|
@@ -564,7 +568,7 @@
|
|
564
568
|
// 启动消息轮询
|
565
569
|
function startMessagePolling() {
|
566
570
|
getMessages();
|
567
|
-
pollingTimer = setInterval(getMessages,
|
571
|
+
pollingTimer = setInterval(getMessages, 250);
|
568
572
|
}
|
569
573
|
|
570
574
|
// 停止消息轮询
|
podflow/upload/linked_client.py
CHANGED
@@ -8,6 +8,7 @@ from datetime import datetime
|
|
8
8
|
from podflow import gVar
|
9
9
|
from podflow.upload.time_key import time_key
|
10
10
|
from podflow.basic.time_print import time_print
|
11
|
+
from podflow.httpfs.progress_bar import progress_update
|
11
12
|
|
12
13
|
|
13
14
|
BROADCAST_PORT = 37001
|
@@ -75,6 +76,7 @@ def connect_upload_server():
|
|
75
76
|
time_print(" " * terminal_width, True, True, False)
|
76
77
|
# 打印尝试广播端口
|
77
78
|
time_print(f"{time_text}尝试广播端口{current_port}...", True, True, False)
|
79
|
+
progress_update(0.0005, added=True)
|
78
80
|
servers = discover_server(current_port, TIMEOUT)
|
79
81
|
if servers:
|
80
82
|
break
|
podflow/youtube/build.py
CHANGED
@@ -12,6 +12,7 @@ from podflow.message.xml_item import xml_item
|
|
12
12
|
from podflow.basic.time_print import time_print
|
13
13
|
from podflow.basic.http_client import http_client
|
14
14
|
from podflow.message.format_time import format_time
|
15
|
+
from podflow.httpfs.progress_bar import progress_bar
|
15
16
|
from podflow.basic.get_html_dict import get_html_dict
|
16
17
|
from podflow.message.xml_original_item import xml_original_item
|
17
18
|
|
@@ -184,7 +185,7 @@ def get_xml_item(guid, item, channelid_title, title_change, output_dir):
|
|
184
185
|
|
185
186
|
|
186
187
|
# 生成YouTube对应channel的需更新的items模块
|
187
|
-
def youtube_xml_items(output_dir):
|
188
|
+
def youtube_xml_items(output_dir, ratio_part):
|
188
189
|
items_list = [f"<!-- {output_dir} -->"]
|
189
190
|
entry_num = 0
|
190
191
|
original_judgment = True
|
@@ -214,6 +215,7 @@ def youtube_xml_items(output_dir):
|
|
214
215
|
guid, item, channelid_title, title_change, output_dir
|
215
216
|
):
|
216
217
|
items_list.append(f"{xml_item_text}<!-- {output_dir} -->")
|
218
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
217
219
|
if (
|
218
220
|
gVar.video_id_update_format[guid]["description"]
|
219
221
|
and gVar.video_id_update_format[guid]["description"][0] == "『"
|
@@ -233,6 +235,7 @@ def youtube_xml_items(output_dir):
|
|
233
235
|
items_list.append(
|
234
236
|
f"{youtube_xml_item(entry, title_change)}<!-- {output_dir} -->"
|
235
237
|
)
|
238
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
236
239
|
if re.search(r"(?<=<media:description>)『", entry):
|
237
240
|
original_judgment = False
|
238
241
|
entry_num += 1
|
@@ -253,6 +256,7 @@ def youtube_xml_items(output_dir):
|
|
253
256
|
items_list.append(
|
254
257
|
f"{xml_original_item(xml, channelid_title, original_judgment, title_change)}<!-- {output_dir} -->"
|
255
258
|
)
|
259
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
256
260
|
xml_num += 1
|
257
261
|
if xml_num >= entry_count:
|
258
262
|
break
|
@@ -270,6 +274,7 @@ def youtube_xml_items(output_dir):
|
|
270
274
|
output_dir,
|
271
275
|
):
|
272
276
|
items_list.append(f"{backward_xml_item_text}<!-- {output_dir} -->")
|
277
|
+
progress_bar(ratio_part[0], ratio_part[1])
|
273
278
|
# 生成对应xml
|
274
279
|
try:
|
275
280
|
with open(
|
podflow/youtube/get.py
CHANGED
@@ -9,6 +9,7 @@ from podflow import gVar
|
|
9
9
|
from podflow.basic.time_print import time_print
|
10
10
|
from podflow.basic.http_client import http_client
|
11
11
|
from podflow.basic.vary_replace import vary_replace
|
12
|
+
from podflow.httpfs.progress_bar import progress_bar
|
12
13
|
from podflow.basic.get_html_dict import get_html_dict
|
13
14
|
from podflow.basic.list_merge_tidy import list_merge_tidy
|
14
15
|
|
@@ -67,7 +68,9 @@ def get_youtube_html_playlists(
|
|
67
68
|
] # 获取发布时间
|
68
69
|
item[videoid]["image"] = player_Microformat_Renderer["thumbnail"][
|
69
70
|
"thumbnails"
|
70
|
-
][0][
|
71
|
+
][0][
|
72
|
+
"url"
|
73
|
+
] # 获取封面图
|
71
74
|
with contextlib.suppress(KeyError, TypeError, IndexError, ValueError):
|
72
75
|
fail.remove(videoid) # 若成功获取,则从失败列表中移除
|
73
76
|
else:
|
@@ -196,6 +199,8 @@ def youtube_rss_update(
|
|
196
199
|
channelid_youtube = gVar.channelid_youtube
|
197
200
|
channelid_youtube_rss = gVar.channelid_youtube_rss
|
198
201
|
channelid_youtube_ids_update = gVar.channelid_youtube_ids_update
|
202
|
+
youtube_content_ytid_backward = []
|
203
|
+
last_size = channelid_youtube[youtube_value]["last_size"]
|
199
204
|
# 获取已下载媒体名称
|
200
205
|
youtube_media = (
|
201
206
|
("m4a", "mp4") # 根据 channelid_youtube 的媒体类型选择文件格式
|
@@ -314,11 +319,8 @@ def youtube_rss_update(
|
|
314
319
|
except TypeError:
|
315
320
|
youtube_content_ytid = [] # 处理类型错误
|
316
321
|
youtube_content_ytid = youtube_content_ytid[
|
317
|
-
: channelid_youtube[youtube_value][
|
318
|
-
"update_size"
|
319
|
-
] # 限制视频ID数量
|
322
|
+
: channelid_youtube[youtube_value]["update_size"] # 限制视频ID数量
|
320
323
|
]
|
321
|
-
gVar.xmls_quantity[youtube_key]["update"] = len(youtube_content_ytid)
|
322
324
|
youtube_content_new = list_merge_tidy(youtube_content_ytid, guids) # 合并并去重
|
323
325
|
if youtube_content_ytid := [
|
324
326
|
exclude
|
@@ -331,12 +333,9 @@ def youtube_rss_update(
|
|
331
333
|
youtube_content_ytid # 保存更新的视频ID
|
332
334
|
)
|
333
335
|
# 向后更新
|
334
|
-
youtube_content_ytid_backward = []
|
335
336
|
if channelid_youtube[youtube_value]["BackwardUpdate"] and guids:
|
336
337
|
# 计算向后更新的数量
|
337
|
-
backward_update_size =
|
338
|
-
youtube_content_new
|
339
|
-
)
|
338
|
+
backward_update_size = last_size - len(youtube_content_new)
|
340
339
|
if backward_update_size > 0:
|
341
340
|
for _ in range(3):
|
342
341
|
# 获取历史播放列表
|
@@ -373,10 +372,9 @@ def youtube_rss_update(
|
|
373
372
|
gVar.youtube_content_ytid_backward_update[youtube_key] = (
|
374
373
|
youtube_content_ytid_backward # 保存向后更新的ID
|
375
374
|
)
|
376
|
-
gVar.xmls_quantity[youtube_key]
|
375
|
+
gVar.xmls_quantity[youtube_key] = min(last_size, len(youtube_content_new)) + len(
|
376
|
+
youtube_content_ytid_backward
|
377
|
+
)
|
377
378
|
# 更新进度条
|
378
379
|
with rss_update_lock:
|
379
|
-
|
380
|
-
if ratio > 0.09:
|
381
|
-
ratio = 0.09
|
382
|
-
gVar.index_message["schedule"][1] = ratio
|
380
|
+
progress_bar(ratio_thread, 0.09)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: podflow
|
3
|
-
Version:
|
3
|
+
Version: 20250417
|
4
4
|
Summary: A podcast server that includes YouTube and BiliBili
|
5
5
|
Home-page: https://github.com/gruel-zxz/podflow
|
6
6
|
Author: gruel_zxz
|
@@ -33,6 +33,8 @@ Requires-Dist: BeautifulSoup4>=4.13.3
|
|
33
33
|
|
34
34
|
YouTube的cookies需要使用chrome插件导出Netscape格式并保存到channel_data文件夹中
|
35
35
|
|
36
|
+
图形界面请访问 `/index`
|
37
|
+
|
36
38
|
PS:可能存在大量未知bug,改进中并尝试加入抖音……
|
37
39
|
|
38
40
|
### 安装方法
|
@@ -1,8 +1,8 @@
|
|
1
|
-
podflow/__init__.py,sha256=
|
1
|
+
podflow/__init__.py,sha256=RVR-Iyvaawd8g0gc1-lVSCwSW209XVb0gMC-qkoD4us,7332
|
2
2
|
podflow/download_and_build.py,sha256=GKQ1uX8Nuwdhr4wgnGr3jP1Mu0llRUPFcboQ3S05WkU,671
|
3
3
|
podflow/ffmpeg_judge.py,sha256=wM49pPXOFwFAA_8TKHal5fV6ka9sAA87yGQMDOssvXo,1340
|
4
4
|
podflow/main.py,sha256=Cz2E33-Kcc_1_oxNs4Z1OoqJYhonmClsrtoCW1oQmZA,739
|
5
|
-
podflow/main_podcast.py,sha256=
|
5
|
+
podflow/main_podcast.py,sha256=KyKNn76XpDEUXAa6rj1WzOW9YtbuvSPLvAPGLD4QQIM,11992
|
6
6
|
podflow/main_upload.py,sha256=H_T5KQMYzToqzQbjGQ6DWDGziy8iMnpmf7A1qOStJuo,2296
|
7
7
|
podflow/parse_arguments.py,sha256=h3a7EaRZS04kNMFYbxTW9Ch29KgZ7dyS-yqEEt_etQI,2592
|
8
8
|
podflow/basic/__init__.py,sha256=CAfI6mVQtz7KKbAiTIZ9_IbvaTXeAqxR1U7ov9GDoDo,44
|
@@ -21,8 +21,8 @@ podflow/basic/time_stamp.py,sha256=ubdnw4SjcO0JR5JGatBjAX4sxQ4Ro9AjNuzKFkhqwec,1
|
|
21
21
|
podflow/basic/vary_replace.py,sha256=-TyvZxfak6U7Ak8F87ctYUBpHB2Il6iYZof37lwKjto,211
|
22
22
|
podflow/basic/write_log.py,sha256=wfiNfFuRLCWNLXDRNPVaVsKxwB44xxTiCFJ66g71XmU,1255
|
23
23
|
podflow/bilibili/__init__.py,sha256=6ZTpvhZTyn4f0LryXzH8lzyK1_rRHBeM-hkBoklKHRA,47
|
24
|
-
podflow/bilibili/build.py,sha256=
|
25
|
-
podflow/bilibili/get.py,sha256=
|
24
|
+
podflow/bilibili/build.py,sha256=aV3iaY4VFsC4GwkeSY9uacMAnV3OY_6V_gGhMOryrvk,8236
|
25
|
+
podflow/bilibili/get.py,sha256=xS9p4RFW1yswmihPOhYbjEZoqnouqqN_mht740LExu4,21262
|
26
26
|
podflow/bilibili/login.py,sha256=oHnuOMvlKZUnJ1OBHuZpTEnG04pboWsueOx871lQWjc,11482
|
27
27
|
podflow/config/__init__.py,sha256=MzgAlkSdV-5MFC11r0QSf-GPxmsLbrMc5ROIrJafjag,45
|
28
28
|
podflow/config/build_original.py,sha256=pG9gCkBBIWwU8QxZA06Br6JRfI4XUSIEiN8eqo1-v7k,1809
|
@@ -44,31 +44,32 @@ podflow/httpfs/app_bottle.py,sha256=l2myMkoRoC5O7OWCyYjCmk7wOEIlgTWfFfImlhXMYwY,
|
|
44
44
|
podflow/httpfs/browser.py,sha256=BJ4Xkfiki_tDr0Sc9RqAcEfIVpkAZ3RFOwo0aMHlY3U,197
|
45
45
|
podflow/httpfs/get_channelid.py,sha256=gcwy4IVHBWNQz7qPCpjwiAklGFLRGzvM33-UZz7oFvo,2296
|
46
46
|
podflow/httpfs/port_judge.py,sha256=l_nLpsSiIhAzfJGCOWyYC-KkCCWPUW2ybe_5hdMOEzE,764
|
47
|
+
podflow/httpfs/progress_bar.py,sha256=mMkP92SrZZ-IBFz9ombWxzRJfMq20h5IbSc_eFcbZZA,682
|
47
48
|
podflow/httpfs/to_html.py,sha256=60azc3xfPKQB7Qaj_wlF3MoHmG0Wkjep70-JroHA2gg,1709
|
48
49
|
podflow/makeup/__init__.py,sha256=ligUtfj0stTcOHFXDF6eAN7Up2PxlB0GnGbLq7iDY3c,45
|
49
50
|
podflow/makeup/del_makeup_format_fail.py,sha256=XizQh74QYXxRg0e1uerXjd4Tiq5qChks0fTAY7n3Z1I,642
|
50
|
-
podflow/makeup/make_up_file.py,sha256=
|
51
|
+
podflow/makeup/make_up_file.py,sha256=Uq_oL0a28PhtEL9ZObmnhaEWcZwchB_5e8-jSiiCeoQ,2777
|
51
52
|
podflow/makeup/make_up_file_format_mod.py,sha256=4dIMeVObr4qnMLD0mocZzBNhduc8dHx-b-w1GVotKIk,3575
|
52
53
|
podflow/makeup/make_up_file_mod.py,sha256=padTanSPw5Dysf_CcUUVy65nCC6zbz1gPJRX98tmUdY,1075
|
53
54
|
podflow/message/__init__.py,sha256=pZkcrrtkdtxgMriEHBZ0_rptKaQrQeMPJvPSaoI1Awo,46
|
54
55
|
podflow/message/backup_zip_save.py,sha256=c81jnx8IxHjTcO7G0OUAppawpBIPxa9wgkj9AQhqeJc,1864
|
55
|
-
podflow/message/create_main_rss.py,sha256=
|
56
|
+
podflow/message/create_main_rss.py,sha256=kW2QvJhxl2ZcqGV-M-OztlOaQ27ODuQxADeP8poymBQ,3118
|
56
57
|
podflow/message/display_qrcode_and_url.py,sha256=VqmRkDYYG03VihfW4SAU49HJVmfqWbLTgMxqCaREeCo,1037
|
57
58
|
podflow/message/fail_message_initialize.py,sha256=UPHYNErD2hnzm2WFlNqghBRDCw_sf_3EagAF5LiO9wk,6462
|
58
59
|
podflow/message/format_time.py,sha256=gveNh4FGeS3ytwDyYB-h12d1_Km6XoX7WSPcFmDfCBk,909
|
59
60
|
podflow/message/get_media_name.py,sha256=5ULPQOQCZ2-lxdkILwlBP-ItzdFEgvEAKxeLtplACbQ,861
|
60
|
-
podflow/message/get_original_rss.py,sha256=
|
61
|
+
podflow/message/get_original_rss.py,sha256=Bzy-Fs1vZEjwvQq6D6xp-2IUidliSyaL1P4WtkLJaRg,2450
|
61
62
|
podflow/message/get_video_format.py,sha256=bPetnFwQlhIO9do_nq3B4AwHQRxFn6SDYvFItjwEx0o,5324
|
62
63
|
podflow/message/get_video_format_multithread.py,sha256=tbgQDMpcntulrbmXBbKL4iVr4t_9evGsuMOIZLoLebI,1615
|
63
|
-
podflow/message/get_youtube_and_bilibili_video_format.py,sha256=
|
64
|
+
podflow/message/get_youtube_and_bilibili_video_format.py,sha256=LKer75ZhVDvFLd7aMOrr-9UPKIVpCEPkeIhdlmP_xu4,4633
|
64
65
|
podflow/message/media_format.py,sha256=Q4WoML4UqL0Ry-QN8DHFJqOQ2tXcFN6u5hmhdSLdP1g,7346
|
65
|
-
podflow/message/optimize_download.py,sha256
|
66
|
+
podflow/message/optimize_download.py,sha256=-6YritASap8Dp0HqDuvn-kyeamAfw8UjnR-_5S0DbYw,1034
|
66
67
|
podflow/message/original_rss_fail_print.py,sha256=7HM5Gwi3GqBIg2dtTTDlN_FRgZZjYv6ejizS3tDiePE,502
|
67
68
|
podflow/message/rss_create_hash.py,sha256=M5OS9KcQ4mIxLes9ij4oNji-4VKgi56bg0Shv5nCIQ4,638
|
68
69
|
podflow/message/save_rss.py,sha256=x-yRwT7bAUt2k-R9DWa5uToqpcOdaXkPW_4VH5Gbeo4,3193
|
69
70
|
podflow/message/title_correction.py,sha256=Zieulj2wQY_o4r3u5ZRsDQP5y8KuZHrL_l8tnM96k6g,915
|
70
71
|
podflow/message/update_information_display.py,sha256=Zn-Xhps4PKf7NbgQrT-qTwhP096RV-48OEncK_vuUe0,3061
|
71
|
-
podflow/message/update_youtube_bilibili_rss.py,sha256=
|
72
|
+
podflow/message/update_youtube_bilibili_rss.py,sha256=igt41NkGuikPzi0gqo-Hc29hMil65kHV19J4W-oGQfU,5962
|
72
73
|
podflow/message/want_retry.py,sha256=3MtlAG4BZ2oznn0X5zYzAl2S0XzZkXhnN_LHVPcWZjA,699
|
73
74
|
podflow/message/xml_item.py,sha256=jCB93aOoIDK6EaAFrZg5gd6mBMv7fP9uX-Z5eiTSyxg,3127
|
74
75
|
podflow/message/xml_original_item.py,sha256=mlORI0p6aSLP6PWIAuvI4uVN0JbxUDZX5-U52ltn9E4,4048
|
@@ -81,23 +82,23 @@ podflow/remove/remove_dir.py,sha256=xQIhrnqnYjMzXjoSWaTvm7JwPYOFTN1muuTPdaLDXpQ,
|
|
81
82
|
podflow/remove/remove_file.py,sha256=8wAJQehs-XBqvu0vPlEme2_tt0FZxc5ELwGMxXA_558,982
|
82
83
|
podflow/repair/__init__.py,sha256=Gpc1i6xiSLodKjjmzH66c_Y1z0HQ9E9CS3p95FRnVFM,45
|
83
84
|
podflow/repair/reverse_log.py,sha256=Wc_vAH0WB-z1fNdWx7FYaVH4caRPtot7tDwDwFhmpz4,1106
|
84
|
-
podflow/templates/index.html,sha256=
|
85
|
+
podflow/templates/index.html,sha256=5CQyG7xmqRpaB8CTsPFTlcjKmaEB75z9VyoeocfiZeU,22996
|
85
86
|
podflow/upload/__init__.py,sha256=AtOSXDrE5EjUe3z-iBd1NTDaH8n_X9qA5WXdBLkONjA,45
|
86
87
|
podflow/upload/add_upload.py,sha256=_2-V0z75Lwu-PUCfMD9HOSxZTB102yZlZW5hSdlHcsc,1432
|
87
88
|
podflow/upload/build_hash.py,sha256=9opa3xLd7nJbGGX5xa3uuKPS6dxlbkAb87ZdEiUxmxI,473
|
88
89
|
podflow/upload/get_upload_original.py,sha256=TEDnRutumm2FZNIesPJIlExHyKWpfB3ZAHb3sZt7V6A,4312
|
89
|
-
podflow/upload/linked_client.py,sha256=
|
90
|
+
podflow/upload/linked_client.py,sha256=cslPx9T2au21DYfLeHIeoR_O-NMx9AdR9MSLJHQogaU,3314
|
90
91
|
podflow/upload/linked_server.py,sha256=h-qSx13fP8_Ny2IKW3wCNPwqRqW6-Iz1pqxD9ga9-dM,2308
|
91
92
|
podflow/upload/login.py,sha256=85sqr12T-3NH-TD3kAMzy4yb1KOheV3Tr0eGee7NCJo,4007
|
92
93
|
podflow/upload/time_key.py,sha256=6jZ3cxUjzj_umYDwH27R0YNZlLXxfhNp-CqV_K22wlo,967
|
93
94
|
podflow/upload/update_upload.py,sha256=_5tp1zPNsC9DdDnLzm-P8bLcOBuDov4eMRHp_861j80,3183
|
94
95
|
podflow/upload/upload_server.py,sha256=BFq3QrWE7U97LbC4EQiDhQXbLapEc4R00eRDBH12E6A,565
|
95
96
|
podflow/youtube/__init__.py,sha256=pgXod8gq0IijZxIkPSwgAOcb9JI5rd1mqMomoR7bcJ4,46
|
96
|
-
podflow/youtube/build.py,sha256=
|
97
|
-
podflow/youtube/get.py,sha256=
|
97
|
+
podflow/youtube/build.py,sha256=67m74rQOrvqU6ZZybP85ORpg3pOCkpoikttBbtO_PxY,12315
|
98
|
+
podflow/youtube/get.py,sha256=oO32GjTFvUgP5AfFX5AlIuXU2UT6QtOUOXWLFzi8XtI,17157
|
98
99
|
podflow/youtube/login.py,sha256=KYl--ya6Z1u0uIcOp9l8i3DIIj9hsYUDH4dtJjI0MLM,1295
|
99
|
-
podflow-
|
100
|
-
podflow-
|
101
|
-
podflow-
|
102
|
-
podflow-
|
103
|
-
podflow-
|
100
|
+
podflow-20250417.dist-info/METADATA,sha256=A2cWskSXZbjRwrLM4CQ_A7XcSNJHpCu_6rtnfihwOqg,14195
|
101
|
+
podflow-20250417.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
102
|
+
podflow-20250417.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
|
103
|
+
podflow-20250417.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
|
104
|
+
podflow-20250417.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|