An open API service indexing awesome lists of open source software.

https://github.com/xlcnd/isbntools

python app/framework for 'all things ISBN' including metadata, descriptions, covers...
https://github.com/xlcnd/isbntools

biblatex bibliographic-references doi ean13 endnote file-rename google-books isbn metadata microsoft-word open-library python wikipedia

Last synced: 3 months ago
JSON representation

python app/framework for 'all things ISBN' including metadata, descriptions, covers...

Awesome Lists containing this project

README

          

.. image:: https://github.com/xlcnd/isbntools/workflows/tests/badge.svg
:target: https://github.com/xlcnd/isbntools/actions
:alt: Built Status

.. image:: https://img.shields.io/github/issues/xlcnd/isbntools/bug.svg?label=bugs&style=flat
:target: https://github.com/xlcnd/isbntools/labels/bug
:alt: Bugs

.. image:: https://img.shields.io/pypi/dm/isbntools.svg?style=flat
:target: https://pypi.org/project/isbntools/
:alt: PYPI Downloads

Info
====

``isbntools`` provides several useful methods and functions
to validate, clean, transform, hyphenate and
get metadata for ISBN strings.

**For the end user** several scripts are provided to use **from the command line**:

.. code-block:: console

$ to_isbn10 ISBN13

transforms an ISBN13 number to ISBN10.

.. code-block:: console

$ to_isbn13 ISBN10

transforms an ISBN10 number to ISBN13.

.. code-block:: console

$ isbn_info ISBN

gives you the *group identifier* of the ISBN.

.. code-block:: console

$ isbn_mask ISBN

*masks* (hyphenate) an ISBN (split it by identifiers).

.. code-block:: console

$ isbn_meta ISBN [goob|openl|merge] [bibtex|csl|msword|endnote|refworks|opf|json] [YOUR_APIKEY_TO_SERVICE]

gives you the main metadata associated with the ISBN, ``goob`` uses the **Google Books service** (**no key is needed**),
and **is the default option** (you only have to enter, e.g. ``isbn_meta 9780321534965``),
``openl`` uses the **OpenLibrary.org** api (**no key is needed**) and
``wiki`` uses the **Wikipedia** api (**no key is needed**).
You can enter API keys and
set preferences in the file ``isbntools.conf`` in your
``$HOME\.isbntools`` directory (UNIX). For Windows, you should look at
``%APPDATA%/isbntools/isbntools.conf``. The output can be formatted as ``bibtex``, ``csl`` (CSL-JSON),
``msword``, ``endnote``, ``refworks``, ``opf`` or ``json`` (BibJSON) bibliographic formats.

**NOTE**
You can apply this command to many ISBNs by using *posix pipes*
(e.g. ``type FILE_WITH_ISBNs.txt | isbn_meta [SERVICE] [FORMAT] [APIKEY]`` in Windows)

You can add more sources for metadata by installing ``isbnlib`` plugins: isbnlib-bnf_,
isbnlib-porbase_, isbnlib-loc_, isbnlib-mcues_, isbnlib-dnb_, isbnlib-sbn_, isbnlib-kb_, ...
(check pypi_ for available plugins).

.. code-block:: console

$ isbn_editions ISBN

gives the collection of ISBNs that represent a given book (uses **Wikipedia** and **LibraryThing**).

.. code-block:: console

$ isbn_validate ISBN

validates ISBN10 and ISBN13.

.. code-block:: console

$ ... | isbn_validate

to use with *posix pipes* (e.g. ``cat FILE_WITH_ISBNs | isbn_validate`` in OSX or Linux).

**TIP** Suppose you want to extract the ISBN of a pdf eboook (MYEBOOK.pdf).
Install pdfminer_ and then enter in a command line::

$ pdf2txt.py -m 5 MYEBOOK.pdf | isbn_validate

.. code-block:: console

$ isbn_from_words "words from title and author name"

a *fuzzy* script that returns the *most probable* ISBN from a set of words!
(You can verify the result with ``isbn_meta``)!

.. code-block:: console

$ isbn_goom "words from title and author name" [bibtex|csl|msword|endnote|refworks|json]

a script that returns from **Google Books multiple references**.

.. code-block:: console

$ isbn_doi ISBN

returns the doi's ISBN-A code of a given ISBN.

.. code-block:: console

$ isbn_ean13 ISBN

returns the EAN13 code of a given ISBN.

.. code-block:: console

$ isbn_classify ISBN

returns the OCLC classifiers of a given ISBN.

.. code-block:: console

$ isbn_ren FILENAME

renames (using metadata) files in the **current directory** that have ISBNs in their
filename (e.g. ``isbn_ren 1783559284_book.epub``, ``isbn_ren "*.pdf"``).

Enter ``isbn_ren`` to see many other options.

.. code-block:: console

$ isbntools

writes version and copyright notice and **checks if there are updates**.

With

.. code-block:: console

$ isbn_repl

you will get a **REPL with history, autocompletion, fuzzy options,
redirection and access to the shell**.

Following is a typical session:

.. code-block:: console

$ isbn_repl

