PROXPY / github_store.py
Voxxium's picture
Create github_store.py
4b2085c verified
import os
import json
import time
import base64
import logging
import requests
logger = logging.getLogger("github")
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "")
GITHUB_REPO = "mishableskineetudiant-stack/proxylistfiltered"
FILE_PATH = "proxies_live.json"
def _headers():
h = {"Accept": "application/vnd.github.v3+json"}
if GITHUB_TOKEN:
h["Authorization"] = f"Bearer {GITHUB_TOKEN}"
return h
def save_to_github(proxies_data):
if not GITHUB_TOKEN:
return False
try:
content = json.dumps({
"updated_at": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()),
"count": len(proxies_data),
"proxies": proxies_data,
}, indent=2)
encoded = base64.b64encode(content.encode()).decode()
url = f"https://api.github.com/repos/{GITHUB_REPO}/contents/{FILE_PATH}"
sha = None
try:
r = requests.get(url, headers=_headers(), timeout=10)
if r.status_code == 200:
sha = r.json().get("sha")
except Exception:
pass
body = {"message": f"Update: {len(proxies_data)} proxies", "content": encoded}
if sha:
body["sha"] = sha
r = requests.put(url, json=body, headers=_headers(), timeout=15)
if r.status_code in (200, 201):
logger.info(f"GitHub save OK: {len(proxies_data)}")
return True
logger.error(f"GitHub save failed: {r.status_code}")
return False
except Exception as e:
logger.error(f"GitHub save error: {e}")
return False
def load_from_github():
try:
url = f"https://api.github.com/repos/{GITHUB_REPO}/contents/{FILE_PATH}"
r = requests.get(url, headers=_headers(), timeout=10)
if r.status_code != 200:
return []
content = base64.b64decode(r.json()["content"]).decode()
proxies = json.loads(content).get("proxies", [])
logger.info(f"GitHub load OK: {len(proxies)}")
return proxies
except Exception as e:
logger.error(f"GitHub load error: {e}")
return []