Directly parse js.

This commit is contained in:
Lovi-0 2024-08-24 09:50:37 +02:00
parent ade82ddcf2
commit 4663fefaeb
6 changed files with 27 additions and 167 deletions

View File

@ -7,12 +7,12 @@ import logging
# External libraries
import httpx
import jsbeautifier
from bs4 import BeautifulSoup
# Internal utilities
from Src.Util.headers import get_headers
from Src.Util.os import run_node_script, run_node_script_api
class VideoSource:
@ -119,14 +119,7 @@ class VideoSource:
"""
for script in soup.find_all("script"):
if "eval" in str(script):
# WITH INSTALL NODE JS
#new_script = str(script.text).replace("eval", "var a = ")
#new_script = new_script.replace(")))", ")));console.log(a);")
#return run_node_script(new_script)
# WITH API
return run_node_script_api(script.text)
return jsbeautifier.beautify(script.text)
return None
@ -170,13 +163,14 @@ class VideoSource:
logging.error("Failed to fetch supervideo content.")
return None
result = self.get_result_node_js(supervideo_soup)
if not result:
logging.error("No video URL found in script.")
return None
# Find master playlist
data_js = self.get_result_node_js(supervideo_soup)
match = re.search(r'sources:\s*\[\{\s*file:\s*"([^"]+)"', data_js)
if match:
return match.group(1)
master_playlist = str(result).split(":")[3].split('"}')[0]
return f"https:{master_playlist}"
return None
except Exception as e:
logging.error(f"An error occurred: {e}")

View File

@ -7,12 +7,12 @@ import logging
# External libraries
import httpx
import jsbeautifier
from bs4 import BeautifulSoup
# Internal utilities
from Src.Util.headers import get_headers
from Src.Util.os import run_node_script, run_node_script_api
class VideoSource:
@ -121,14 +121,14 @@ class VideoSource:
for script in soup.find_all("script"):
if "eval(function(p,a,c,k,e,d)" in script.text:
# Execute the script using the run_node_script_api function
text_run_node_js = run_node_script_api(script.text)
# Execute the script using
data_js = jsbeautifier.beautify(script.text)
# Extract the .m3u8 URL from the script's output
m3u8_match = re.search(r'src:"(https://.*?\.m3u8)"', text_run_node_js)
match = re.search(r'sources:\s*\[\{\s*src:\s*"([^"]+)"', data_js)
if m3u8_match:
self.m3u8_url = m3u8_match.group(1)
if match:
self.m3u8_url = match.group(1)
logging.info(f"M3U8 URL: {self.m3u8_url}")
break

View File

@ -1,17 +1,18 @@
# 26.05.24
import re
import sys
import logging
# External libraries
import httpx
import jsbeautifier
from bs4 import BeautifulSoup
# Internal utilities
from Src.Util.headers import get_headers
from Src.Util.os import run_node_script, run_node_script_api
class VideoSource:
@ -84,14 +85,7 @@ class VideoSource:
"""
for script in soup.find_all("script"):
if "eval" in str(script):
# WITH INSTALL NODE JS
#new_script = str(script.text).replace("eval", "var a = ")
#new_script = new_script.replace(")))", ")));console.log(a);")
#return run_node_script(new_script)
# WITH API
return run_node_script_api(script.text)
return jsbeautifier.beautify(script.text)
return None
@ -113,13 +107,14 @@ class VideoSource:
logging.error("Failed to parse HTML content.")
return None
result = self.get_result_node_js(soup)
if not result:
logging.error("No video URL found in script.")
return None
# Find master playlist
data_js = self.get_result_node_js(soup)
match = re.search(r'sources:\s*\[\{\s*file:\s*"([^"]+)"', data_js)
if match:
return match.group(1)
master_playlist = str(result).split(":")[3].split('"}')[0]
return f"https:{master_playlist}"
return None
except Exception as e:
logging.error(f"An error occurred: {e}")

View File

@ -341,135 +341,6 @@ def get_system_summary():
# --> OS MANAGE NODE JS
def is_node_installed() -> bool:
"""
Checks if Node.js is installed on the system.
Returns:
bool: True if Node.js is installed, False otherwise.
"""
try:
# Run the command 'node -v' to get the Node.js version
result = subprocess.run(['node', '-v'], capture_output=True, text=True, check=True)
# If the command runs successfully and returns a version number, Node.js is installed
if result.stdout.startswith('v'):
return True
except (subprocess.CalledProcessError, FileNotFoundError):
# If there is an error running the command or the command is not found, Node.js is not installed
return False
return False
def run_node_script(script_content: str) -> str:
"""
Runs a Node.js script and returns its output.
Parameters:
script_content (str): The content of the Node.js script to run.
Returns:
str: The output of the Node.js script.
"""
# Check if Node.js is installed
if not is_node_installed():
raise EnvironmentError("Node.js is not installed on the system.")
# Write the script content to a temporary file
with open('script.js', 'w') as file:
file.write(script_content)
try:
# Run the Node.js script using subprocess and capture the output
result = subprocess.run(['node', 'script.js'], capture_output=True, text=True, check=True)
return result.stdout
except subprocess.CalledProcessError as e:
raise RuntimeError(f"Error running Node.js script: {e.stderr}")
finally:
# Clean up the temporary script file
import os
os.remove('script.js')
def run_node_script_api(script_content: str) -> str:
"""
Runs a Node.js script and returns its output.
Parameters:
script_content (str): The content of the Node.js script to run.
Returns:
str: The output of the Node.js script.
"""
headers = {
'accept': '*/*',
'accept-language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7',
'dnt': '1',
'origin': 'https://onecompiler.com',
'priority': 'u=1, i',
'referer': 'https://onecompiler.com/javascript',
'user-agent': get_headers()
}
json_data = {
'name': 'JavaScript',
'title': '42gyum6qn',
'version': 'ES6',
'mode': 'javascript',
'description': None,
'extension': 'js',
'languageType': 'programming',
'active': False,
'properties': {
'language': 'javascript',
'docs': False,
'tutorials': False,
'cheatsheets': False,
'filesEditable': False,
'filesDeletable': False,
'files': [
{
'name': 'index.js',
'content': script_content
},
],
'newFileOptions': [
{
'helpText': 'New JS file',
'name': 'script${i}.js',
'content': "/**\n * In main file\n * let script${i} = require('./script${i}');\n * console.log(script${i}.sum(1, 2));\n */\n\nfunction sum(a, b) {\n return a + b;\n}\n\nmodule.exports = { sum };",
},
{
'helpText': 'Add Dependencies',
'name': 'package.json',
'content': '{\n "name": "main_app",\n "version": "1.0.0",\n "description": "",\n "main": "HelloWorld.js",\n "dependencies": {\n "lodash": "^4.17.21"\n }\n}',
},
],
},
'_id': '42gcvpkbg_42gyuud7m',
'user': None,
'visibility': 'public',
}
# Return error
response = httpx.post('https://onecompiler.com/api/code/exec', headers=headers, json=json_data, timeout=15)
response.raise_for_status()
if response.status_code == 200:
return str(response.json()['stderr']).split("\n")[1]
else:
logging.error("Cant connect to site: onecompiler.com")
sys.exit(0)
# --> OS FILE VALIDATOR
# List of invalid characters for Windows filenames

View File

@ -97,7 +97,7 @@
"domain": "to"
},
"cb01": {
"domain": "ventures"
"domain": "software"
}
}
}

2
run.py
View File

@ -125,7 +125,7 @@ def initialize():
# Attempting GitHub update
try:
git_update()
#git_update()
print()
except:
console.log("[red]Error with loading github.")