2023-05-19 00:35:09 +08:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
"""
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
Name: update_amiibo_tools_lua.py
|
|
|
|
|
|
|
|
Author: Cory Solovewicz
|
|
|
|
|
|
|
|
Description:
|
|
|
|
This is a python script to automate what the updating of the amiibo_tools.lua
|
2023-06-02 16:45:04 +08:00
|
|
|
file which holds a lua table of all known amiibos. Previously updating the
|
2023-05-19 00:35:09 +08:00
|
|
|
amiibo_tools.lua was a very manual process.
|
|
|
|
|
2023-06-02 16:45:04 +08:00
|
|
|
This script automates the following original command:
|
2023-05-19 00:35:09 +08:00
|
|
|
curl https://raw.githubusercontent.com/N3evin/AmiiboAPI/master/database/amiibo.json | jq 'del(.amiibos[].release)' | jq 'del(.characters)' | pbcopy --> transform to table
|
2023-06-02 16:45:04 +08:00
|
|
|
And outputs the formatted file as amiibo_tools.lua
|
|
|
|
If everything goes well, this should be an updated copy of amiibo_tools.lua
|
|
|
|
which can then be placed in the /lualibs/ directory.
|
|
|
|
The temporary amiibo.json file is then deleted
|
2023-05-19 00:35:09 +08:00
|
|
|
|
|
|
|
Dependencies:
|
|
|
|
python3 -m pip install jq
|
|
|
|
|
|
|
|
How to run:
|
|
|
|
python update_amiibo_tools_lua.py
|
|
|
|
The script will create the file amiibo_tools.lua
|
|
|
|
|
2023-06-02 16:45:04 +08:00
|
|
|
After running, manually backup the original /lualibs/amiibo_tools.lua and move the
|
2023-05-19 00:35:09 +08:00
|
|
|
updated amiibo_tools.lua to the /lualibs/ directory.
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
"""
|
|
|
|
|
|
|
|
import os
|
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
import json
|
|
|
|
from jq import jq
|
|
|
|
|
|
|
|
def fetch_data():
|
|
|
|
print("Fetching amiibo.json")
|
|
|
|
# Perform the curl command
|
|
|
|
curl_command = "curl https://raw.githubusercontent.com/N3evin/AmiiboAPI/master/database/amiibo.json"
|
|
|
|
curl_process = subprocess.Popen(curl_command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
|
|
output, error = curl_process.communicate()
|
|
|
|
|
|
|
|
if curl_process.returncode != 0:
|
|
|
|
print("Error fetching data: ", error.decode())
|
|
|
|
return None
|
|
|
|
return output
|
|
|
|
|
|
|
|
def filter_data(data):
|
|
|
|
print("Filtering downloaded data")
|
|
|
|
# Convert the output to JSON and use jq to filter data
|
|
|
|
data_json = json.loads(data)
|
|
|
|
filtered_data_json = jq('del(.amiibos[].release) | del(.characters)').transform(data_json)
|
|
|
|
# Convert the filtered JSON data back to a string, preserving Unicode characters
|
|
|
|
filtered_data = json.dumps(filtered_data_json, indent=2, ensure_ascii=False)
|
|
|
|
return filtered_data
|
|
|
|
|
|
|
|
def save_data(filtered_data, filename):
|
|
|
|
# Save filtered data to file
|
|
|
|
with open(filename, 'w', encoding='utf-8') as file:
|
|
|
|
file.write(filtered_data)
|
|
|
|
print(f"Data saved to {filename}")
|
|
|
|
|
|
|
|
def process_file(filename):
|
|
|
|
# Open the file
|
|
|
|
with open(filename, 'r', encoding='utf-8') as file:
|
|
|
|
data = file.read()
|
|
|
|
|
|
|
|
# Perform the replacements
|
|
|
|
data = data.replace('"name"', 'name')
|
|
|
|
data = data.replace('"amiibo_series"', 'amiibo_series')
|
|
|
|
data = data.replace('"amiibos"', 'amiibos')
|
|
|
|
data = data.replace('"game_series"', 'game_series')
|
|
|
|
data = data.replace('"types"', 'types')
|
|
|
|
data = data.replace(':', ' =')
|
|
|
|
data = re.sub('"0x', '["0x', data)
|
|
|
|
data = re.sub('" =', '"] =', data)
|
|
|
|
|
|
|
|
# Prepend the text
|
|
|
|
prepend_text = 'local amiibo_tools = {}\n\n-- curl https://raw.githubusercontent.com/N3evin/AmiiboAPI/master/database/amiibo.json | jq \'del(.amiibos[].release)\' | jq \'del(.characters)\' | pbcopy --> transform to table\namiibo_tools.db =\n'
|
|
|
|
data = prepend_text + data
|
|
|
|
|
|
|
|
# Append the text
|
|
|
|
append_text = '\n\nreturn amiibo_tools\n'
|
|
|
|
data = data + append_text
|
|
|
|
|
|
|
|
return data
|
|
|
|
|
|
|
|
def write_to_file(data, filename):
|
|
|
|
# Write the output
|
|
|
|
with open(filename, 'w', encoding='utf-8') as file:
|
|
|
|
file.write(data)
|
|
|
|
print(f"Output written to {filename}")
|
|
|
|
|
|
|
|
def delete_file(filename):
|
|
|
|
try:
|
|
|
|
os.remove(filename)
|
|
|
|
print(f"Temporary file {filename} deleted")
|
|
|
|
except OSError as e:
|
|
|
|
print(f"Error deleting file {filename}: ", e)
|
|
|
|
|
|
|
|
def main():
|
|
|
|
data = fetch_data()
|
|
|
|
if data:
|
|
|
|
filtered_data = filter_data(data)
|
|
|
|
save_data(filtered_data, 'amiibo.json')
|
|
|
|
processed_data = process_file('amiibo.json')
|
|
|
|
write_to_file(processed_data, 'amiibo_tools.lua')
|
|
|
|
delete_file('amiibo.json')
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|