TEST_WIN GIT
This commit is contained in:
79
vmix_url_replace.py
Normal file
79
vmix_url_replace.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import os
|
||||
import shutil
|
||||
import argparse
|
||||
import xml.etree.ElementTree as ET
|
||||
from urllib.parse import urlparse, unquote
|
||||
|
||||
def localname(tag: str) -> str:
|
||||
return tag.split('}', 1)[-1].lower()
|
||||
|
||||
def extract_filename(u: str) -> str:
|
||||
s = (u or "").strip()
|
||||
if not s:
|
||||
return ""
|
||||
p = urlparse(s)
|
||||
path = p.path if p.scheme else s
|
||||
path = path.replace("\\", "/")
|
||||
name = path.split("/")[-1]
|
||||
return unquote(name)
|
||||
|
||||
def replace_urls_in_vmix(xml_path: str, prefix_url: str) -> int:
|
||||
if not os.path.isfile(xml_path):
|
||||
raise FileNotFoundError(f"Файл не найден: {xml_path}")
|
||||
|
||||
backup_path = xml_path + ".bak"
|
||||
shutil.copy2(xml_path, backup_path)
|
||||
|
||||
tree = ET.parse(xml_path)
|
||||
root = tree.getroot()
|
||||
|
||||
replaced = 0
|
||||
for node in root.iter():
|
||||
if localname(node.tag).startswith("datasource") and node.get("friendlyName") == "JSON":
|
||||
for sub in node.iter():
|
||||
if localname(sub.tag) == "url":
|
||||
old = (sub.text or "").strip()
|
||||
# ✅ проверка: если уже новый URL — пропускаем
|
||||
if old.startswith(prefix_url):
|
||||
print(f"Пропускаем — уже новый URL: {old}")
|
||||
continue
|
||||
tail = extract_filename(old)
|
||||
if not tail:
|
||||
continue
|
||||
new_full = prefix_url + tail
|
||||
if old != new_full:
|
||||
print(f"{old} -> {new_full}")
|
||||
sub.text = new_full
|
||||
replaced += 1
|
||||
|
||||
# сохраняем без XML декларации
|
||||
tree.write(xml_path, encoding="utf-8", xml_declaration=False)
|
||||
return replaced
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Заменяет <url> в datasource[friendlyName=JSON] на PREFIX + имя файла."
|
||||
)
|
||||
parser.add_argument("--file", "-f", required=True, help="Путь к .vmix файлу")
|
||||
parser.add_argument("--url", "-u", required=False, help="Префикс нового URL (например, https://gfx.tvstart.ru/app/static/gfx_)")
|
||||
parser.add_argument("--pause", action="store_true", help="Ожидать Enter в конце (удобно при запуске двойным кликом)")
|
||||
args = parser.parse_args()
|
||||
|
||||
prefix = args.url or input("Введите префикс нового URL (например, https://gfx.tvstart.ru/app/static/gfx_): ").strip()
|
||||
if not prefix:
|
||||
print("Префикс пустой — ничего не сделано.")
|
||||
return
|
||||
|
||||
try:
|
||||
count = replace_urls_in_vmix(args.file, prefix)
|
||||
print(f"Готово. Заменено тегов <url>: {count}")
|
||||
print(f"Резервная копия: {args.file}.bak")
|
||||
except Exception as e:
|
||||
print("Ошибка:", e)
|
||||
|
||||
if args.pause:
|
||||
input("Нажмите Enter для выхода...")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user