mirror of
https://github.com/Ride-The-Lightning/RTL.git
synced 2026-08-13 12:33:07 +02:00
86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
import os
|
|
import gspread
|
|
import requests
|
|
from datetime import datetime
|
|
from oauth2client.service_account import ServiceAccountCredentials
|
|
|
|
# --- CONFIGURATION ---
|
|
# GitHub repository details
|
|
GITHUB_REPO = "Ride-The-Lightning/RTL" # e.g., "google/gemini"
|
|
|
|
# Get credentials from environment variables (for GitHub Actions)
|
|
# For local testing, you can temporarily hardcode these or set them in your terminal
|
|
GITHUB_TOKEN = os.getenv('GH_TOKEN')
|
|
GOOGLE_SHEETS_CREDENTIALS = os.getenv('GOOGLE_SHEETS_CREDENTIALS')
|
|
|
|
# --- MAIN SCRIPT ---
|
|
def get_github_traffic(repo, token, metric):
|
|
"""Fetches view or clone traffic data from the GitHub API."""
|
|
url = f"https://api.github.com/repos/{repo}/traffic/{metric}"
|
|
headers = {
|
|
"Authorization": f"token {token}",
|
|
"Accept": "application/vnd.github.v3+json"
|
|
}
|
|
try:
|
|
response = requests.get(url, headers=headers)
|
|
response.raise_for_status() # Raises an error for bad responses (4xx or 5xx)
|
|
data = response.json()
|
|
print(f"Successfully fetched {metric} data. Total: {data['count']}, Unique: {data['uniques']}.")
|
|
return data
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"Error fetching GitHub data for {metric}: {e}")
|
|
return None
|
|
|
|
def main():
|
|
"""Main function to fetch data and write to Google Sheets."""
|
|
# 1. Authenticate with Google Sheets
|
|
try:
|
|
scope = ["https://spreadsheets.google.com/feeds", 'https://www.googleapis.com/auth/spreadsheets',
|
|
"https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
|
|
|
|
# Use credentials from environment variable
|
|
creds = ServiceAccountCredentials.from_json_keyfile_name(GOOGLE_SHEETS_CREDENTIALS, scope)
|
|
client = gspread.authorize(creds)
|
|
|
|
# Open the worksheet
|
|
# Make sure your service account email has editor access to this sheet
|
|
sheet = client.open("GitHub Repo Traffic").sheet1
|
|
print("Successfully connected to Google Sheets.")
|
|
except Exception as e:
|
|
print(f"Error connecting to Google Sheets: {e}")
|
|
return
|
|
|
|
# 2. Fetch traffic data from GitHub
|
|
views_data = get_github_traffic(GITHUB_REPO, GITHUB_TOKEN, "views")
|
|
clones_data = get_github_traffic(GITHUB_REPO, GITHUB_TOKEN, "clones")
|
|
|
|
# 3. Prepare and append the data
|
|
if views_data and clones_data:
|
|
today_str = datetime.now().strftime("%Y-%m-%d")
|
|
|
|
# Create a new row with today's summary
|
|
new_row = [
|
|
today_str,
|
|
views_data['count'],
|
|
views_data['uniques'],
|
|
clones_data['count'],
|
|
clones_data['uniques']
|
|
]
|
|
|
|
# Check if headers are needed
|
|
if not sheet.get_all_values():
|
|
sheet.append_row(["Date", "Total Views", "Unique Views", "Total Clones", "Unique Clones"])
|
|
|
|
sheet.append_row(new_row)
|
|
print(f"Successfully appended data for {today_str} to the sheet.")
|
|
|
|
if __name__ == "__main__":
|
|
# For local testing, you need to set up the credentials file path
|
|
# For example: os.environ['GOOGLE_SHEETS_CREDENTIALS'] = 'your-key-file.json'
|
|
# And your GitHub token: os.environ['GH_TOKEN'] = 'your_github_token'
|
|
|
|
# Check if credentials are set
|
|
if not GITHUB_TOKEN or not GOOGLE_SHEETS_CREDENTIALS:
|
|
print("Error: Required environment variables GH_TOKEN or GOOGLE_SHEETS_CREDENTIALS are not set.")
|
|
else:
|
|
main()
|