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...
- Host: GitHub
- URL: https://github.com/xlcnd/isbntools
- Owner: xlcnd
- License: other
- Created: 2014-02-26T15:03:40.000Z (over 11 years ago)
- Default Branch: dev
- Last Pushed: 2023-06-05T10:50:28.000Z (over 2 years ago)
- Last Synced: 2024-10-08T03:11:19.360Z (about 1 year ago)
- Topics: biblatex, bibliographic-references, doi, ean13, endnote, file-rename, google-books, isbn, metadata, microsoft-word, open-library, python, wikipedia
- Language: Python
- Homepage:
- Size: 1.56 MB
- Stars: 210
- Watchers: 14
- Forks: 19
- Open Issues: 7
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.txt
- Contributing: CONTRIBUTING.md
- License: LICENSE-LGPL-3.0.txt
- Code of conduct: CODE_OF_CONDUCT.md
- Codeowners: .github/CODEOWNERS
- Security: SECURITY.md
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 DownloadsInfo
====``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