Add an Instapaper connector so Instapaper users can serve their queue as an OPDS catalog.
Why
Second half of the README's "more connectors (Instapaper, Wallabag)" promise. Shipping Wallabag + Instapaper together makes multi-backend support the 1.0 headline rather than a promissory note.
Scope
- Implement
connectors/instapaper.py against connectors/base.py.
- Instapaper's Full API uses OAuth 1.0a (xAuth) — consumer key/secret + username/password → access token. Handle signing.
- Folders: Instapaper has Unread / Archive / Starred + user-defined folders. Map the built-ins at minimum.
- Article HTML: Instapaper's
bookmarks/get_text returns cleaned article HTML — use it for get_article_html.
- Note: Full API access requires Instapaper subscription/approval; document this caveat.
- Config:
INSTAPAPER_CONSUMER_KEY/SECRET, INSTAPAPER_USERNAME/PASSWORD in .env.example + config.py.
Acceptance criteria
Add an Instapaper connector so Instapaper users can serve their queue as an OPDS catalog.
Why
Second half of the README's "more connectors (Instapaper, Wallabag)" promise. Shipping Wallabag + Instapaper together makes multi-backend support the 1.0 headline rather than a promissory note.
Scope
connectors/instapaper.pyagainstconnectors/base.py.bookmarks/get_textreturns cleaned article HTML — use it forget_article_html.INSTAPAPER_CONSUMER_KEY/SECRET,INSTAPAPER_USERNAME/PASSWORDin.env.example+config.py.Acceptance criteria
test_readwise.py(mocked HTTP)..env.exampleupdated, including the API-access caveat.