Rust port of NewPipeExtractor (YT-only). Plugs into Straw via UniFFI.
Find a file
Sulkta 820daec026 youtube: add channel + search continuation (pagination) extractors
The channel Videos tab and search both parsed the page-1 continuation
token but had no way to fetch the next page. Add the next-page fetchers:

- youtube/continuation.rs (new): shared ContinuationPage + the
  appendContinuationItemsAction/continuationItems unwrap + trailing-token
  scan, parameterised on the container key — onResponseReceivedActions
  for browse/channel, onResponseReceivedCommands for search (matches NPE).
- channel.rs: channel_videos_continuation() POSTs browse with
  {continuation: token}; reuse the page-1 rich-grid item parser (factored
  out as parse_rich_grid_item, now also accepting a bare
  lockupViewModel/videoRenderer cell so a layout variant can't silently
  return an empty page while the token keeps advancing).
- search_extractor.rs: search_continuation() POSTs search with
  {continuation: token}; walk itemSectionRenderer contents via the
  existing extract_item_into.

Empty/last page yields a None token so callers stop. New unit tests over
realistic continuation fixtures (bare-lockup, shelf-in-continuation,
last-page, empty body).
2026-06-19 18:21:23 -07:00
.forgejo/workflows ci: add gitleaks workflow 2026-05-27 22:15:00 -07:00
src youtube: add channel + search continuation (pagination) extractors 2026-06-19 18:21:23 -07:00
tests chore: scrub internal references and tighten README 2026-05-27 13:29:52 -07:00
.gitignore Initial commit 2026-05-24 16:26:57 -07:00
Cargo.lock Rename package to strawcore-core 2026-05-24 17:28:38 -07:00
Cargo.toml Drop cdylib + staticlib from strawcore-core crate-type 2026-05-24 17:40:37 -07:00
LICENSE Initial commit 2026-05-24 16:26:57 -07:00
README.md chore: scrub internal references and tighten README 2026-05-27 13:29:52 -07:00

strawcore

Rust port of NewPipeExtractor (v0.26.2), YouTube-only. Plugs into Straw via UniFFI.

rustypipe regex-parses YouTube's player.js and reimplements the signature deobfuscator in Rust — every YT player rotation breaks it. NPE embeds a JS engine and executes the function live, which survives rotations. strawcore mirrors that architecture on QuickJS via rquickjs.

Build + test

cargo build
cargo test --lib                          # offline unit tests
cargo test --features online-tests        # full smoke incl. live httpbin.org

License

GPL-3.0-or-later. NPE is GPL-3.0; this port inherits.