22import os
33import json
44from datetime import datetime , timedelta
5+ import shutil
56
67GITHUB_API_URL = "https://api.github.com/search/repositories"
78HEADERS = {"Accept" : "application/vnd.github+json" }
89CACHE_FILE = "repos_cache.json"
910CACHE_DURATION_MINUTES = 30 # adjust if needed
11+ OLD_DIR = "old"
12+ HTML_FILE = "index.html"
1013
1114def fetch_awesome_repositories (per_page = 100 , max_pages = 10 , use_cache = True ):
1215 if use_cache and os .path .exists (CACHE_FILE ):
@@ -36,6 +39,16 @@ def fetch_awesome_repositories(per_page=100, max_pages=10, use_cache=True):
3639
3740 return all_repos
3841
42+ def backup_old_html ():
43+ if os .path .exists (HTML_FILE ):
44+ if not os .path .exists (OLD_DIR ):
45+ os .makedirs (OLD_DIR )
46+ timestamp = datetime .utcnow ().strftime ("%d-%m-%Y" )
47+ backup_filename = f"index-{ timestamp } .html"
48+ backup_path = os .path .join (OLD_DIR , backup_filename )
49+ shutil .move (HTML_FILE , backup_path )
50+ print (f"Backed up old index.html → { backup_path } " )
51+
3952def generate_index_html (repos ):
4053 timestamp = datetime .utcnow ().strftime ("%Y-%m-%d %H:%M UTC" )
4154 cards_html = "\n " .join ([
@@ -70,46 +83,37 @@ def generate_index_html(repos):
7083 <meta name="description" content="A curated list of awesome repositories for developers, engineers, and tech enthusiasts. Updated regularly.">
7184 <meta name="keywords" content="GitHub, repositories, open source, developer tools, awesome list, projects, software, code">
7285 <meta name="author" content="Awesome Repositories - M">
73-
74- <!-- Favicon and Icons -->
7586 <link rel="icon" type="image/png" sizes="32x32" href="assets/awesome-repo.png">
7687 <link rel="apple-touch-icon" sizes="180x180" href="assets/awesome-repo.png">
7788 <link rel="icon" type="image/png" sizes="16x16" href="assets/awesome-repo.png">
7889 <link rel="shortcut icon" href="assets/awesome-repo.png">
79-
80-
81- <!-- Open Graph / Facebook -->
8290 <meta property="og:title" content="Awesome Repositories">
8391 <meta property="og:description" content="A curated list of awesome repositories for developers and tech enthusiasts.">
8492 <meta property="og:type" content="website">
8593 <meta property="og:url" content="https://maheshndev.github.io/awesome-repos/">
8694 <meta property="og:image" content="assets/awesome-repo.png">
87-
88- <!-- Twitter -->
8995 <meta name="twitter:card" content="summary_large_image">
9096 <meta name="twitter:title" content="Awesome Repositories">
9197 <meta name="twitter:description" content="A curated list of awesome repositories for developers and tech enthusiasts.">
9298 <meta name="twitter:image" content="assets/awesome-repo.png">
93-
9499 <script src="https://cdn.tailwindcss.com"></script>
95100</head>
96101<body class="bg-gray-100 min-h-screen p-6">
97102 <div class="max-w-7xl mx-auto">
98- <img src="assets/awesome-repos.png" width="50px" height="50px"> <h1 class="text-4xl font-bold mb-4">🚀 Awesome Repositories</h1>
103+ <img src="assets/awesome-repos.png" width="50px" height="50px"> <h1 class="text-4xl font-bold mb-4">🚀 Awesome Repositories</h1>
99104 <p class="text-sm text-gray-500 mb-6">Last updated: { timestamp } </p>
100105 <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
101106 { cards_html }
102107 </div>
103108 </div>
104109</body>
105110</html>
106-
107111"""
108- with open ("index.html" , "w" , encoding = "utf-8" ) as f :
112+ with open (HTML_FILE , "w" , encoding = "utf-8" ) as f :
109113 f .write (html )
114+ print (f"✅ New index.html generated." )
110115
111116def generate_readme_md (repos ):
112- timestamp = datetime .utcnow ().strftime ("%Y-%m-%d %H:%M UTC" )
113117 rows = "\n " .join ([
114118 f"| [{ repo ['full_name' ]} ]({ repo ['html_url' ]} ) | { repo .get ('description' , 'No description.' )} | ⭐ { repo ['stargazers_count' ]} | { repo ['language' ] or 'N/A' } |"
115119 for repo in repos
@@ -124,8 +128,10 @@ def generate_readme_md(repos):
124128"""
125129 with open ("README.md" , "w" , encoding = "utf-8" ) as f :
126130 f .write (markdown )
131+ print (f"✅ README.md updated." )
127132
128133if __name__ == "__main__" :
129134 repos = fetch_awesome_repositories ()
135+ backup_old_html ()
130136 generate_index_html (repos )
131137 generate_readme_md (repos )
0 commit comments