58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
import requests
|
|
import os
|
|
from datetime import datetime
|
|
|
|
# 搜索关键词
|
|
KEYWORDS = ['荐片', '采集', '.spider']
|
|
# GitHub Token,可去 https://github.com/settings/tokens 申请,公开库搜索可不填
|
|
GITHUB_TOKEN = os.getenv('MY_GH_TOKEN')
|
|
HEADERS = {'Accept': 'application/vnd.github.v3+json'}
|
|
if GITHUB_TOKEN:
|
|
HEADERS['Authorization'] = f'token {GITHUB_TOKEN}'
|
|
|
|
# 输出目录和文件名
|
|
OUTPUT_DIR = 'merge'
|
|
OUTPUT_FILE = 'tvbox_repos.txt'
|
|
|
|
def get_repositories():
|
|
repos = []
|
|
for keyword in KEYWORDS:
|
|
print(f"正在搜索关键词: {keyword}")
|
|
url = f'https://api.github.com/search/code?q={keyword}+in:file&per_page=100'
|
|
try:
|
|
response = requests.get(url, headers=HEADERS)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
items = data.get('items', [])
|
|
print(f"找到 {len(items)} 个包含关键词 '{keyword}' 的文件")
|
|
for item in items:
|
|
repo = item.get('repository')
|
|
if repo:
|
|
repo_name = repo.get('full_name')
|
|
updated_at = repo.get('updated_at')
|
|
if repo_name and updated_at:
|
|
updated_time = datetime.strptime(updated_at, '%Y-%m-%dT%H:%M:%SZ')
|
|
repos.append((repo_name, updated_time))
|
|
except requests.RequestException as e:
|
|
print(f"搜索关键词 {keyword} 时出错: {e}")
|
|
# 去重并排序
|
|
unique_repos = {}
|
|
for repo_name, updated_time in repos:
|
|
if repo_name not in unique_repos or updated_time > unique_repos[repo_name]:
|
|
unique_repos[repo_name] = updated_time
|
|
sorted_repos = sorted(unique_repos.items(), key=lambda x: x[1], reverse=True)
|
|
return [repo[0] for repo in sorted_repos]
|
|
|
|
def save_to_file(repos):
|
|
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
output_path = os.path.join(OUTPUT_DIR, OUTPUT_FILE)
|
|
with open(output_path, 'w', encoding='utf-8') as f:
|
|
for repo in repos:
|
|
f.write(repo + '')
|
|
print(f"已保存 {len(repos)} 个仓库名到 {output_path},按更新时间排序,最新的在前。")
|
|
|
|
if __name__ == "__main__":
|
|
repos = get_repositories()
|
|
save_to_file(repos)
|
|
|