Yuzu Early Access Updater
Хотел написать, что он сломался, но видимо его обновляли (обращение к
https://pastebin.com/raw/GHqYrbQt, который не был доступен), там теперь 705, но ссылка неверная на архив, можно взять здесь
http://www.mediafire.com/folder/rrat84il8xewc/YuzuEarlyAccess. Я выше давал ссылку на pastebin с обновлениями, он сейчас не доступен.
Им стоило выкладывать сам скрипт на Python, чтобы люди не ссали. Я декомпилировал (приложил файл):
#!/usr/bin/env python3
import shutil, wget, os, zipfile
from distutils.dir_util import copy_tree
import re, requests, sys
pastebinContent = requests.get('https://pastebin.com/raw/GHqYrbQt').text
try:
link = re.search('http.*', pastebinContent).group(0)
version = int(re.search('Yuzu Early Access (\\d+)', pastebinContent).group(1))
except:
print('PasteBins are down! RIP')
sys.exit()
try:
versionFile = open('Version.txt', 'r+')
except:
versionFile = open('Version.txt', 'w+')
versionFile.write('0')
versionFile.close()
versionFile = open('Version.txt', 'r+')
for i, line in enumerate(versionFile):
current = int(line)
else:
if version > current:
print('Downloading newest version ' + str(version) + ', please wait!')
wget.download(link, 'yuzu.zip', bar=(wget.bar_thermometer))
print('\nExtracting files!')
try:
with zipfile.ZipFile('yuzu.zip', 'r') as zip_ref:
zip_ref.extractall('yuzu')
copy_tree('yuzu/Yuzu Early Access ' + str(version) + ' (Update)/Yuzu Early Access', os.getcwd())
shutil.rmtree('yuzu')
versionFile.seek(0)
versionFile.write(str(version))
versionFile.truncate()
versionFile.close()
print('Done!')
except:
print('File has not been uploaded yet, please try again later!')
else:
os.remove('yuzu.zip')
else:
print('You are on the newest version (' + str(current) + ')!')
input()
Нужно установить requests и wget (командная строка):
pip install -U requests
pip install -U wget
Как декомпилировать архивы PyInstaller0. Нужен Python той же минорной и мажорной версии (3.8), последнее число (3.8.x) возможно не играет роли, так как это исправления.
1. Установить PyInstaller и с помощью pyi-archive_viewer (
https://pyinstaller.readthedocs.io/en/stable/advanced-topics.html#using-pyi-archive-viewer) извлечь из .exe файл с таким же названием, но без .exe, в данном случае "yuzuUpdater".
2. Он идёт без заголовка .pyc-файла, который нужен для декомпиляции в, например,
https://github.com/rocky/python-decompile3. Поэтому скомпилируем любой скрипт:
python -m py_compile hello.py
И скопируем первые 16 байт и вставим в начале yuzuUpdater, переименуем в yuzuUpdater.pyc.
3. Декомпилируем с помощью python-decompile3, который нужно сначала установить:
pip install -e python-decompile3-master
Где последний аргумент - путь до папки с код из github.
Декомпилируем:
decompyle3 -o yuzuUpdater.py yuzuUpdater.pyc
Добавлено позже:Ссылку на версию EA 705 исправили,
Yuzu Early Access Updater теперь работает. На самом деле, автор мог обойтись без pastebin, потому что у mediafire есть API для доступа к файлам.
Изменил скрипт: скачивание напрямую из папки
http://www.mediafire.com/folder/rrat84il8xewc/YuzuEarlyAccess, убрал использование wget, вывод прогресса скачивания - печатается по одному символу #.
Скрипт:
https://gist.github.com/infval/257d71eb08c329f59124a536da708003 (ПКМ на Raw -> Сохранить объект). Вот эта версия текстом, на всякий случай:
#!/usr/bin/env python3
import os
import re
import sys
import json
import shutil
import zipfile
import requests
def download_file(url, filename):
r = requests.get(url, stream=True)
total_size = int(r.headers.get('content-length', 0))
block_size = 4096
current_size = 0
char_size = total_size // 80
with open(filename, 'wb') as f:
for data in r.iter_content(block_size):
current_size += len(data)
if current_size >= char_size:
current_size -= char_size
print("#", end="", flush=True)
f.write(data)
mediafire_yuzu_folder = 'rrat84il8xewc'
api_url = 'http://www.mediafire.com/api/1.5/folder/get_content.php?folder_key={}&content_type=files&order_by=created&order_direction=desc&response_format=json'.format(mediafire_yuzu_folder)
try:
r = requests.get(api_url).text
mfolder = json.loads(r)
mfile = mfolder["response"]["folder_content"]["files"][0]
filename = mfile["filename"]
link = mfile["links"]["normal_download"]
version = int(re.search('Yuzu Early Access (\\d+)', filename).group(1))
except:
print('Parse Error: https://www.mediafire.com/folder/{}'.format(mediafire_yuzu_folder))
sys.exit()
try:
versionFile = open('Version.txt', 'r+')
except:
versionFile = open('Version.txt', 'w+')
versionFile.write('0')
versionFile.close()
versionFile = open('Version.txt', 'r+')
for i, line in enumerate(versionFile):
current = int(line)
else:
if version > current:
print('Downloading newest version ' + str(version) + ', please wait!')
download_file(link, 'yuzu.zip')
print('Extracting files!')
try:
with zipfile.ZipFile('yuzu.zip', 'r') as zip_ref:
zip_ref.extractall('yuzu')
shutil.copytree('yuzu/Yuzu Early Access ' + str(version) + ' (Update)/Yuzu Early Access', os.getcwd(), dirs_exist_ok=True)
shutil.rmtree('yuzu')
versionFile.seek(0)
versionFile.write(str(version))
versionFile.truncate()
versionFile.close()
print('Done!')
except:
print('File has not been uploaded yet, please try again later!')
else:
os.remove('yuzu.zip')
else:
print('You are on the newest version (' + str(current) + ')!')
input()
Для конечного пользователя:
1. Установить Python 3:
https://www.python.org.
2. Установить
requests (в командной строке):
pip install -U requests
3. Запустить yuzuUpdater_mediafire.py в папке, куда нужно скопировать все файлы yuzu. Поэтому не делайте это на рабочем столе!
Если скрипт сразу закрывается или не написано Done! после скачивания, значит что-то пошло не так.