Files
tvbox_collect/BINGO-TV/merge/fetch_tvbox_raw_urls.py
T
2026-07-11 04:45:19 +00:00

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)