addEventListener("fetch", (event) => { event.respondWith( handleRequest(event.request).catch( (err) => new Response(err.stack, { status: 500 }) ) ); }); async function handleRequest(request) { const { pathname } = new URL(request.url); if (pathname.startsWith("/api")) { return new Response(JSON.stringify({ pathname }), { headers: { "Content-Type": "application/json" }, }); } if (pathname === "/") { if (request.method === "GET") { const index = await static.get('index'); return new Response(index, { headers: { "Content-Type": "text/html;charset=utf-8" } }) } else if (request.method === "POST") return parse_douyin_url(request); return new Response("index"); } return new Response('hello'); } async function parse_douyin_url(request) { const { headers } = request const contentType = headers.get("content-type") || "" try { if (contentType.includes("application/json")) { let data = await request.json(); let room_data = data.room_id; //如果不是房间id需要进行解析 if (room_data.includes('v.douyin.com')) { let response = await fetch(new Request(room_data, { headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" } })) let regex = /(\d{19})/gm; let l = regex.exec(response.url); room_data = l[0]; } let response = await fetch(new Request(`https://webcast.amemv.com/webcast/reflow/${room_data}`, { headers: { "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" } })) let t = await response.text(); let flv_regex = /"rtmp_pull_url":"(.*?flv)"/; let hls_regex = /"hls_pull_url":"(.*?m3u8)"/; let flv = flv_regex.exec(t); let hls = hls_regex.exec(t); return new Response(JSON.stringify({ status: 0, rtmp_pull_url: flv[1].replace("_hd", "").replace("http://","https://"), hls_pull_url: hls[1].replace("_hd", "").replace("http://","https://") }), { headers: { "Content-Type": "application/json" } }); } } catch (e) { return new Response(JSON.stringify({ status: 1 }), { headers: { "Content-Type": "application/json" }, status: 500 }); } }