lazysdk 0.1.3__py3-none-any.whl → 0.1.4__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.
lazysdk/lazym3u8.py
CHANGED
@@ -5,6 +5,7 @@ from . import lazytime
|
|
5
5
|
from . import lazyfile
|
6
6
|
from . import lazypath
|
7
7
|
from . import lazymd5
|
8
|
+
from . import lazyprocess
|
8
9
|
import subprocess
|
9
10
|
import threading
|
10
11
|
import requests
|
@@ -503,6 +504,103 @@ def download_fragment(
|
|
503
504
|
return download_res
|
504
505
|
|
505
506
|
|
507
|
+
def download_fragment_single(
|
508
|
+
task_index,
|
509
|
+
task_info,
|
510
|
+
):
|
511
|
+
"""
|
512
|
+
模块功能:下载单个碎片到指定文件夹
|
513
|
+
:param fragment_url: 碎片下载地址
|
514
|
+
:param fragment_url_name: 碎片名
|
515
|
+
:param fragment_path:碎片保存路径
|
516
|
+
:param aes_key: aes解密key
|
517
|
+
:param headers:请求头
|
518
|
+
:param fragment_suffix:碎片文件后缀名
|
519
|
+
:return:
|
520
|
+
"""
|
521
|
+
fragment_url = task_info['fragment_url']
|
522
|
+
fragment_url_name = task_info['fragment_url_name']
|
523
|
+
fragment_path = task_info['fragment_path']
|
524
|
+
aes_key = None,
|
525
|
+
headers = None,
|
526
|
+
fragment_suffix = task_info['fragment_suffix']
|
527
|
+
|
528
|
+
if headers is None:
|
529
|
+
headers_local = default_headers
|
530
|
+
else:
|
531
|
+
headers_local = headers
|
532
|
+
|
533
|
+
print('正在下载', fragment_url_name, fragment_url)
|
534
|
+
fragment_file_name = '%s%s%s.%s' % (fragment_path, path_separator, fragment_url_name, fragment_suffix) # 生成碎片文件名
|
535
|
+
# 开始下载碎片文件
|
536
|
+
while True:
|
537
|
+
try:
|
538
|
+
with open(fragment_file_name, "ab+") as f:
|
539
|
+
response = requests.get(
|
540
|
+
url=fragment_url,
|
541
|
+
headers=headers_local,
|
542
|
+
stream=True,
|
543
|
+
timeout=timeout
|
544
|
+
)
|
545
|
+
total_length = response.headers.get('content-length')
|
546
|
+
|
547
|
+
if total_length is None:
|
548
|
+
print("Attention: There is no content length in header!") # 未返回长度信息
|
549
|
+
else:
|
550
|
+
dl = 0
|
551
|
+
total_length = int(total_length)
|
552
|
+
for data in track(
|
553
|
+
sequence=response.iter_content(chunk_size=8192),
|
554
|
+
description='下载中',
|
555
|
+
total=total_length/8192,
|
556
|
+
show_speed=True
|
557
|
+
):
|
558
|
+
dl += len(data)
|
559
|
+
if aes_key is None:
|
560
|
+
data_decode = data
|
561
|
+
else:
|
562
|
+
data_decode = lazyCrypto.aes_decode(data, aes_key)
|
563
|
+
f.write(data_decode)
|
564
|
+
f.flush()
|
565
|
+
break
|
566
|
+
except:
|
567
|
+
showlog.warning('下载超时,将在1秒后重试...')
|
568
|
+
os.remove(fragment_file_name)
|
569
|
+
time.sleep(1)
|
570
|
+
pass
|
571
|
+
|
572
|
+
|
573
|
+
def download_fragment_quick(
|
574
|
+
url_list
|
575
|
+
):
|
576
|
+
fragment_path = 'fragment_%s' % str(time.time()).replace('.', '') # 使用时间戳命名
|
577
|
+
fragment_suffix = 'ts'
|
578
|
+
lazypath.make_path(fragment_path)
|
579
|
+
task_list = list()
|
580
|
+
fragment_file_name_list = list()
|
581
|
+
for url_index, each_url in enumerate(url_list):
|
582
|
+
task_list.append(
|
583
|
+
{
|
584
|
+
'fragment_url': each_url,
|
585
|
+
'fragment_url_name': url_index,
|
586
|
+
'fragment_path': fragment_path,
|
587
|
+
'fragment_suffix': fragment_suffix
|
588
|
+
}
|
589
|
+
)
|
590
|
+
fragment_file_name = '%s%s%s.%s' % (fragment_path, path_separator, url_index, fragment_suffix) # 生成碎片文件名
|
591
|
+
fragment_file_name_list.append(fragment_file_name)
|
592
|
+
lazyprocess.run(
|
593
|
+
task_list=url_list,
|
594
|
+
task_function=download_fragment_single
|
595
|
+
)
|
596
|
+
download_res = {
|
597
|
+
'fragment_path': fragment_path,
|
598
|
+
'fragment_suffix': fragment_suffix,
|
599
|
+
'fragment_file_name_list': fragment_file_name_list
|
600
|
+
}
|
601
|
+
return download_res
|
602
|
+
|
603
|
+
|
506
604
|
def download_m3u8(
|
507
605
|
m3u8_link=None,
|
508
606
|
m3u8_file_path=None,
|
@@ -8,7 +8,7 @@ lazysdk/lazyfile.py,sha256=Rdj9f11IUyd1lLAZu-G4JHZqSKrvBQGkLCeJ9CxSzPQ,20267
|
|
8
8
|
lazysdk/lazyflask.py,sha256=VUhJqtNz_evVyGOS40FKkkQWWrqGEUZ26cv1RQxS388,727
|
9
9
|
lazysdk/lazyid.py,sha256=pEmRpN78-6vdz4hzLxgoCSHJw6gvnOVQyNjqusZZLQE,607
|
10
10
|
lazysdk/lazyip.py,sha256=ZM4N0nCimW4r4z1_Bymb-ZAfabR_3L-hB5Biyyz77-I,451
|
11
|
-
lazysdk/lazym3u8.py,sha256=
|
11
|
+
lazysdk/lazym3u8.py,sha256=qYbOgCA0z2gMJGQ8EW6cmOdH84DFTtCKwaR1kQ_yOwk,31484
|
12
12
|
lazysdk/lazymd5.py,sha256=JSKIcUmH2zwPDDJAd9XajTYd59eKidoKAkLLNU8OHM4,1112
|
13
13
|
lazysdk/lazypath.py,sha256=cPjp5kfJcbp6884HgJY0SIUAhQ85qA-o9N-MKhk4uBU,4305
|
14
14
|
lazysdk/lazyprocess.py,sha256=ifRnQmQMwhP8wmy0HF6_sYZ747XlQ7esp0jiS2JnOPk,5079
|
@@ -20,7 +20,7 @@ lazysdk/lazytext.py,sha256=1f2B0HJVweWVkmCx3NcwXaRw0ZQHYc7PKTv38hdgAGQ,1448
|
|
20
20
|
lazysdk/lazytime.py,sha256=lOQ5U8iWa9dp1ZJ8SjfZ2FRBj9t43SsteYbxDcXkFzo,23199
|
21
21
|
lazysdk/lazyua.py,sha256=QI4EgZAMF9AqXJJvaDEzsMSTbsR47_y8CkJkfPbX-kM,3783
|
22
22
|
lazysdk/lazywebhook.py,sha256=HwJIZ5j3wUpnEfPkFY-Xq9T_9xdhCJ71dYsWNX22_3Y,8386
|
23
|
-
lazysdk-0.1.
|
24
|
-
lazysdk-0.1.
|
25
|
-
lazysdk-0.1.
|
26
|
-
lazysdk-0.1.
|
23
|
+
lazysdk-0.1.4.dist-info/METADATA,sha256=uuV0PGTCXf2U50U7fsndIclot5OYtafALPFjF29x8kU,1730
|
24
|
+
lazysdk-0.1.4.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
25
|
+
lazysdk-0.1.4.dist-info/top_level.txt,sha256=--bGS42ZHUhVeO83y1wfvKFg6OjkTLxQ4V4riqPQljY,8
|
26
|
+
lazysdk-0.1.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|