国内外BT tracker列表集合
用 cloudflare works搓了一个从url拉取 tracker
| 格式 | 链接 |
|---|---|
| raw | https://tracker.heinu.cc |
| aria2 | https://tracker.heinu.cc/?aria2 |
源码:
export default {
async fetch(request, env) {
const CACHE_KEY = "bt-trackers";
const CACHE_TTL = 600; // 缓存
const url = new URL(request.url);
const wantAria2 = url.searchParams.has("aria2");
const cached = await env.TRACKERS.get(CACHE_KEY);
if (cached) {
return respond(cached, wantAria2);
}
// 来源列表
const sources = [
"https://trackers.run/s/wp_ws_up_hp_hs_v4_v6.txt",
"https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_all.txt",
"https://gist.github.com/elysias123/b4596c804419a1b56a8d91dbf88cb775", // 我自己收集的
"https://down.adysec.com/trackers_all.txt",
"https://trackerslist.com/all.txt"
];
const results = await Promise.all(
sources.map(url =>
fetch(url).then(r => r.text()).catch(() => "")
)
);
let lines = [];
for (let txt of results) {
if (!txt) continue;
try {
const js = JSON.parse(txt);
if (Array.isArray(js)) {
lines.push(...js);
continue;
}
} catch (_) {}
lines.push(...txt.split(/[\n\r]+/));
}
lines = lines
.map(l => l.trim())
.filter(l => l.length > 0);
const formatted = lines
.filter(l =>
l.startsWith("udp://") ||
l.startsWith("http://") ||
l.startsWith("https://") ||
l.startsWith("wss://")
)
.filter(Boolean);
const finalList = [...new Set(formatted)].sort();
const output = finalList.join("\n");
env.TRACKERS.put(CACHE_KEY, output, { expirationTtl: CACHE_TTL });
return respond(output, wantAria2);
}
};
function respond(listTxt, wantAria2) {
if (!wantAria2) {
return new Response(listTxt, {
headers: { "content-type": "text/plain; charset=utf-8" }
});
}
const aria2Value = "bt-tracker=" + listTxt.replace(/\n+/g, ",");
return new Response(aria2Value, {
headers: { "content-type": "text/plain; charset=utf-8" }
});
}