{"id":50907223,"url":"https://github.com/stn1slv/md-fetch","last_synced_at":"2026-06-16T06:04:32.284Z","repository":{"id":357752419,"uuid":"1238096843","full_name":"stn1slv/md-fetch","owner":"stn1slv","description":"Python library that extracts article content from Medium and dev.to and returns it as clean, well-structured Markdown.","archived":false,"fork":false,"pushed_at":"2026-06-02T12:18:58.000Z","size":539,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T12:27:50.923Z","etag":null,"topics":["article-extraction","devto","markdown","medium","python","scraping"],"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/stn1slv.png","metadata":{"files":{"readme":"README.md","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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-13T20:09:40.000Z","updated_at":"2026-06-02T12:18:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stn1slv/md-fetch","commit_stats":null,"previous_names":["stn1slv/md-fetch"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stn1slv/md-fetch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stn1slv%2Fmd-fetch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stn1slv%2Fmd-fetch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stn1slv%2Fmd-fetch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stn1slv%2Fmd-fetch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stn1slv","download_url":"https://codeload.github.com/stn1slv/md-fetch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stn1slv%2Fmd-fetch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34393303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"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":["article-extraction","devto","markdown","medium","python","scraping"],"created_at":"2026-06-16T06:04:31.164Z","updated_at":"2026-06-16T06:04:32.276Z","avatar_url":"https://github.com/stn1slv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mdfetch\n\nA Python library that extracts article content from web platforms and returns it as clean Markdown.\n\n## Install\n\n### pip\n\n```bash\npip install mdfetch\n```\n\n### Homebrew (macOS / Linux)\n\n```bash\nbrew install stn1slv/tap/md-fetch\n```\n\nNo Python environment setup required.\n\n## CLI Usage\n\nYou can use the built-in `md-fetch` command directly from your terminal:\n\n```bash\n# Fetch and print Markdown to standard output\nmd-fetch https://medium.com/example/article\n\n# Fetch and save Markdown to a file\nmd-fetch https://dev.to/example/article --output article.md\n\n# List all supported platforms (no URL or network needed)\nmd-fetch --list-platforms\n```\n\n## Python Usage\n\n```python\nfrom mdfetch import extract\n\n# Works with any supported platform — just pass the URL\nmarkdown = extract(\"https://medium.com/some-publication/article-slug-abc123\")\nmarkdown = extract(\"https://dev.to/username/article-slug\")\nmarkdown = extract(\"https://example.substack.com/p/article-slug\")\nmarkdown = extract(\"https://thenewstack.io/article-slug\")\nmarkdown = extract(\"https://dzone.com/articles/article-slug\")\nmarkdown = extract(\"https://boomi.com/blog/article-slug\")\nmarkdown = extract(\"https://konghq.com/blog/category/article-slug\")\nprint(markdown)\n```\n\n## Error handling\n\n```python\nfrom mdfetch import (\n    extract,\n    InvalidURLError,\n    UnsupportedPlatformError,\n    UnsupportedContentTypeError,\n    FetchError,\n    HTTPStatusError,\n    EmptyContentError,\n)\n\nurl = \"https://medium.com/some-publication/article-slug-abc123\"\n\ntry:\n    markdown = extract(url)\nexcept InvalidURLError as e:\n    print(f\"Bad URL: {e.message}\")\nexcept UnsupportedPlatformError as e:\n    print(f\"Platform not supported: {e.message}\")\nexcept UnsupportedContentTypeError as e:\n    print(f\"Not an article page: {e.message}\")\nexcept HTTPStatusError as e:\n    print(f\"HTTP {e.status_code}: {e.message}\")\nexcept FetchError as e:\n    print(f\"Network error: {e.message}\")\nexcept EmptyContentError as e:\n    print(f\"No content: {e.message}\")\n```\n\n## Supported platforms\n\n| Platform | Domains |\n|----------|---------|\n| Medium   | `medium.com`, `*.medium.com` |\n| dev.to   | `dev.to` |\n| Substack | `substack.com`, `*.substack.com` |\n| The New Stack | `thenewstack.io` |\n| DZone | `dzone.com` |\n| Boomi | `boomi.com` |\n| Kong | `konghq.com` |\n\n## Development\n\nRequires [uv](https://docs.astral.sh/uv/).\n\n```bash\nmake setup        # install dependencies\nmake test         # run unit tests\nmake integration  # run integration tests (requires network access)\nmake lint         # ruff check\nmake format       # ruff format\nmake build        # build wheel + sdist\nmake upgrade-deps # upgrade all dependencies\nmake clean        # remove build artifacts\n```\n\n## Requirements\n\n- Python 3.12+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstn1slv%2Fmd-fetch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstn1slv%2Fmd-fetch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstn1slv%2Fmd-fetch/lists"}