Spaces:
Sleeping
Sleeping
import gradio as gr | |
import requests | |
import matplotlib.pyplot as plt | |
# Function to fetch repository details from GitHub and generate a visualization | |
def analyze_github_repo(repo_url): | |
# Extract the username and repo name from the GitHub URL | |
if "github.com" not in repo_url: | |
return "Please provide a valid GitHub repository URL." | |
parts = repo_url.split('/') | |
if len(parts) < 5: | |
return "URL should be in the format: https://github.com/username/repository" | |
user, repo = parts[3], parts[4] | |
# GitHub API endpoint to get repository details | |
api_url = f"https://api.github.com/repos/{user}/{repo}" | |
response = requests.get(api_url) | |
# Check if repository exists | |
if response.status_code == 404: | |
return "Repository not found." | |
# Parse the response | |
data = response.json() | |
# Extract relevant information | |
stars = data.get('stargazers_count', 'N/A') | |
forks = data.get('forks_count', 'N/A') | |
issues = data.get('open_issues_count', 'N/A') | |
contributors_url = data.get('contributors_url', None) | |
# Get number of contributors and their contributions (commit count) | |
contributors = [] | |
if contributors_url: | |
contributors_data = requests.get(contributors_url).json() | |
for contributor in contributors_data: | |
contributors.append({ | |
'login': contributor['login'], | |
'contributions': contributor['contributions'] | |
}) | |
# Data to plot | |
metrics = { | |
'Stars': stars, | |
'Forks': forks, | |
'Open Issues': issues, | |
'Contributors': len(contributors) | |
} | |
# Create the bar plot | |
fig, ax = plt.subplots() | |
ax.bar(metrics.keys(), metrics.values(), color=['blue', 'green', 'red', 'orange']) | |
ax.set_xlabel('Metrics') | |
ax.set_ylabel('Count') | |
ax.set_title(f"GitHub Repository Analysis: {repo_url}") | |
# Save the plot as an image | |
plt.tight_layout() | |
plt.savefig("/mnt/data/github_analysis.png") | |
plt.close() | |
# Prepare contributor data for display | |
contributor_info = "Contributors and Their Commit Contributions:\n" | |
for contributor in contributors: | |
contributor_info += f"{contributor['login']}: {contributor['contributions']} contributions\n" | |
# Combine the visualization link and contributor data | |
result = f"Repository: {repo_url}\n\n{contributor_info}\nImage of Repository Analysis:\n/mnt/data/github_analysis.png" | |
return result, "/mnt/data/github_analysis.png" | |
# Gradio interface for the tool | |
iface = gr.Interface( | |
fn=analyze_github_repo, | |
inputs=gr.Textbox(label="Enter GitHub Repository URL", placeholder="https://github.com/username/repository"), | |
outputs=[gr.Textbox(label="Repository Analysis"), gr.Image(label="Repository Analysis Visualization")], | |
title="GitHub Repository Analysis Tool", | |
description="Enter a GitHub repository URL to get basic analytics including stars, forks, issues, and contributors, along with a visual chart and contributor details." | |
) | |
# Launch the app | |
iface.launch() | |