chapter-sync


Namechapter-sync JSON
Version 0.3.7 PyPI version JSON
download
home_pagehttps://github.com/dancardin/sqlalchemy-declarative-extensions
SummaryNone
upload_time2024-07-23 00:11:54
maintainerNone
docs_urlNone
authorDan Cardin
requires_python<4.0,>=3.10
licenseApache-2.0
keywords chapter sync epub ebook leech
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Chapter-sync

[![Actions Status](https://github.com/DanCardin/chapter-sync/actions/workflows/test.yml/badge.svg)](https://github.com/dancardin/chapter-sync/actions)
[![codecov](https://codecov.io/gh/DanCardin/chapter-sync/graph/badge.svg?token=e8T6QN2tTz)](https://codecov.io/gh/DanCardin/chapter-sync)
[![Documentation Status](https://readthedocs.org/projects/chapter-sync/badge/?version=latest)](https://chapter-sync.readthedocs.io/en/latest/?badge=latest)
[![Docker](https://img.shields.io/docker/v/dancardin/chapter-sync?label=Docker&style=flat)](https://hub.docker.com/r/dancardin/chapter-sync)

- [Full documentation here](https://chapter-sync.readthedocs.io/en/latest/).
- [Installation/Usage](https://chapter-sync.readthedocs.io/en/latest/installation.html).

A tool for recording serialized web content, in partial web-serial type novels,
or other serialized content for which you want to be sent updates as they're
published.

The other tools in the space (at least that I'm aware of: Leech, FanFicFare) are
mostly designed around manual one-off usage of the tool to capture the current
state of a story/series and turn it into an ebook.

`chapter-sync`, by contrast, records everything it captures to a sqlite database
and will only collect new/missing chapters. It also bakes in (through supported
subscription methods) the ability to send new chapters to "subscribers" who have
not yet received it.

## Quickstart

```bash
❯ chapter-sync series add some-book 'https://some-book.com/table-of-contents/' --title 'Some Book' --settings '{"content_selector": "#main .entry-content", "chapter_selector": "#main .entry-content > ul > li > a"}'
Added series "some-book" at "https://some-book.com/table-of-contents/"

❯ chapter-sync series list
┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ID ┃ Name                       ┃ URL                                  ┃
┡━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 1  │ some-book                  │ https://some-book.com/table-of-cont… │
└────┴────────────────────────────┴──────────────────────────────────────┘

❯ chapter-sync sync
...
Done

❯ chapter-sync chapter list 1
                               Some Book
┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Title      ┃ Chapter ┃ Size (Kb) ┃ Sent       ┃ Published  ┃ Created    ┃
┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Chapter 1  │ 1       │ 37.3      │ 2024-03-02 │ 2023-07-28 │ 2024-03-02 │
│ Chapter 2  │ 2       │ 37.1      │ 2024-03-02 │ 2023-08-04 │ 2024-03-02 │
│ Chapter 3  │ 3       │ 36.9      │ 2024-03-02 │ 2023-08-11 │ 2024-03-02 │
│ Chapter 4  │ 4       │ 36.9      │ 2024-03-02 │ 2023-08-18 │ 2024-03-02 │
└────────────┴─────────┴───────────┴────────────┴────────────┴────────────┘

❯ chapter-sync chapter export 1 4
❯ ls
Some Book: Chapter 4.epub

❯ chapter-sync series export 1
❯ ls
Some Book.epub
```

## Web

The tool also ships with a web service which can be used to view and manage
subscriptions.

![Web Example](docs/web.png)

## Inspiration

**this** tool started off as an attempt at a refactor/PR to
[Leech](https://github.com/kemayo/leech) to enable it to more granularly record
updates to books as they changed.

However, `chapter-sync` is designed from the ground up to be able to
individually record/send chapters as they are published, which ultimately means
the to tools ultimately end up being almost entirely different.

I **had** been using InstaPaper to send updates of series to my kindle, until
they made that a paid feature. Additionally the drawback there, was that the
file they'd send would contain all chapters in the whole series, in reverse.


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/dancardin/sqlalchemy-declarative-extensions",
    "name": "chapter-sync",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": "chapter, sync, epub, ebook, leech",
    "author": "Dan Cardin",
    "author_email": "ddcardin@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/75/92/111271706f85087dc17568ae306f994e1c62bfec81828c46da79ec48b4b4/chapter_sync-0.3.7.tar.gz",
    "platform": null,
    "description": "# Chapter-sync\n\n[![Actions Status](https://github.com/DanCardin/chapter-sync/actions/workflows/test.yml/badge.svg)](https://github.com/dancardin/chapter-sync/actions)\n[![codecov](https://codecov.io/gh/DanCardin/chapter-sync/graph/badge.svg?token=e8T6QN2tTz)](https://codecov.io/gh/DanCardin/chapter-sync)\n[![Documentation Status](https://readthedocs.org/projects/chapter-sync/badge/?version=latest)](https://chapter-sync.readthedocs.io/en/latest/?badge=latest)\n[![Docker](https://img.shields.io/docker/v/dancardin/chapter-sync?label=Docker&style=flat)](https://hub.docker.com/r/dancardin/chapter-sync)\n\n- [Full documentation here](https://chapter-sync.readthedocs.io/en/latest/).\n- [Installation/Usage](https://chapter-sync.readthedocs.io/en/latest/installation.html).\n\nA tool for recording serialized web content, in partial web-serial type novels,\nor other serialized content for which you want to be sent updates as they're\npublished.\n\nThe other tools in the space (at least that I'm aware of: Leech, FanFicFare) are\nmostly designed around manual one-off usage of the tool to capture the current\nstate of a story/series and turn it into an ebook.\n\n`chapter-sync`, by contrast, records everything it captures to a sqlite database\nand will only collect new/missing chapters. It also bakes in (through supported\nsubscription methods) the ability to send new chapters to \"subscribers\" who have\nnot yet received it.\n\n## Quickstart\n\n```bash\n\u276f chapter-sync series add some-book 'https://some-book.com/table-of-contents/' --title 'Some Book' --settings '{\"content_selector\": \"#main .entry-content\", \"chapter_selector\": \"#main .entry-content > ul > li > a\"}'\nAdded series \"some-book\" at \"https://some-book.com/table-of-contents/\"\n\n\u276f chapter-sync series list\n\u250f\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 ID \u2503 Name                       \u2503 URL                                  \u2503\n\u2521\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 1  \u2502 some-book                  \u2502 https://some-book.com/table-of-cont\u2026 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u276f chapter-sync sync\n...\nDone\n\n\u276f chapter-sync chapter list 1\n                               Some Book\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 Title      \u2503 Chapter \u2503 Size (Kb) \u2503 Sent       \u2503 Published  \u2503 Created    \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 Chapter 1  \u2502 1       \u2502 37.3      \u2502 2024-03-02 \u2502 2023-07-28 \u2502 2024-03-02 \u2502\n\u2502 Chapter 2  \u2502 2       \u2502 37.1      \u2502 2024-03-02 \u2502 2023-08-04 \u2502 2024-03-02 \u2502\n\u2502 Chapter 3  \u2502 3       \u2502 36.9      \u2502 2024-03-02 \u2502 2023-08-11 \u2502 2024-03-02 \u2502\n\u2502 Chapter 4  \u2502 4       \u2502 36.9      \u2502 2024-03-02 \u2502 2023-08-18 \u2502 2024-03-02 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u276f chapter-sync chapter export 1 4\n\u276f ls\nSome Book: Chapter 4.epub\n\n\u276f chapter-sync series export 1\n\u276f ls\nSome Book.epub\n```\n\n## Web\n\nThe tool also ships with a web service which can be used to view and manage\nsubscriptions.\n\n![Web Example](docs/web.png)\n\n## Inspiration\n\n**this** tool started off as an attempt at a refactor/PR to\n[Leech](https://github.com/kemayo/leech) to enable it to more granularly record\nupdates to books as they changed.\n\nHowever, `chapter-sync` is designed from the ground up to be able to\nindividually record/send chapters as they are published, which ultimately means\nthe to tools ultimately end up being almost entirely different.\n\nI **had** been using InstaPaper to send updates of series to my kindle, until\nthey made that a paid feature. Additionally the drawback there, was that the\nfile they'd send would contain all chapters in the whole series, in reverse.\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": null,
    "version": "0.3.7",
    "project_urls": {
        "Homepage": "https://github.com/dancardin/sqlalchemy-declarative-extensions",
        "Repository": "https://github.com/dancardin/sqlalchemy-declarative-extensions"
    },
    "split_keywords": [
        "chapter",
        " sync",
        " epub",
        " ebook",
        " leech"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9e9836465c7f7f0075e36a58855c8f35d5cd9509d93aaedace732371dbdbad33",
                "md5": "a4d0c726f5d8a6239a8ff00c27c7472e",
                "sha256": "7d2f1fb34440fe97e926ba5f57c02a41da1ffbfeda905597d82820dc97540270"
            },
            "downloads": -1,
            "filename": "chapter_sync-0.3.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a4d0c726f5d8a6239a8ff00c27c7472e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 56343,
            "upload_time": "2024-07-23T00:11:52",
            "upload_time_iso_8601": "2024-07-23T00:11:52.756849Z",
            "url": "https://files.pythonhosted.org/packages/9e/98/36465c7f7f0075e36a58855c8f35d5cd9509d93aaedace732371dbdbad33/chapter_sync-0.3.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7592111271706f85087dc17568ae306f994e1c62bfec81828c46da79ec48b4b4",
                "md5": "be59c4062322a9029625a93c6c4112a0",
                "sha256": "bac460c8014c5a2324538303b39b818fc1f06a8213c0e6e39c6b98ea1dc917b5"
            },
            "downloads": -1,
            "filename": "chapter_sync-0.3.7.tar.gz",
            "has_sig": false,
            "md5_digest": "be59c4062322a9029625a93c6c4112a0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 40760,
            "upload_time": "2024-07-23T00:11:54",
            "upload_time_iso_8601": "2024-07-23T00:11:54.413372Z",
            "url": "https://files.pythonhosted.org/packages/75/92/111271706f85087dc17568ae306f994e1c62bfec81828c46da79ec48b4b4/chapter_sync-0.3.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-23 00:11:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dancardin",
    "github_project": "sqlalchemy-declarative-extensions",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "chapter-sync"
}
        
Elapsed time: 4.96330s