Welcome to the isbntools 4.3.30 REPL.
** For help type 'help' or '?'
** To exit type 'exit' :)
** To run a shell command, type '!'
** Use '#' in place of the last ISBN

$ isbn> ?

Commands available (type ? to get help):
-------------------------------------------------
BIBFORMATS classify desc ean13 from_words info to_isbn10
PROVIDERS conf doi editions goom mask to_isbn13
audit cover doi2tex exit help meta validate

$ isbn> meta 9780156001311 tex
@book{9780156001311,
title = {The Name Of The Rose},
author = {Umberto Eco},
isbn = {9780156001311},
year = {1994},
publisher = {Harcourt Brace}
}
$ isbn> meta 9780156001311 tex >>myreferences.bib
$ isbn> !ls
myreferences.bib
$ isbn> desc #
It is the year 1327. Franciscans in an Italian abbey are suspected of
heresy, but Brother William of Baskerville's investigation is suddenly
overshadowed by seven bizarre deaths. Translated by William Weaver. A Helen
and Kurt Wolff Book
$ isbn> cover #
thumbnail: http://books.google.com/books/content?id=PVVyuD1UY1wC&printsec=frontcover&img=1&zoom=1
smallThumbnail: http://books.google.com/books/content?id=PVVyuD1UY1wC&printsec=frontcover&img=1&zoom=5
$ isbn> PROVIDERS
bnf dnb goob kb loc mcues openl porbase wiki
$ isbn> exit
bye

**Within REPL many of the operations are faster.**

Install
=======

From the command line enter (in some cases you have to precede the
command with ``sudo``):

.. code-block:: console

$ pip install isbntools

If you use linux systems, you can install using your distribution package
manager (packages ``python-isbntools`` and ``python3-isbntools``), however
usually these packages are **very old and don't work well anymore**!

For Devs
========

If you would like to contribute to the project please read the guidelines_.

Conf File
=========

You can enter API keys and set preferences in the file ``isbntools.conf`` in your
``$HOME/.isbntools`` directory (UNIX). For Windows, you should look at
``%APPDATA%/isbntools/isbntools.conf``
(**create these, directory and file, if don't exist** [Now just enter ``isbn_conf make``!]).
The file should look like:

.. code-block:: console

...

[MISC]
REN_FORMAT={firstAuthorLastName}{year}_{title}_{isbn}
DEBUG=False

[SYS]
URLOPEN_TIMEOUT=10
THREADS_TIMEOUT=12
LOAD_METADATA_PLUGINS=True
LOAD_FORMATTER_PLUGINS=True

[SERVICES]
DEFAULT_SERVICE=goob
VIAS_MERGE=parallel

...

The values are self-explanatory!

**NOTE** If you are running ``isbntools`` inside a virtual environment, the
``isbntools.conf`` file will be inside folder ``isbntools``
at the root of the environment.

The easier way to manipulate these files is by using the script ``isbn_conf``.
At a terminal enter:

.. code-block:: console

$ isbn_conf show

to see the current conf file.

This script has many options that allow a controlled editing of the conf file.
Just enter ``isbn_conf`` for help.

Known Issues
============

1. The ``meta`` method and the ``isbn_meta`` script sometimes give a wrong result
(this is due to errors on the chosen service), in alternative you should
try one of the others services.

2. The ``isbntools`` works internally with unicode, however this doesn't
solve errors of lost information due to bad encode/decode at the origin!

3. Periodically, agencies, issue new blocks of ISBNs. The
range_ of these blocks is on a database that ``mask`` uses. So it could happen,
if you have a version of ``isbntools`` that is too old, ``mask`` doesn't work for
valid (recent) issued ISBNs. The solution? **Update isbntools often**!

4. Calls to metadata services are cached by default. If you don't want this
feature, just enter ``isbn_conf setopt cache no``. If by any reason you need
to clear the cache, just enter ``isbn_conf delcache``.

Any issue that you would like to report, please do it at github_
or at stackoverflow_ with tag **isbntools**.

.. _github: https://github.com/xlcnd/isbntools/issues

.. _range: https://www.isbn-international.org/range_file_generation

.. _guidelines: http://bit.ly/1jcxq8W

.. _pdfminer: https://pypi.python.org/pypi/pdfminer

.. _isbnlib: http://bit.ly/ISBNlib

.. _Docs: http://bit.ly/1l0W4In

.. _stackoverflow: https://stackoverflow.com/search?tab=newest&q=isbntools

.. _isbnlib-bnf: https://pypi.python.org/pypi/isbnlib-bnf

.. _isbnlib-loc: https://pypi.python.org/pypi/isbnlib-loc

.. _isbnlib-porbase: https://pypi.python.org/pypi/isbnlib-porbase

.. _isbnlib-mcues: https://pypi.org/project/isbnlib-mcues/

.. _isbnlib-dnb: https://pypi.org/project/isbnlib-dnb/

.. _isbnlib-sbn: https://pypi.org/project/isbnlib-sbn/

.. _isbnlib-kb: https://pypi.org/project/isbnlib-kb/

.. _pypi: https://pypi.python.org/pypi?%3Aaction=search&term=isbnlib_&submit=search