Skip to content
/ mopds Public

Free program for Linux operating systems, designed to quickly create an electronic OPDS-catalog books. OPDS (Open Publication Distribution System) catalog allows you to access Your library via the Internet from most devices for reading electronic books, tablets, smartphones, etc.

License

Notifications You must be signed in to change notification settings

mak-alex/mopds

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mOPDS API

Free program for Linux operating systems, designed to quickly create an electronic OPDS-catalog books. OPDS (Open Publication Distribution System) catalog allows you to access Your library via the Internet from most devices for reading electronic books, tablets, smartphones, etc.

Current features:

  • Recursive crawl specified in the directory configuration file. High speed of scanning-cataloging.
  • Placement in the catalog of e-books, any formats specified in the configuration file.
  • Extraction of meta information from ebooks FB2, EPUB, MOBI (title, authors, genres, series, abstract, language, editing date).
  • The retrieval and display of covers of e-books FB2, EPUB, MOBI.
  • Duplicate detection of books.
  • Search books in zip-archives.
  • Fast download collections of INPX file.
  • There are five possible sorts in the catalog: by catalogs, by authors, by name, by genre, by series.
  • Arbitrary search books by name, author name and series name.
  • You can set a limit to whether items are displayed on a page.
  • Archiving of books for downloading.
  • Conversion of FB2 books to EPUB and MOBI "on the fly" using external converters.
  • Database support SQLite, MySQL, PostgreSQL

Install

mak@denied ~ $ go get github.com/mak-alex/mopds # get project mak@denied ~ $ cd $GOPATH/src/github.com/mak-alex/mopds # go to the directory mak@denied ~ $ go get # get depends mak@denied ~ $ make run # start project mak@denied ~ $ make build # build project mak@denied ~ $ make clean # clean project

Usage of mopds:

 -about	About author and this project -catalog string	Directory of library (mandatory) -config string	Default configuration file (default "./conf/mopds.conf") -database string	Database name connect to database -dbtype string	Type used database: sqlite3, mysql or postgres (default "sqlite3") -get_author uint	Get author by id -get_authors	List all authors -get_book uint	Get book by id -get_books	List all books -get_books_by_author uint	List all author's books by id -get_books_by_genre uint	List all genre's books by id -get_books_by_serie uint	List all serie's books by id -get_genre uint	Get genre by id -get_genres	List all genres -get_serie uint	Get serie by id -get_series	List all series -host string	IP address for connect to database (default "modps") -listen string	Set server listen address:port (default ":8000") -page int	Pagination 1...n -parse	Parse inpx to the local database -password string	Password for connect to database (default "mopds") -per_page int	Limit results (-1 for no limit) (default 25) -save	Save book file to the disk (ex.: --get_book 1 --save) -search_author string	Search authors, or books by author if comes with search-title -search_book string	Search book by title or filename -search_genre string	Search genre by genre name or section, or subsection -search_lib_id string	Search book(s) by its libId -search_serie string	Search serie by serie name -search_title string	Search books by their title -sslmode string	Whether to use ssl mode or not, here's the question: disable or enable -stat	Book library statistics -username string	Username for connect to database (default "mopds") -verbose	Verbose output 

Example configuration file

page 1 per_page 25 listen :8000 host localhost username mopds password mopds database mopds dbtype postgres sslmode disable

Structure Project

mOPDS ├── conf │   ├── genre.json │   └── mopds.conf - configuration file ├── LICENSE ├── Makefile - run and build project ├── models - database model │   ├── annnotation.go │   ├── author.go │   ├── book.go │   ├── catalog.go │   ├── cover.go │   ├── dbconfig.go │   ├── devinfo.go │   ├── genre.go │   ├── paginate.go │   ├── search.go │   ├── serie.go │   └── summary.go ├── modules - mopdules for working with database, pagination, inpx files, etc.. │ ├── books │ │   ├── archive-utils.go │ │   └── scan.go │ ├── datastore │ │   ├── datastore.go │ │   └── datastorer.go │ ├── fb2parse │ │   └── parser.go │ ├── paginate │ │   └── paginate.go │ ├── prettyjson │ │   └── prettyjson.go │ ├── rest │ │ ├── restserver.go │ │ └── restservice.go ├── mopds.go ├── Readme.md └── utils └── utils.go - auxiliary functions, format conversion, etc. 

Example query

Auth and get lang list

mak@denied ~ $ id=`http POST :8000/api/v1/login username=admin password=admin | grep token | cut -d "\"" -f 4` mak@denied ~ $ http :8000/api/v1/langs "Authorization: Bearer ${id}"

Get all authors

mak@denied ~ $ http :8000/authors

Get author by id

mak@denied ~ $ http :8000/authors/1

Get all books by author id

mak@denied ~ $ http :8000/authors/1/books

Get all books

mak@denied ~ $ http :8000/books

Get book by id

mak@denied ~ $ http :8000/books/1

Download book by id

mak@denied ~ $ http :8000/books/1/download

Get all genres

mak@denied ~ $ http :8000/genres

Get genre by id

mak@denied ~ $ http :8000/genres/1

Get all books by genre id

mak@denied ~ $ http :8000/genres/1/books

Get all series

mak@denied ~ $ http :8000/series

Get serie by id

mak@denied ~ $ http :8000/series/1

Get all books by serie id

mak@denied ~ $ http :8000/series/1/books

Start scanning the book library

mak@denied ~ $ http :8000/scan

Get configuration file

mak@denied ~ $ http :8000/conf 

Update confiuration file

mak@denied ~ $ http --form POST :8000/conf data="catalog /mnt/books"

Find author by name

mak@denied ~ $ http POST :8000/api/v1/authors/search author=перумов

Find book by name

mak@denied ~ $ http POST :8000/api/v1/books/search title="Ген Химеры Часть 1"

Find genre by name

mak@denied ~ $ http POST :8000/api/v1/genres/search genre="Народные песни"

Find serie by name

mak@denied ~ $ http POST :8000/api/v1/series/search title="Ген Химеры"

Get random books by author id

mak@denied ~ $ http GET :8000/api/v1/authors/1/books?random=true&no-details=true

Get random books

mak@denied ~ $ http GET :8000/api/v1/books?random=true&no-details=true

Get random books by genre id

mak@denied ~ $ http GET :8000/api/v1/genres/1/books?random=true&no-details=true

Get random books by serie id

mak@denied ~ $ http GET :8000/api/v1/series/1/books?random=true&no-details=true

Dependencies

  • github.com/namsreal/flag
  • ant0ine/go-json-rest
  • StephanDollberg/go-json-rest-middleware-jwt
  • github.com/jinzhu/gorm

TODO:

  • add support for other book formats, epub/mobi/pdf/etc
  • add the indexing process in the API output, etc.
  • add opds catalog functionality
  • add check and downloading the missing weekly archives from flibusta.is
  • add user interface based this library marcusolsson/tui-go
  • add normal web interface (need enthusiast who will help make a beautiful and fast interface)
  • to optimize and speed up the work of indexing books to work on low-power computers (example cubieboard/RPi / BeagleBone/WirenBoard / etc)
  • to fix the problem with encoding when indexing a file from the archive

About

Free program for Linux operating systems, designed to quickly create an electronic OPDS-catalog books. OPDS (Open Publication Distribution System) catalog allows you to access Your library via the Internet from most devices for reading electronic books, tablets, smartphones, etc.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published