ohli24 api update 2022.12.21(01.)
This commit is contained in:
215
logic_ohli24.py
215
logic_ohli24.py
@@ -831,205 +831,8 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
|
|||||||
db_entity.save()
|
db_entity.save()
|
||||||
|
|
||||||
# Get episode info from OHLI24 site
|
# Get episode info from OHLI24 site
|
||||||
def make_episode_info_old(self):
|
|
||||||
try:
|
|
||||||
# url = 'https://ohli24.net/e/' + self.info['va']
|
|
||||||
base_url = "https://ohli24.net"
|
|
||||||
iframe_url = ""
|
|
||||||
|
|
||||||
# https://ohli24.net/e/%EB%85%B9%EC%9D%84%20%EB%A8%B9%EB%8A%94%20%EB%B9%84%EC%8A%A4%EC%BD%94%206%ED%99%94
|
|
||||||
url = self.info["va"]
|
|
||||||
|
|
||||||
ourls = parse.urlparse(url)
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
"Referer": f"{ourls.scheme}://{ourls.netloc}",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36",
|
|
||||||
}
|
|
||||||
logger.debug("make_episode_info()::url==> %s", url)
|
|
||||||
logger.info(f"self.info:::> {self.info}")
|
|
||||||
|
|
||||||
text = requests.get(url, headers=headers).text
|
|
||||||
# logger.debug(text)
|
|
||||||
soup1 = BeautifulSoup(text, "lxml")
|
|
||||||
pattern = re.compile(r"url : \"\.\.(.*)\"")
|
|
||||||
script = soup1.find("script", text=pattern)
|
|
||||||
|
|
||||||
if script:
|
|
||||||
match = pattern.search(script.text)
|
|
||||||
if match:
|
|
||||||
iframe_url = match.group(1)
|
|
||||||
logger.info("iframe_url::> %s", iframe_url)
|
|
||||||
|
|
||||||
resp = requests.get(base_url + iframe_url, headers=headers, timeout=20).text
|
|
||||||
soup2 = BeautifulSoup(resp, "lxml")
|
|
||||||
iframe_src = soup2.find("iframe")["src"]
|
|
||||||
# print(resp1)
|
|
||||||
|
|
||||||
logger.debug(f"iframe_src:::> {iframe_src}")
|
|
||||||
|
|
||||||
resp1 = requests.get(iframe_src, headers=headers, timeout=600).text
|
|
||||||
# logger.info('resp1::>> %s', resp1)
|
|
||||||
soup3 = BeautifulSoup(resp1, "lxml")
|
|
||||||
# packed_pattern = re.compile(r'\\{*(eval.+)*\\}', re.MULTILINE | re.DOTALL)
|
|
||||||
s_pattern = re.compile(r"(eval.+)", re.MULTILINE | re.DOTALL)
|
|
||||||
packed_pattern = re.compile(
|
|
||||||
r"if?.([^{}]+)\{.*(eval.+)\}.+else?.{.(eval.+)\}", re.DOTALL
|
|
||||||
)
|
|
||||||
packed_script = soup3.find("script", text=s_pattern)
|
|
||||||
# packed_script = soup3.find('script')
|
|
||||||
# logger.info('packed_script>>> %s', packed_script.text)
|
|
||||||
unpack_script = None
|
|
||||||
if packed_script is not None:
|
|
||||||
# logger.debug('zzzzzzzzzzzz')
|
|
||||||
match = packed_pattern.search(packed_script.text)
|
|
||||||
# match = re.search(packed_pattern, packed_script.text)
|
|
||||||
# logger.debug("match::: %s", match.group())
|
|
||||||
unpack_script = jsbeautifier.beautify(match.group(3))
|
|
||||||
|
|
||||||
# logger.info('match groups:: %s', match.groups())
|
|
||||||
# logger.info('match group3:: %s', match.group(3))
|
|
||||||
# print('packed_script==>', packed_script)
|
|
||||||
# logger.debug(unpack_script)
|
|
||||||
|
|
||||||
p1 = re.compile(r"(\"tracks\".*\])\,\"captions\"", re.MULTILINE | re.DOTALL)
|
|
||||||
m2 = re.search(
|
|
||||||
r"(\"tracks\".*\]).*\"captions\"",
|
|
||||||
unpack_script,
|
|
||||||
flags=re.MULTILINE | re.DOTALL,
|
|
||||||
)
|
|
||||||
# print(m2.group(1))
|
|
||||||
dict_string = "{" + m2.group(1) + "}"
|
|
||||||
|
|
||||||
logger.info(f"dict_string::> {dict_string}")
|
|
||||||
tracks = json.loads(dict_string)
|
|
||||||
self.srt_url = tracks["tracks"][0]["file"]
|
|
||||||
|
|
||||||
logger.debug(f'srt_url::: {tracks["tracks"][0]["file"]}')
|
|
||||||
|
|
||||||
video_hash = iframe_src.split("/")
|
|
||||||
video_hashcode = re.sub(r"index\.php\?data=", "", video_hash[-1])
|
|
||||||
self._vi = video_hashcode
|
|
||||||
video_info_url = f"{video_hash[0]}//{video_hash[2]}/player/index.php?data={video_hashcode}&do=getVideo"
|
|
||||||
# print('hash:::', video_hash)
|
|
||||||
logger.debug(f"video_info_url::: {video_info_url}")
|
|
||||||
|
|
||||||
headers = {
|
|
||||||
"referer": f"{iframe_src}",
|
|
||||||
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
||||||
"Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
|
|
||||||
"Mozilla/5.0 (Macintosh; Intel "
|
|
||||||
"Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 "
|
|
||||||
"Whale/3.12.129.46 Safari/537.36",
|
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
|
||||||
}
|
|
||||||
# print(headers)
|
|
||||||
payload = {
|
|
||||||
"hash": video_hash[-1],
|
|
||||||
}
|
|
||||||
resp2 = requests.post(
|
|
||||||
video_info_url, headers=headers, data=payload, timeout=20
|
|
||||||
).json()
|
|
||||||
|
|
||||||
logger.debug("resp2::> %s", resp2)
|
|
||||||
|
|
||||||
hls_url = resp2["videoSource"]
|
|
||||||
logger.debug(f"video_url::> {hls_url}")
|
|
||||||
|
|
||||||
resp3 = requests.get(hls_url, headers=headers).text
|
|
||||||
# logger.debug(resp3)
|
|
||||||
|
|
||||||
# stream_url = hls_url.split('\n')[-1].strip()
|
|
||||||
stream_info = resp3.split("\n")[-2:]
|
|
||||||
# logger.debug('stream_url:: %s', stream_url)
|
|
||||||
logger.debug(f"stream_info:: {stream_info}")
|
|
||||||
self.headers = {
|
|
||||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
||||||
"Chrome/71.0.3554.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
|
|
||||||
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36",
|
|
||||||
"Referer": "https://ndoodle.xyz/video/03a3655fff3e9bdea48de9f49e938e32",
|
|
||||||
}
|
|
||||||
|
|
||||||
self.url = stream_info[1].strip()
|
|
||||||
match = re.compile(r'NAME="(?P<quality>.*?)"').search(stream_info[0])
|
|
||||||
self.quality = "720P"
|
|
||||||
if match is not None:
|
|
||||||
self.quality = match.group("quality")
|
|
||||||
logger.info(self.quality)
|
|
||||||
|
|
||||||
match = re.compile(
|
|
||||||
r"(?P<title>.*?)\s*((?P<season>\d+)%s)?\s*((?P<epi_no>\d+)%s)"
|
|
||||||
% ("기", "화")
|
|
||||||
).search(self.info["title"])
|
|
||||||
|
|
||||||
# epi_no 초기값
|
|
||||||
epi_no = 1
|
|
||||||
|
|
||||||
if match:
|
|
||||||
self.content_title = match.group("title").strip()
|
|
||||||
if "season" in match.groupdict() and match.group("season") is not None:
|
|
||||||
self.season = int(match.group("season"))
|
|
||||||
|
|
||||||
# epi_no = 1
|
|
||||||
epi_no = int(match.group("epi_no"))
|
|
||||||
ret = "%s.S%sE%s.%s-OHNI24.mp4" % (
|
|
||||||
self.content_title,
|
|
||||||
"0%s" % self.season if self.season < 10 else self.season,
|
|
||||||
"0%s" % epi_no if epi_no < 10 else epi_no,
|
|
||||||
self.quality,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
self.content_title = self.info["title"]
|
|
||||||
P.logger.debug("NOT MATCH")
|
|
||||||
ret = "%s.720p-OHNI24.mp4" % self.info["title"]
|
|
||||||
|
|
||||||
# logger.info('self.content_title:: %s', self.content_title)
|
|
||||||
self.epi_queue = epi_no
|
|
||||||
self.filename = Util.change_text_for_use_filename(ret)
|
|
||||||
logger.info(f"self.filename::> {self.filename}")
|
|
||||||
self.savepath = P.ModelSetting.get("ohli24_download_path")
|
|
||||||
logger.info(f"self.savepath::> {self.savepath}")
|
|
||||||
|
|
||||||
# TODO: 완결 처리
|
|
||||||
|
|
||||||
if P.ModelSetting.get_bool("ohli24_auto_make_folder"):
|
|
||||||
if self.info["day"].find("완결") != -1:
|
|
||||||
folder_name = "%s %s" % (
|
|
||||||
P.ModelSetting.get("ohli24_finished_insert"),
|
|
||||||
self.content_title,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
folder_name = self.content_title
|
|
||||||
folder_name = Util.change_text_for_use_filename(folder_name.strip())
|
|
||||||
self.savepath = os.path.join(self.savepath, folder_name)
|
|
||||||
if P.ModelSetting.get_bool("ohli24_auto_make_season_folder"):
|
|
||||||
self.savepath = os.path.join(
|
|
||||||
self.savepath, "Season %s" % int(self.season)
|
|
||||||
)
|
|
||||||
self.filepath = os.path.join(self.savepath, self.filename)
|
|
||||||
if not os.path.exists(self.savepath):
|
|
||||||
os.makedirs(self.savepath)
|
|
||||||
|
|
||||||
from framework.common.util import write_file, convert_vtt_to_srt
|
|
||||||
|
|
||||||
srt_filepath = os.path.join(
|
|
||||||
self.savepath, self.filename.replace(".mp4", ".ko.srt")
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.srt_url is not None and not os.path.exists(srt_filepath):
|
|
||||||
# vtt_data = requests.get(self.vtt, headers=headers).text
|
|
||||||
# srt_data = convert_vtt_to_srt(vtt_data)
|
|
||||||
|
|
||||||
srt_data = requests.get(self.srt_url, headers=headers).text
|
|
||||||
write_file(srt_data, srt_filepath)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
P.logger.error("Exception:%s", e)
|
|
||||||
P.logger.error(traceback.format_exc())
|
|
||||||
|
|
||||||
def make_episode_info(self):
|
def make_episode_info(self):
|
||||||
try:
|
try:
|
||||||
# url = 'https://ohli24.net/e/' + self.info['va']
|
|
||||||
base_url = "https://ohli24.net"
|
base_url = "https://ohli24.net"
|
||||||
iframe_url = ""
|
iframe_url = ""
|
||||||
|
|
||||||
@@ -1057,20 +860,9 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
|
|||||||
iframe_url = match.group(1)
|
iframe_url = match.group(1)
|
||||||
logger.info("iframe_url::> %s", iframe_url)
|
logger.info("iframe_url::> %s", iframe_url)
|
||||||
|
|
||||||
# logger.debug(soup1.find("iframe"))
|
|
||||||
|
|
||||||
iframe_url = soup1.find("iframe")["src"]
|
iframe_url = soup1.find("iframe")["src"]
|
||||||
# logger.info("iframe_url::> %s", iframe_url)
|
|
||||||
#
|
|
||||||
# logger.debug(base_url)
|
|
||||||
# logger.debug(iframe_url)
|
|
||||||
# exit()
|
|
||||||
|
|
||||||
# resp = requests.get(iframe_url, headers=headers, timeout=20).text
|
|
||||||
# soup2 = BeautifulSoup(resp, "lxml")
|
|
||||||
# iframe_src = soup2.find("iframe")["src"]
|
|
||||||
iframe_src = iframe_url
|
iframe_src = iframe_url
|
||||||
# print(resp1)
|
|
||||||
|
|
||||||
# logger.debug(f"iframe_src:::> {iframe_src}")
|
# logger.debug(f"iframe_src:::> {iframe_src}")
|
||||||
|
|
||||||
@@ -1096,11 +888,6 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
|
|||||||
logger.debug(type(packed_script))
|
logger.debug(type(packed_script))
|
||||||
unpack_script = jsbeautifier.beautify(str(packed_script))
|
unpack_script = jsbeautifier.beautify(str(packed_script))
|
||||||
|
|
||||||
# logger.info('match groups:: %s', match.groups())
|
|
||||||
# logger.info('match group3:: %s', match.group(3))
|
|
||||||
# print('packed_script==>', packed_script)
|
|
||||||
# logger.debug(unpack_script)
|
|
||||||
|
|
||||||
p1 = re.compile(r"(\"tracks\".*\])\,\"captions\"", re.MULTILINE | re.DOTALL)
|
p1 = re.compile(r"(\"tracks\".*\])\,\"captions\"", re.MULTILINE | re.DOTALL)
|
||||||
m2 = re.search(
|
m2 = re.search(
|
||||||
r"(\"tracks\".*\]).*\"captions\"",
|
r"(\"tracks\".*\]).*\"captions\"",
|
||||||
@@ -1132,7 +919,7 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
|
|||||||
"Whale/3.12.129.46 Safari/537.36",
|
"Whale/3.12.129.46 Safari/537.36",
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
}
|
}
|
||||||
# print(headers)
|
|
||||||
payload = {
|
payload = {
|
||||||
"hash": video_hash[-1],
|
"hash": video_hash[-1],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,11 +44,11 @@
|
|||||||
<form id="screen_movie_list_form">
|
<form id="screen_movie_list_form">
|
||||||
<div id="screen_movie_list" class="container"></div>
|
<div id="screen_movie_list" class="container"></div>
|
||||||
</form>
|
</form>
|
||||||
<div class="text-center">
|
<!-- <div class="text-center">-->
|
||||||
<div id="spinner" class="spinner-border" role="status">
|
<!-- <div id="spinner" class="spinner-border" role="status">-->
|
||||||
<span class="sr-only">Loading...</span>
|
<!-- <span class="sr-only">Loading...</span>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
<form id="program_auto_form">
|
<form id="program_auto_form">
|
||||||
<div id="episode_list"></div>
|
<div id="episode_list"></div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user