152 lines
4.7 KiB
Python
152 lines
4.7 KiB
Python
import argparse
|
|
import json
|
|
import os
|
|
from io import StringIO
|
|
|
|
import mistletoe
|
|
import pandas as pd
|
|
from bs4 import BeautifulSoup
|
|
from github import Github
|
|
|
|
from get_bundle_id import get_single_bundle_id
|
|
|
|
|
|
def transform_object(original_object):
|
|
transformed_object = {**original_object, "apps": None}
|
|
|
|
app_map = {}
|
|
|
|
for app in original_object["apps"]:
|
|
(
|
|
name,
|
|
bundle_identifier,
|
|
version,
|
|
version_date,
|
|
size,
|
|
download_url,
|
|
developer_name,
|
|
localized_description,
|
|
icon_url,
|
|
) = (
|
|
app["name"],
|
|
app["bundleIdentifier"],
|
|
app["version"],
|
|
app["versionDate"],
|
|
app["size"],
|
|
app["downloadURL"],
|
|
app["developerName"],
|
|
app["localizedDescription"],
|
|
app["iconURL"],
|
|
)
|
|
|
|
if name not in app_map:
|
|
app_map[name] = {
|
|
"name": name,
|
|
"bundleIdentifier": bundle_identifier,
|
|
"developerName": developer_name,
|
|
"iconURL": icon_url,
|
|
"versions": [],
|
|
}
|
|
|
|
app_map[name]["versions"].append(
|
|
{
|
|
"version": version,
|
|
"date": version_date,
|
|
"size": size,
|
|
"downloadURL": download_url,
|
|
"localizedDescription": localized_description,
|
|
}
|
|
)
|
|
|
|
for name, app_info in app_map.items():
|
|
app_info["versions"].sort(key=lambda x: x["date"], reverse=True)
|
|
|
|
transformed_object["apps"] = list(app_map.values())
|
|
|
|
return transformed_object
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-t", "--token", help="Github token")
|
|
args = parser.parse_args()
|
|
token = args.token
|
|
|
|
with open("apps.json", "r") as f:
|
|
data = json.load(f)
|
|
|
|
if os.path.exists("bundleId.csv"):
|
|
df = pd.read_csv("bundleId.csv")
|
|
else:
|
|
df = pd.DataFrame(columns=["name", "bundleId"])
|
|
|
|
md_df = None
|
|
if os.path.exists("README.md"):
|
|
with open("README.md", "r", encoding="utf-8") as f:
|
|
raw_md = f.read()
|
|
html = mistletoe.markdown(raw_md)
|
|
soup = BeautifulSoup(html, "html.parser")
|
|
table = soup.find_all("table")[1]
|
|
md_df = pd.read_html(StringIO(str(table)), keep_default_na=False)[0]
|
|
md_df["App Name"] = md_df["App Name"].str.replace(" ", "").str.lower()
|
|
|
|
# clear apps
|
|
data["apps"] = []
|
|
|
|
g = Github(token)
|
|
repo = g.get_repo("swaggyP36000/TrollStore-IPAs")
|
|
releases = repo.get_releases()
|
|
|
|
for release in releases:
|
|
print(release.title)
|
|
|
|
for asset in release.get_assets():
|
|
if asset.name[-3:] != "ipa":
|
|
continue
|
|
name = asset.name[:-4]
|
|
date = asset.created_at.strftime("%Y-%m-%d")
|
|
try:
|
|
app_name, version = name.split("-", 1)
|
|
except:
|
|
app_name = name
|
|
version = "1.0"
|
|
|
|
if app_name in df.name.values:
|
|
bundle_id = str(df[df.name == app_name].bundleId.values[0])
|
|
else:
|
|
bundle_id = get_single_bundle_id(asset.browser_download_url)
|
|
df = pd.concat([df, pd.DataFrame({"name": [app_name], "bundleId": [bundle_id]})], ignore_index=True)
|
|
|
|
desc = ""
|
|
dev_name = ""
|
|
if md_df is not None:
|
|
row = md_df.loc[md_df["App Name"] == app_name.replace(" ", "").lower()]
|
|
if len(row.values):
|
|
raw_desc = row["Description"].values[0]
|
|
raw_last_updated = row["Last Updated"].values[0]
|
|
raw_status = row["Status"].values[0]
|
|
desc = f"{raw_desc}\nLast updated: {raw_last_updated}\nStatus: {raw_status}"
|
|
dev_name = f"{row['Source/Maintainer'].values[0]}"
|
|
|
|
data["apps"].append(
|
|
{
|
|
"name": app_name,
|
|
"bundleIdentifier": bundle_id,
|
|
"version": version,
|
|
"versionDate": date,
|
|
"size": asset.size,
|
|
"downloadURL": asset.browser_download_url,
|
|
"developerName": dev_name,
|
|
"localizedDescription": desc,
|
|
"iconURL": f"https://raw.githubusercontent.com/swaggyP36000/TrollStore-IPAs/main/icons/{bundle_id}.png",
|
|
}
|
|
)
|
|
|
|
df.to_csv("bundleId.csv", index=False)
|
|
|
|
with open("apps_esign.json", "w") as json_file:
|
|
json.dump(data, json_file, indent=2)
|
|
|
|
with open("apps.json", "w") as file:
|
|
json.dump(transform_object(data), file, indent=2)
|