{"id":18221843,"url":"https://github.com/karlicoss/instapexport","last_synced_at":"2025-10-14T01:15:18.593Z","repository":{"id":45150200,"uuid":"231793729","full_name":"karlicoss/instapexport","owner":"karlicoss","description":"Export your personal Instapaper data: bookmarked articles and highlights","archived":false,"fork":false,"pushed_at":"2025-09-03T00:15:01.000Z","size":48,"stargazers_count":30,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-29T09:53:13.816Z","etag":null,"topics":["backup","data-liberation","export","instapaper","takeout"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/karlicoss.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-01-04T16:27:43.000Z","updated_at":"2025-09-03T00:15:03.000Z","dependencies_parsed_at":"2023-11-07T23:19:51.035Z","dependency_job_id":null,"html_url":"https://github.com/karlicoss/instapexport","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/karlicoss/instapexport","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karlicoss%2Finstapexport","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karlicoss%2Finstapexport/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karlicoss%2Finstapexport/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karlicoss%2Finstapexport/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/karlicoss","download_url":"https://codeload.github.com/karlicoss/instapexport/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/karlicoss%2Finstapexport/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017453,"owners_count":26086081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","data-liberation","export","instapaper","takeout"],"created_at":"2024-11-03T22:04:45.424Z","updated_at":"2025-10-14T01:15:18.573Z","avatar_url":"https://github.com/karlicoss.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+begin_src python :dir src :results drawer :exports results\nimport instapexport.export as E; return E.make_parser().prog\n#+end_src\n\n#+RESULTS:\n:results:\n\nExport your personal Instapaper data: bookmarked articles and highlights.\n:end:\n\n* Setting up\n1. The easiest way is =pip3 install --user git+https://github.com/karlicoss/instapexport=.\n\n   Alternatively, use =git clone --recursive=, or =git pull \u0026\u0026 git submodules update --init=. After that, you can use =pip3 install --editable=.\n2. To use the API, you'd need to [[https://www.instapaper.com/main/request_oauth_consumer_token][request =oauth_id= and =oauth_secret=]] first\n3. Once you recieved them, use this to get =oauth_token= and =oauth_token_secret= (you only need to do it once): ~./export.py --login~\n \n* Exporting\n\n#+begin_src python :dir src :results drawer :exports results\nimport instapexport.export as E; return E.make_parser().epilog\n#+end_src\n\n#+RESULTS:\n:results:\n\nUsage:\n\n*Recommended*: create =secrets.py= keeping your api parameters, e.g.:\n\n\n: oauth_id = \"OAUTH_ID\"\n: oauth_secret = \"OAUTH_SECRET\"\n: oauth_token = \"OAUTH_TOKEN\"\n: oauth_token_secret = \"OAUTH_TOKEN_SECRET\"\n\n\nAfter that, use:\n\n: python3 -m instapexport.export --secrets /path/to/secrets.py\n\nThat way you type less and have control over where you keep your plaintext secrets.\n\n*Alternatively*, you can pass parameters directly, e.g.\n\n: python3 -m instapexport.export --oauth_id \u003coauth_id\u003e --oauth_secret \u003coauth_secret\u003e --oauth_token \u003coauth_token\u003e --oauth_token_secret \u003coauth_token_secret\u003e\n\nHowever, this is verbose and prone to leaking your keys/tokens/passwords in shell history.\n\n\nYou can also import ~instapexport.export~ as a module and call ~get_json~ function directly to get raw JSON.\n\n\nI *highly* recommend checking exported files at least once just to make sure they contain everything you expect from your export. If not, please feel free to ask or raise an issue!\n\n:end:\n\n* Using the data\n  \n#+begin_src python :dir src  :results drawer :exports results\nimport instapexport.exporthelpers.dal_helper as D; return D.make_parser().epilog\n#+end_src\n\n#+RESULTS:\n:results:\n\nYou can use =instapexport.dal= (stands for \"Data Access/Abstraction Layer\") to access your exported data, even offline.\nI elaborate on motivation behind it [[https://beepb00p.xyz/exports.html#dal][here]].\n\n- main usecase is to be imported as python module to allow for *programmatic access* to your data.\n\n  You can find some inspiration in [[https://beepb00p.xyz/mypkg.html][=my.=]] package that I'm using as an API to all my personal data.\n\n- to test it against your export, simply run: ~python3 -m instapexport.dal --source /path/to/export~\n\n- you can also try it interactively: ~python3 -m instapexport.dal --source /path/to/export --interactive~\n\n:end:\n\nExample output:\n\n: Parsed 203 pages\n: 10 most highlighed pages:\n:   41 https://www.wired.com/1995/06/xanadu/ \"The Curse of Xanadu\"\n:   14 https://jborichevskiy.com/posts/digital-tools/ \"Digital Tools I Wish Existed\"\n:   12 http://slatestarcodex.com/2017/08/07/contra-grant-on-exaggerated-differences/ \"Contra Grant On Exaggerated Differences\"\n:   12 https://slatestarcodex.com/2019/06/04/book-review-the-secret-of-our-success/ \"Book Review: The Secret Of Our Success\"\n:   10 https://intelligence.org/2013/12/13/aaronson/ \"Scott Aaronson on Philosophical Progress - Machine Intelligence Research Institute\"\n:   10 http://www.thebioneer.com/nervous-system-training-muscle-fiber-recruitment-rate-coding-explained/ \"Nervous System Training - Muscle Fiber Recruitment and Rate Coding Explained - The Bioneer\"\n:    9 https://srconstantin.wordpress.com/2016/06/06/nootropics/ \"Nootropics\"\n:    9 https://blog.dropbox.com/topics/work-culture/-the-mind-at-work--guido-van-rossum-on-how-python-makes-thinking \"The Mind at Work: Guido van Rossum on how Python makes thinking in code easier\"\n:    9 https://slatestarcodex.com/2019/12/11/acc-is-eating-meat-a-net-harm/ \"[ACC] Is Eating Meat A Net Harm?\"\n:    9 https://beepb00p.xyz/my-data.html \"What data on myself I collect and why? | Mildly entertainingᵝ\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarlicoss%2Finstapexport","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarlicoss%2Finstapexport","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarlicoss%2Finstapexport/lists"}