code wiki / _hdl_build / nx_feed_extract_gate.nx

nx_feed_extract_gate.nx source

↩ module page · 70 lines · 3185 B

1import "nx_gate_gn.nx" 2import "nx_gate_base.nx" 3// nx_feed_extract_gate.nx -- gate nx_feed_extract on the REAL reddit Atom feed (knowledge/fetched/ap_reddit_rss) 4// + a fetched RSS 2.0 feed if present. PROVES it pulls real per-item title+summary and SHOWS the bytes. 5import "nx_syscalls.nx" 6import "nx_feed_extract.nx" 7 8func grow(name: *u8, ok: i64) -> i64 { if ok==1 { gw(" PASS " as *u8) } else { gw(" FAIL " as *u8) } gw(name); gw(" 9" as *u8); return ok } 10func gread(path: *u8, buf: *u8, cap: i64) -> i64 { 11 let fd: i64 = sys_openat_rd(path) 12 if fd < 0 { return 0 - 1 } 13 var tot: i64 = 0; var go: i64 = 1 14 while go == 1 { let n: i64 = sys_read(fd, (buf as i64 + tot) as *u8, cap - tot); if n <= 0 { go = 0 } else { tot = tot + n; if tot >= cap { go = 0 } } } 15 sys_close(fd); return tot 16} 17 18func main() -> i64 { 19 gw("=== NX-FEED-EXTRACT GATE (real reddit Atom feed; SHOW the mined items) ===\n" as *u8) 20 let cap: i64 = 2000000 21 let buf: *u8 = sys_mmap(cap) 22 let out: *u8 = sys_mmap(cap) 23 var pass: i64 = 0; var total: i64 = 0 24 25 total = total + 1 26 let n: i64 = gread("knowledge/fetched/ap_reddit_rss" as *u8, buf, cap) 27 if n <= 0 { gw(" reddit Atom feed NOT fetched -- run altpath.sh first\n" as *u8) } 28 else { 29 gw(" reddit Atom feed: " as *u8); gn(n); gw(" bytes\n" as *u8) 30 let items: i64 = nx_feed_extract(buf, n, out, cap) 31 gw(" items extracted = " as *u8); gn(items); gw("\n" as *u8) 32 // SHOW the first ~400 chars of extracted indexable text (real bytes) 33 var show: i64 = 0; while out[show] != (0 as u8) { show = show + 1 } 34 if show > 500 { show = 500 } 35 gw(" first-500: " as *u8); sys_write(1, out, show); gw("\n ...\n" as *u8) 36 if items >= 5 { pass = pass + 1 } // a real subreddit feed carries many posts 37 } 38 39 // optional RSS 2.0 feed (if a *.rss20 sample was fetched) 40 let rn: i64 = gread("knowledge/fetched/ap_rss20" as *u8, buf, cap) 41 if rn > 0 { 42 total = total + 1 43 gw(" RSS 2.0 feed: " as *u8); gn(rn); gw(" bytes -> items=" as *u8) 44 let ri: i64 = nx_feed_extract(buf, rn, out, cap) 45 gn(ri); gw("\n" as *u8) 46 if ri >= 3 { pass = pass + 1 } 47 } 48 49 // ---- feed DISCOVERY: find the <link rel=alternate rss/atom> in real page shells ---- 50 gw(" -- feed discovery in real shells --\n" as *u8) 51 let durl: *u8 = sys_mmap(4096) 52 let shells: **u8 = sys_mmap(64) as **u8 53 shells[0] = "knowledge/fetched/sp_bbc" as *u8 54 shells[1] = "knowledge/fetched/ap_oldreddit" as *u8 55 shells[2] = "knowledge/fetched/sp_nyt" as *u8 56 var di: i64 = 0 57 while di < 3 { 58 let sn: i64 = gread(shells[di], buf, cap) 59 if sn > 0 { 60 let f: i64 = nx_feed_discover(buf, sn, durl, 4096) 61 gw(" " as *u8); gw(shells[di]); gw(" -> " as *u8) 62 if f == 1 { gw("FEED " as *u8); gw(durl); gw("\n" as *u8) } else { gw("(no <link rel=alternate feed>)\n" as *u8) } 63 } 64 di = di + 1 65 } 66 67 gw("=== NX-FEED-EXTRACT " as *u8); gn(pass); gw("/" as *u8); gn(total) 68 if pass == total { if total > 0 { gw(" GREEN\n" as *u8); return 0 } } 69 gw(" RED\n" as *u8); return 1 70}