Files
Scraper/upload_apks_to_gitea.py
2025-08-08 18:51:29 +02:00

105 lines
3.5 KiB
Python

import os
import glob
import time
import requests
from datetime import datetime
# Konfiguration
GITEA_URL = "https://git.felo.gg"
OWNER = "FeloStore"
REPO = "Data"
TAG = "latest"
TOKEN = "YOUR_GIT_AUTH_TOKEN_HERE"
DOWNLOAD_FOLDER = os.path.join(os.environ["USERPROFILE"], "Downloads") # Windows-kompatibel
HEADERS = {
"Authorization": f"token {TOKEN}"
}
def get_release_id_by_tag():
url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/tags/{TAG}"
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
release = response.json()
return release["id"]
else:
print(f"❌ Release with Tag '{TAG}' not found. Status: {response.status_code}")
return None
def get_existing_assets(release_id):
url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}"
response = requests.get(url, headers=HEADERS)
if response.status_code == 200:
release = response.json()
return release.get("assets", [])
else:
print(f"❌ Error. Status: {response.status_code}")
return []
def delete_asset(release_id, asset_id):
"""Deletes an Asset with its ID"""
url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}/assets/{asset_id}"
response = requests.delete(url, headers=HEADERS)
if response.status_code in [200, 204]:
print(f"✅ Asset deleted.")
return True
else:
print(f"❌ Error: {response.status_code} {response.text}")
return False
def upload_apk(release_id, file_path):
filename = os.path.basename(file_path)
assets = get_existing_assets(release_id)
for asset in assets:
if asset["name"] == filename:
print(f"🔄 Old Version of {filename} found. Deleting...")
if delete_asset(release_id, asset["id"]):
time.sleep(1)
else:
print(f"⚠️ Couldnt delete old version of {filename}, overwriting...")
print(f"Hochladen: {filename}")
url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}/assets"
with open(file_path, "rb") as f:
files = {"attachment": (filename, f)}
response = requests.post(url, headers=HEADERS, files=files)
if response.status_code == 201:
print(f"✅ Successfully uploaded: {filename}")
return True
else:
print(f"❌ Error: {response.status_code} {response.text}")
return False
def delete_apk_files(apk_files):
print(f"Wait 10 seconds before deleting the files...")
time.sleep(10)
for apk in apk_files:
filename = os.path.basename(apk)
try:
os.remove(apk)
print(f"🗑️ APK-File deleted: {filename}")
except Exception as e:
print(f"⚠️ Error: {str(e)}")
def main():
print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Starte Scan...")
release_id = get_release_id_by_tag()
if release_id is None:
return
apk_files = glob.glob(os.path.join(DOWNLOAD_FOLDER, "*.apk"))
if not apk_files:
print("No .apk Files found.")
return
successfully_uploaded = []
for apk in apk_files:
if upload_apk(release_id, apk):
successfully_uploaded.append(apk)
if successfully_uploaded:
delete_apk_files(successfully_uploaded)
if __name__ == "__main__":
main()