Spaces:
Sleeping
Sleeping
File size: 3,067 Bytes
b0fe809 3b899cf b0fe809 3b899cf b0fe809 6b56fd3 b0fe809 6b56fd3 b0fe809 3b899cf 6b56fd3 3b899cf 6b56fd3 b0fe809 6b56fd3 b0fe809 6b56fd3 b0fe809 47e94f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
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()
|