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}