{"id":31811307,"url":"https://github.com/ladykerr/blogmark","last_synced_at":"2025-10-11T06:43:26.401Z","repository":{"id":308604249,"uuid":"1033406446","full_name":"LadyKerr/blogmark","owner":"LadyKerr","description":"Converts web blog posts to markdown files.","archived":false,"fork":false,"pushed_at":"2025-08-06T19:41:44.000Z","size":30,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-06T21:33:26.469Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/LadyKerr.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}},"created_at":"2025-08-06T19:06:48.000Z","updated_at":"2025-08-06T19:41:47.000Z","dependencies_parsed_at":"2025-08-06T21:33:28.284Z","dependency_job_id":"87e7ff61-76cf-4e34-a48a-6fd9333f8286","html_url":"https://github.com/LadyKerr/blogmark","commit_stats":null,"previous_names":["ladykerr/blogmark"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/LadyKerr/blogmark","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LadyKerr%2Fblogmark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LadyKerr%2Fblogmark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LadyKerr%2Fblogmark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LadyKerr%2Fblogmark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LadyKerr","download_url":"https://codeload.github.com/LadyKerr/blogmark/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LadyKerr%2Fblogmark/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006445,"owners_count":26084107,"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-11T02:00:06.511Z","response_time":55,"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":[],"created_at":"2025-10-11T06:43:25.293Z","updated_at":"2025-10-11T06:43:26.394Z","avatar_url":"https://github.com/LadyKerr.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blogmark\n\nA Node.js CLI tool that converts web blog posts to markdown files with frontmatter.\n\n## Quick Start\n\nAfter installation, try the example:\n\n```bash\nnpm run example  # Creates a demo markdown file\n```\n\nOr convert a real blog post:\n\n```bash\nblogmark fetch https://your-favorite-blog.com/article\n```\n\n## Installation\n\n### Global Installation (Recommended)\n\n```bash\nnpm install -g blogmark\n```\n\n### Local Installation\n\n```bash\ngit clone \u003cthis-repo\u003e\ncd blogmark\nnpm install\nchmod +x cli.js\n\n# Run example demonstration\nnpm run example\n\n# Run basic tests\nnpm test\n```\n\n## Usage\n\n### Convert a Single URL\n\n```bash\nblogmark fetch \u003curl\u003e\n```\n\n#### Options\n\n- `-o, --output \u003cfile\u003e` - Custom output file path\n- `-s, --save-dir \u003cdir\u003e` - Custom output directory (default: `./output`)\n\n#### Examples\n\n```bash\n# Convert a blog post to markdown\nblogmark fetch https://example.com/blog-post\n\n# Save to a specific file\nblogmark fetch https://example.com/blog-post -o my-article.md\n\n# Save to a custom directory\nblogmark fetch https://example.com/blog-post -s ./my-blogs\n```\n\n### Bulk Conversion\n\nConvert multiple URLs from a file or stdin:\n\n```bash\nblogmark bulk [file]\n```\n\n#### Options\n\n- `-s, --save-dir \u003cdir\u003e` - Custom output directory (default: `./output`)\n- `-c, --concurrency \u003cnumber\u003e` - Number of concurrent requests (default: 3)\n- `-d, --delay \u003cnumber\u003e` - Delay between requests in milliseconds (default: 1000)\n- `--no-continue` - Stop on first error instead of continuing\n\n#### Examples\n\n```bash\n# Convert URLs from a file\nblogmark bulk urls.txt\n\n# Use custom settings\nblogmark bulk urls.txt --concurrency 5 --delay 2000 --save-dir ./articles\n\n# Read URLs from stdin\necho \"https://example.com/post1\" | blogmark bulk\n\n# Using npm script\nnpm run bulk urls.txt\n```\n\n#### URL File Format\n\nCreate a text file with one URL per line:\n\n```\n# This is a comment (lines starting with # are ignored)\nhttps://example.com/blog-post-1\nhttps://dev.to/author/article-1\nhttps://medium.com/@author/article-2\n\n# Another comment\nhttps://blog.example.com/latest-post\n```\n\n### Interactive Mode\n\n```bash\nblogmark interactive\n```\n\nIn interactive mode, you can:\n- Type `#fetch \u003curl\u003e` to convert a single blog post\n- Type `#bulk \u003cfile\u003e` to convert URLs from a file\n- Type `quit` or `exit` to exit\n\nExample session:\n\n```bash\nblogmark\u003e #fetch https://example.com/article\n✅ Saved to: ./output/example-article.md\n\nblogmark\u003e #bulk urls.txt\n🚀 Starting bulk conversion of 5 URLs...\n📁 Output directory: ./output\n⚡ Concurrency: 3\n⏱️  Delay between requests: 1000ms\n\n[1/5] ✅ Success: article-1.md\n[2/5] ✅ Success: article-2.md\n...\n✅ 5 files saved to: ./output\n\nblogmark\u003e quit\n👋 Goodbye!\n```\n\n## Features\n\n- **Smart Content Extraction**: Automatically detects main article content from various blog platforms (WordPress, Medium, dev.to, etc.)\n- **Bulk Conversion**: Convert hundreds of URLs efficiently with concurrent processing\n- **Rate Limiting**: Respectful to target servers with configurable delays and concurrency\n- **Clean Markdown Output**: Converts HTML to well-formatted markdown\n- **YAML Frontmatter**: Includes metadata like title, date, author, and URL\n- **Error Resilience**: Continues processing even if individual URLs fail\n- **Progress Tracking**: Real-time progress updates and detailed conversion summaries\n- **Flexible Input**: Support for files, stdin, and interactive modes\n- **Robust Error Handling**: Gracefully handles network errors and parsing issues\n- **Cross-Platform**: Works on Windows, macOS, and Linux\n\n## Output Format\n\nGenerated markdown files include YAML frontmatter:\n\n```markdown\n---\ntitle: \"Blog Post Title\"\ndate: \"2025-07-31\"\nauthor: \"Author Name\"\nblurb: \"\"\ntags: []\nurl: \"https://original-url.com\"\n---\n\n# Blog Post Title\n\nYour converted markdown content here...\n```\n\n## Content Extraction Strategy\n\nThe tool uses a fallback strategy to extract content:\n\n1. **Blog-specific selectors**: `.wp-block-post-content`, `.entry-content`, `.post-content`, etc.\n2. **Generic selectors**: `main`, `article`, `.content`\n3. **Fallback**: `body` content (with minimum length requirements)\n\n## Requirements\n\n- Node.js \u003e= 14.0.0\n\n## Dependencies\n\n- `axios` - HTTP client for fetching web pages\n- `cheerio` - Server-side jQuery implementation for HTML parsing\n- `commander` - CLI framework\n- `turndown` - HTML to Markdown converter\n- `js-yaml` - YAML parser for frontmatter generation\n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fladykerr%2Fblogmark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fladykerr%2Fblogmark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fladykerr%2Fblogmark/lists"}