code wiki / _hdl_build / nx_manga_search_gate.nx

nx_manga_search_gate.nx source

↩ module page · 51 lines · 3520 B

1import "nx_gate_base.nx" 2// nx_manga_search_gate.nx -- LIVE smoke for the source-browser parsers: fetch mangadex + nhentai search + a mangadex 3// feed with the sovereign client, run the parsers, print the JSON. Eyeball-verify shapes match before wiring. expect_exit:0 4import "nx_syscalls.nx" 5import "nx_x509_trust_store.nx" 6import "nx_trust_store_load_from_certdata.nx" 7import "nx_https_fetch_follow.nx" 8import "nx_manga_search.nx" 9 10func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 11" as *u8); return ok } 12func fetchp(url: *u8, store: *TrustStore, buf: *u8, cap: i64) -> i64 { 13 let st: *i64 = sys_mmap(8) as *i64 14 let n: i64 = nx_https_fetch_follow_chrome(url, store, buf, cap, 6, st) 15 gw(" fetch "); gw(url); gw(" -> "); if n<=0 { gw("FAIL\n" as *u8); return 0 } 16 let sb: *u8=sys_mmap(16); var v: i64=st[0]; var k: i64=0; if v==0{sb[0]=48 as u8;k=1} let t: *u8=sys_mmap(16); while v>0{t[k]=(48+(v%10)) as u8;v=v/10;k=k+1} var i: i64=0; while i<k{sb[i]=t[k-1-i];i=i+1} sys_write(1,sb,k) 17 gw(" (bytes "); v=n; k=0; if v==0{sb[0]=48 as u8;k=1} while v>0{t[k]=(48+(v%10)) as u8;v=v/10;k=k+1} i=0; while i<k{sb[i]=t[k-1-i];i=i+1} sys_write(1,sb,k); gw(")\n" as *u8) 18 return n 19} 20func main() -> i64 { 21 let r: i64 = nx_trust_store_load_from_certdata("data/mozilla_certdata.txt" as *u8, 512, 4194304) 22 if r <= 0 { gw("certdata fail\n" as *u8); return 1 } 23 let store: *TrustStore = r as *TrustStore 24 let buf: *u8 = sys_mmap(MSS_FETCH_CAP) 25 let out: *u8 = sys_mmap(MSS_OUT_CAP) 26 27 gw("== MANGADEX SEARCH 'naruto' ==\n" as *u8) 28 let n1: i64 = fetchp("https://api.mangadex.org/manga?title=naruto&limit=4&includes[]=cover_art" as *u8, store, buf, MSS_FETCH_CAP) 29 if n1 > 0 { msearch_mangadex(buf, n1, out, MSS_OUT_CAP); gw(out); gw("\n\n" as *u8) } 30 31 gw("== NHENTAI SEARCH 'school' ==\n" as *u8) 32 let n2: i64 = fetchp("https://nhentai.net/search/?q=school" as *u8, store, buf, MSS_FETCH_CAP) 33 if n2 > 0 { msearch_nhentai(buf, n2, out, MSS_OUT_CAP); var e: i64=0; while out[e]!=(0 as u8){e=e+1} var d: i64=e; if d>900{d=900} sys_write(1,out,d); gw("\n...(truncated)\n\n" as *u8) } 34 35 gw("== MANGADEX FEED (Renge to Naruto series) ==\n" as *u8) 36 let n3: i64 = fetchp("https://api.mangadex.org/manga/275c3ee8-bdeb-4070-a333-6add23a8415a/feed?translatedLanguage[]=en&order[chapter]=asc&limit=8" as *u8, store, buf, MSS_FETCH_CAP) 37 if n3 > 0 { mfeed_mangadex(buf, n3, out, MSS_OUT_CAP); gw(out); gw("\n" as *u8) } 38 39 gw("== MANGADEX BROWSE popular (no query) ==\n" as *u8) 40 let n4: i64 = fetchp("https://api.mangadex.org/manga?limit=6&includes[]=cover_art&order[followedCount]=desc" as *u8, store, buf, MSS_FETCH_CAP) 41 if n4 > 0 { msearch_mangadex(buf, n4, out, MSS_OUT_CAP); var e: i64=0; while out[e]!=(0 as u8){e=e+1} var d: i64=e; if d>700{d=700} sys_write(1,out,d); gw("\n...(trunc)\n" as *u8) } 42 43 gw("== NHENTAI BROWSE homepage (recent) ==\n" as *u8) 44 let n5: i64 = fetchp("https://nhentai.net/" as *u8, store, buf, MSS_FETCH_CAP) 45 if n5 > 0 { msearch_nhentai(buf, n5, out, MSS_OUT_CAP); var e2: i64=0; while out[e2]!=(0 as u8){e2=e2+1} var d2: i64=e2; if d2>500{d2=500} sys_write(1,out,d2); gw("\n...(trunc)\n" as *u8) } 46 47 gw("== MANGADEX RANDOM ==\n" as *u8) 48 let n6: i64 = fetchp("https://api.mangadex.org/manga/random?includes[]=cover_art" as *u8, store, buf, MSS_FETCH_CAP) 49 if n6 > 0 { msearch_mangadex(buf, n6, out, MSS_OUT_CAP); gw(out); gw("\n" as *u8) } 50 return 0 51}