Conversation
/fb/ shipped as connected-Pages-only, on the grounds that Graph reaches only Pages the caller administers. That was true and it was also inconsistent: X is read with an auth_token cookie and Instagram with an IG_COOKIE, and refusing Facebook the same bargain made /fb/ a namespace almost nobody could add to. So a Page is now read the way the other two are — a logged-in session against mbasic.facebook.com, which still renders server-side HTML and which 302s to login.php rather than 404ing, so it is gated rather than gone. Graph is kept and preferred where a token happens to exist for a Page, because a supported API beats guessing at markup; it is never required. Both paths key on the post id, so a Page that gains a token later keeps its identity and nobody's reader marks the feed unread. /fb/ now takes open submissions like the other three. This is the least dependable thing in the directory and the code says so rather than the README alone: - every selector lives in one SELECTORS object, so the inevitable break is one edit in one known place - a login wall or checkpoint is classified as an auth failure, which retires the SESSION and never the Page. Ten failures retire a feed, so getting this wrong would delete the namespace in an afternoon - each platform now has its own floor rather than sharing X's five minutes: X 5, Instagram 30, Facebook 60. The cost of asking Facebook too often is a locked account, not a 429, and a Page that posts twice a week loses nothing to an hourly floor Two bugs found on the way, both real: - the vanity-name regex required five characters, which is Facebook's rule for usernames created now and not for Pages that already exist. facebook.com/NASA is four, so real Pages were being rejected outright - "no session configured" was classified as an upstream anomaly (twenty minutes) rather than as a deployment that has not happened (an hour), alongside the equivalent cases for the other platforms Layering fix while here: packages/db no longer imports @rssamplifier/social for the interval — the caller supplies it, since social reads nothing from db and db has no reason to know what a platform is. 97 tests in packages/social, 1,354 across 12 packages, all green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q6QEgpuS4MLamogXtr2ZX6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
/fb/shipped as connected-Pages-only, on the grounds that Graph reaches only Pages the caller administers. That was true and it was also inconsistent: X is read with anauth_tokencookie and Instagram with anIG_COOKIE, and refusing Facebook the same bargain made/fb/a namespace almost nobody could add to.So a Page is now read the way the other two are — a logged-in session against
mbasic.facebook.com, which still renders server-side HTML and which 302s tologin.phprather than 404ing, so it is gated rather than gone.Graph is kept and preferred where a token happens to exist, because a supported API beats guessing at markup. It is never required. Both paths key on the post id, so a Page that gains a token later keeps its identity and nobody's reader marks the feed unread.
/fb/now takes open submissions like the other three.This is the least dependable thing in the directory
RSSHub maintains Twitter and Instagram and has no Facebook namespace. That is a verdict, not an oversight. So the fragility is handled in code rather than promised away in the README:
SELECTORSobject, so the inevitable break is one edit in one known place — fetch a page with a live cookie, look at the HTML, edit that object.Two real bugs found on the way
facebook.com/NASAis four — real Pages were rejected outrightAlso a layering fix:
packages/dbno longer imports@rssamplifier/socialfor the interval — the caller supplies it, since social reads nothing from db and db has no reason to know what a platform is.Verified
97 tests in
packages/social(9 new, against an mbasic-shaped fixture), 1,354 across 12 packages, all green. Build clean.The selectors themselves are not verified — only a live cookie proves those, and they will change regardless. What is verified is everything around them: the login wall classifies correctly, a post with no id is dropped rather than stored undeduplicatable, relative mbasic links come out pointing at facebook.com, and an unparseable relative date stays null rather than being stamped
now.Collects nothing until
FB_COOKIEis set.🤖 Generated with Claude Code
https://claude.ai/code/session_01Q6QEgpuS4MLamogXtr2ZX6