ISBN validation (58 ISBNs): tools/isbnval.py + data/isbn-validation.tsv; SUMMARY Table 4 + fixed 2 bad-check-digit typos and 2 publisher-prefix mismatches; AGENTS.md source 21
This commit is contained in:
parent
89c4845d0b
commit
4feff7a0f7
6 changed files with 458 additions and 15 deletions
37
AGENTS.md
37
AGENTS.md
|
|
@ -49,7 +49,9 @@ sections/0N-<name>/ # one .md per BOOK (chapter-level list items are merged int
|
|||
- **Limitations:** no pagination (fixed first page) → always query by **full first+last name**
|
||||
for people, or 2–3 distinctive words. Loose matching (searches author AND title fields).
|
||||
- Other `type=` values on this mirror are **dead**: worldcat, googlebooks, isbndb, udc
|
||||
(all return "Nothing found" even for control queries). `type=isbn` only decodes ISBN structure.
|
||||
(all return "Nothing found" even for control queries). `type=isbn` decodes ISBN structure:
|
||||
checksum error + **registered publisher group name** (e.g. 5-519 → «Клуб Касталия»,
|
||||
5-98712 → «Петроглиф») — cheap, unlimited; used by `tools/isbnval.py` as the structure layer.
|
||||
|
||||
### 2. libgen.vg full-text search — PRIMARY for readable editions
|
||||
- Tool: `tools/lg.py "query"` (whole words only, res=100, prints pagination hint)
|
||||
|
|
@ -117,8 +119,9 @@ sections/0N-<name>/ # one .md per BOOK (chapter-level list items are merged int
|
|||
- No key, no rate limits observed (1s between calls is polite). Aggregates all editions of a
|
||||
work into one doc. **Best use: resolve full EN author names from initial-only list entries**
|
||||
(`title:"..."` → author_name) and get the EN works list + ISBNs to feed Google Books.
|
||||
- **NO RU editions indexed** (language=rus → 0 for known RU books) — RU hunting stays with
|
||||
RSL/libgen/flibusta/GBS SPb.
|
||||
- **RU coverage is sparse but REAL** (romanized titles, e.g. «Chelovek i ego simvoly»); the
|
||||
`search.json?isbn=` facet works for RU ISBNs too. Don't use a `language=rus` filter — it
|
||||
under-reports. RU hunting still mainly RSL/libgen/flibusta/GBS SPb/Google Books.
|
||||
|
||||
### 12. Wikidata — identity anchors (life dates + OFFICIAL RU name)
|
||||
- Tool: `tools/wd.py "Full Name"`
|
||||
|
|
@ -132,11 +135,13 @@ sections/0N-<name>/ # one .md per BOOK (chapter-level list items are merged int
|
|||
work (`/download/<item>/<file>`). OCR `_text.pdf` variants → pdftotext.
|
||||
- Used to verify the 4-essay match for Neumann «Сборник статей» (item in.ernet.dli.2015.139225).
|
||||
|
||||
### 14. Google Books — via fetch_content only (API is 429 without key)
|
||||
- `fetch_content https://books.google.com/books?vid=ISBN<digits>` → authoritative publisher
|
||||
metadata: full author/editor names, edition, series. Resolved Ottmann=Klaus, Goldstein=Ralph,
|
||||
Brutsche=Paul, Elder=George, Moon=Beverly, Killick=Katherine, Pennington/Staples, Rowland=Susan,
|
||||
Bolander=Karen, Acton=Mary via this or OL.
|
||||
### 14. Google Books — book page via curl OR fetch_content (API is 429 without key)
|
||||
- `books.google.com/books?vid=ISBN<13digits>`: **plain curl works** — 200 + `<title>"T - A -
|
||||
Google Книги"` if indexed, 404 if not. Good ISBN validator incl. RU (АСТ/Эксмо/БукСМарт hit;
|
||||
small-press 404). googleapis.com/books API stays 429 without a key.
|
||||
- `fetch_content` on the same URL → richer metadata: full author/editor names, edition, series.
|
||||
Resolved Ottmann=Klaus, Goldstein=Ralph, Brutsche=Paul, Elder=George, Moon=Beverly,
|
||||
Killick=Katherine, Pennington/Staples, Rowland=Susan, Bolander=Karen, Acton=Mary via this or OL.
|
||||
|
||||
### 15. Shop directory (HSE bookshelf34 pattern) — where RU psychoanalytic books are sold
|
||||
- HSE «Книжный шкаф» (hse.ru/ma/therapy/bookshelfNN) = a DIRECTORY of shops, not a book list:
|
||||
|
|
@ -192,6 +197,22 @@ sections/0N-<name>/ # one .md per BOOK (chapter-level list items are merged int
|
|||
(author) reliably works so far. libgen proxy (tools/rsl.py) still covers title/ISBN queries.
|
||||
- search.rsl.ru — same catalog, Yii app, no JSON API found (2026-07-09).
|
||||
|
||||
### 21. ISBN validation pipeline — `tools/isbnval.py` (2026-07-15)
|
||||
- Per ISBN: (1) libgen.vg biblioservice `type=isbn` — checksum + registered publisher group;
|
||||
(2) Open Library `search.json?isbn=` — title/author/year; (3) Google Books `?vid=ISBN` curl
|
||||
— title tag, 200/404; (4) NLR free-text for RU misses. Random pauses 2–5s, resumable.
|
||||
- Verdicts: VALID (found w/ matching title) / STRUCT-ONLY (real ISBN, prefix registered,
|
||||
not indexed — small-press RU) / BAD-STRUCT. Output TSV: `data/isbn-validation.tsv`.
|
||||
- Found in sec04: 2 bad-check-digit typos (5-89613-003-6, 5-263-00368-2), 2 publisher-prefix
|
||||
mismatches (Ленанд vs URSS; Академический проект vs Азбука-Аттикус), 2 co-publishing
|
||||
prefixes (Петроглиф for ЦГИ 2020; Пальмира for Касталия 2025).
|
||||
- **triumph.ru** (РГБ ISBN search, user-provided): `https://www.triumph.ru/html/serv/find-isbn.php?isbn=<13digits>`
|
||||
(relative to the poisk-isbn.html page!) → returns links to РГБ/МГУ/РНБ/БЕН РАН/ГПНТБ catalogs
|
||||
pre-filled with the ISBN. Itself no data; МГУ (nbmgu.ru) results are JS-rendered, БЕН РАН
|
||||
(Koha) is scrapable but small collection. NLR absence ≠ ISBN invalid.
|
||||
- **isbnsearch.org**: nice per-ISBN pages (author/publisher/year) but rate-walls after ~10
|
||||
requests ("Please Verify to Continue", no recovery in 7 min) — not for batches.
|
||||
|
||||
## Not usable / low value
|
||||
- libgen biblioservice worldcat/googlebooks/isbndb/udc (broken on this mirror)
|
||||
- imaton.com (МААП educational publisher, not translations)
|
||||
|
|
|
|||
59
data/isbn-sec04.tsv
Normal file
59
data/isbn-sec04.tsv
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
item lang isbn
|
||||
01 EN 0691018332
|
||||
02 EN 0691097739
|
||||
03 EN 0393065677
|
||||
04 EN 9780393254884
|
||||
05 EN 9783952260821
|
||||
06 EN 9780415435178
|
||||
07 EN 9780415238120
|
||||
08 EN 9781935528784
|
||||
09 EN 9781771690409
|
||||
11 EN 9780880642019
|
||||
12 EN 9780415592710
|
||||
13 EN 9781630516789
|
||||
14 EN 9783856307882
|
||||
15 EN 9780415438353
|
||||
16 EN 9781853028212
|
||||
17 EN 9780415138413
|
||||
18 EN 0812691415
|
||||
20 EN 9783856305161
|
||||
21 EN 9780465005055
|
||||
23 EN 9781570620966
|
||||
24 EN 9780810105324
|
||||
26 EN 9780938434467
|
||||
27 EN 3856305866
|
||||
28 EN 9780440351832
|
||||
29 EN 9780367756734
|
||||
30 EN 9780486847535
|
||||
32 EN 0671780735
|
||||
33 EN 9781611802016
|
||||
34 EN 9780398055356
|
||||
35 EN 9780398078683
|
||||
36 EN 9781570622502
|
||||
37 EN 0691018650
|
||||
38 EN 9780882145549
|
||||
39 EN 2080122339
|
||||
01 RU 9785171087531
|
||||
01 RU 9785171171797
|
||||
05 RU 9785519607353
|
||||
11 RU 9785987127902
|
||||
24 RU 5263003682
|
||||
24 RU 9785519658614
|
||||
24 RU 9785521244720
|
||||
28 RU 5891630036
|
||||
28 RU 5896130036
|
||||
28 RU 5902582083
|
||||
28 RU 9785906891488
|
||||
30 RU 9785907043589
|
||||
30 RU 9785907043602
|
||||
30 RU 9785386096564
|
||||
30 RU 9785171181598
|
||||
30 RU 9785389182752
|
||||
30 RU 9785699917686
|
||||
30 RU 9785971067542
|
||||
31 RU 9785699369294
|
||||
32 RU 5040097158
|
||||
32 RU 5699070656
|
||||
32 RU 5170300212
|
||||
37 RU 5733101571
|
||||
38 RU 9785908110549
|
||||
|
59
data/isbn-validation.tsv
Normal file
59
data/isbn-validation.tsv
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
item lang isbn struct struct_detail ol gbooks nlr verdict
|
||||
01 EN 0691018332 OK 978-0-691-01833-1|Princeton University Press The Archetypes and the Collective Unconscious | Carl Gustav Jung | The Archetypes and the Collective Unconscious - Carl Gustav Jung VALID
|
||||
02 EN 0691097739 OK 978-0-691-09773-2|Princeton University Press Über das Phänomen des Geistes in Kunst und Wissenschaft | Carl Gustav Jung | The Collected Works of C. G. Jung: The spirit in man, art, and literature - Carl Gustav Jung VALID
|
||||
03 EN 0393065677 OK 978-0-393-06567-1|W. W. Norton & Company The red book = | Carl Gustav Jung | Liber Novus - Carl G. Jung VALID
|
||||
04 EN 9780393254884 OK 978-0-393-25488-4|W. W. Norton & Company The Art of C. G. Jung | The Foundation of the Works of C.G. Jung | The Art of C. G. Jung - The Foundation of the Works of C.G. Jung VALID
|
||||
05 EN 9783952260821 OK 978-3-9522608-2-1| Introduction to Picture Interpretation | Theodor Abt;Bt Theodor | Introduction to Picture Interpretation: According to C.G. Jung - Theodor Abt VALID
|
||||
06 EN 9780415435178 OK 978-0-415-43517-8|Routledge Learning to Look at Paintings | Mary Acton | Learning to Look at Paintings - Mary Acton VALID
|
||||
07 EN 9780415238120 OK 978-0-415-23812-0|Routledge Learning to look at modern art | Mary Acton | Learning to Look at Modern Art - Mary Acton VALID
|
||||
08 EN 9781935528784 OK 978-1-935528-78-4| Creativity | Paul Brutsche | Creativity: Patterns of Creative Imagination as Seen Through Art - Paul Brutsche VALID
|
||||
09 EN 9781771690409 OK 978-1-77169-040-9| Our Creative Fingerprint | Nancy Carter Pennington;Lawrence H Staples | Our Creative Fingerprint - Lawrence H. Staples, Nancy Carter Pennington VALID
|
||||
11 EN 9780880642019 OK 978-0-88064-201-9|Fromm International The dynamics of symbols | Verena Kast | The Dynamics of Symbols: Fundamentals of Jungian Psychotherapy - Verena Kast VALID
|
||||
12 EN 9780415592710 OK 978-0-415-59271-0|Routledge Sandplay Therapy In Vulnerable Communities A Jungian Approach | Eva Pattis Zoja | Sandplay Therapy in Vulnerable Communities: A Jungian Approach - Eva Pattis Zoja VALID
|
||||
13 EN 9781630516789 OK 978-1-63051-678-9| Where Soul Meets Matter | Eva Pattis Zoja | Where Soul Meets Matter: Clinical and Social Applications of Jungian ... - Eva Pattis Zoja VALID
|
||||
14 EN 9783856307882 OK 978-3-85630-788-2| Painting Therapy | Ingrid Riedel;Christa Henzler | Painting Therapy: On the Basis of C.G. Jung's Analytical Psychology - Ingrid Riedel, Christa Henzler VALID
|
||||
15 EN 9780415438353 OK 978-0-415-43835-3|Routledge Psyche and the Arts | Susan Rowland | Psyche and the Arts: Jungian Approaches to Music, Architecture, Literature ... VALID
|
||||
16 EN 9781853028212 OK 978-1-85302-821-2| The Revealing Image | Joy Schaverien | The Revealing Image: Analytical Art Psychotherapy in Theory and Practice - Joy Schaverien VALID
|
||||
17 EN 9780415138413 OK 978-0-415-13841-3|Routledge Art, Psychotherapy and Psychosis | Joy Schaverien | Art, Psychotherapy and Psychosis VALID
|
||||
18 EN 0812691415 OK 978-0-8126-9141-2|Cricket Books;Open Court Healing and transformation in sandplay | Ruth Ammann | Healing and Transformation in Sandplay: Creative Processes Become Visible - Ruth Ammann VALID
|
||||
20 EN 9783856305161 OK 978-3-85630-516-1| Life paints its own span | Susan R. Bach | Life Paints Its Own Span: On the Significance of Spontaneous Paintings by ... - Susan Bach VALID
|
||||
21 EN 9780465005055 OK 978-0-465-00505-5|Basic Books Assessing personality through tree drawings | Karen Bolander | Assessing Person Thru Tree - Bolander VALID
|
||||
23 EN 9781570620966 OK 978-1-57062-096-6| An encyclopedia of archetypal symbolism | Archive for Research in Archetypal Symbolism. | An Encyclopedia of Archetypal Symbolism: The body - Archive for Research in Archetypal Symbolism, George Elder VALID
|
||||
24 EN 9780810105324 OK 978-0-8101-0532-4|Northwestern University Press Number and Time | Marie-Louise Von Franz;Ernst Klett Verlag | Number and Time: Reflections Leading Toward a Unification of Depth ... - Marie-Louise Von Franz, Ernst Klett Verlag VALID
|
||||
26 EN 9780938434467 OK 978-0-938434-46-7| The secret world of drawings | Gregg M. Furth | The Secret World of Drawings: Healing Through Art - Gregg M. Furth VALID
|
||||
27 EN 3856305866 OK 978-3-85630-586-4| Images, meanings, and connections | | Images, Meanings and Connections: Essays in Memory of Susan R. Bach VALID
|
||||
28 EN 9780440351832 OK 978-0-440-35183-2|Ballantine Books;Spectra;Ace Books;Alfred A. Knopf;Bantam Books;Berkley Books;Berkley Prime Crime;Bluefire;Corgi Yearling;Del Rey;Del Rey (UK);Delacorte Press;Dell;Dell Spectra;Dell Yearling;Delta;Ember;InterMix;Laurel-Leaf;The Dial Press;Yearling;Yearling (UK);Yearling Books Man and His Symbols | Carl Gustav Jung | Man and His Symbols - Carl G. Jung, Marie-Luise von Franz VALID
|
||||
29 EN 9780367756734 OK 978-0-367-75673-4|Routledge Old and New Horizons of Sandplay Therapy | Martin Kalff;Paolo Ferliga | Old and New Horizons of Sandplay Therapy: Mindfulness and Neural Integration - Martin Kalff VALID
|
||||
30 EN 9780486847535 OK 978-0-486-84753-5|Dover Publications Concerning the Spiritual in Art | Wassily Kandinsky | Concerning the Spiritual in Art - Wassily Kandinsky VALID
|
||||
32 EN 0671780735 OK 978-0-671-78073-9|Minstrel;Aladdin;Baen;Brilliance Audio;Pocket Books;Pocket Star Books;Simon Pulse;Simon & Schuster Audio;Poseidon Press;Little Simon;Earthlight;Archway Books;Fireside Books;Trident Press;Simon & Schuster;Aladdin Paperbacks;Timescape The Lüscher Color Test | Max Lüscher | VALID
|
||||
33 EN 9781611802016 OK 978-1-61180-201-6| Imagination in action | Shaun McNiff | Imagination in Action: Secrets for Unleashing Creative Expression - Shaun McNiff VALID
|
||||
34 EN 9780398055356 OK 978-0-398-05535-6| Depth psychology of art | Shaun McNiff | Depth Psychology of Art - Shaun McNiff VALID
|
||||
35 EN 9780398078683 OK 978-0-398-07868-3| Integrating the arts in therapy | Shaun McNiff | Integrating the Arts in Therapy: History, Theory, and Practice - Shaun McNiff VALID
|
||||
36 EN 9781570622502 OK 978-1-57062-250-2| An encyclopedia of archetypal symbolism | Archive for Research in Archetypal Symbolism. | An Encyclopedia of Archetypal Symbolism - Archive for Research in Archetypal Symbolism, George Elder VALID
|
||||
37 EN 0691018650 OK 978-0-691-01865-2|Princeton University Press Archetypische Welt Henry Moores | Erich Neumann | The Archetypal World of Henry Moore - Erich Neumann VALID
|
||||
38 EN 9780882145549 OK 978-0-88214-554-9| Color Symbolism | Adolf Portmann | Color Symbolism: The Eranos Lectures VALID
|
||||
39 EN 2080122339 OK 978-2-08-012233-9|Flammarion;Ombres Noires L' art brut | Lucienne Peiry | L'art brut - Lucienne Peiry VALID
|
||||
01 RU 9785171087531 OK 978-5-17-108753-1|Хранитель;Редакция Елены Шубиной;АСТ;Астрель Архетипы и коллективное бессознательное - C. G. Jung, Карл Густав Юнг VALID
|
||||
01 RU 9785171171797 OK 978-5-17-117179-7|Хранитель;Редакция Елены Шубиной;АСТ;Астрель 0 STRUCT-ONLY
|
||||
05 RU 9785519607353 OK 978-5-519-60735-3|Клуб Касталия 0 STRUCT-ONLY
|
||||
11 RU 9785987127902 OK 978-5-98712-790-2|Петроглиф 0 STRUCT-ONLY
|
||||
24 RU 5263003682 OK 978-5-263-00368-5| 0 STRUCT-ONLY
|
||||
24 RU 9785519658614 OK 978-5-519-65861-4|Клуб Касталия 0 STRUCT-ONLY
|
||||
24 RU 9785521244720 OK 978-5-521-24472-0|Пальмира 0 STRUCT-ONLY
|
||||
28 RU 5891630036 OK 978-5-89163-003-1|Серебряные нити Chelovek i ego simvoly | Carl Gustav Jung | Человек и его символы - Carl Gustav Jung VALID
|
||||
28 RU 5896130036 OK 978-5-89613-003-1| 0 STRUCT-ONLY
|
||||
28 RU 5902582083 OK 978-5-902582-08-3| Человек и его символы: [сборник : перевод] VALID
|
||||
28 RU 9785906891488 OK 978-5-906891-48-8| 0 STRUCT-ONLY
|
||||
30 RU 9785907043589 OK 978-5-907043-58-9| О духовном в искусстве: Полное критическое издание с дополнениями и другими ... - Wassily Kandinsky VALID
|
||||
30 RU 9785907043602 OK 978-5-907043-60-2| О духовном в искусстве: Полное критическое издание с дополнениями и другими ... - Wassily Kandinsky VALID
|
||||
30 RU 9785386096564 OK 978-5-386-09656-4|Энтраст Трейдинг О духовном в искусстве - Василий Кандинский VALID
|
||||
30 RU 9785171181598 OK 978-5-17-118159-8|Хранитель;Редакция Елены Шубиной;АСТ;Астрель О духовном в искусстве: Ступени. Текст художника. Точка и линия на плоскости ... - Wassily Kandinsky VALID
|
||||
30 RU 9785389182752 OK 978-5-389-18275-2|Азбука-Аттикус;Махаон;Аттикус, Издательская Группа 0 STRUCT-ONLY
|
||||
30 RU 9785699917686 OK 978-5-699-91768-6|Эксмо О духовном в искусстве - Wassily Kandinsky VALID
|
||||
30 RU 9785971067542 OK 978-5-9710-6754-2|Ленанд 0 STRUCT-ONLY
|
||||
31 RU 9785699369294 OK 978-5-699-36929-4|Эксмо Тест "Дерево": [пер. с нем.] - Карл Кох VALID
|
||||
32 RU 5040097158 OK 978-5-04-009715-9|Fanzon;Freedom;Like;Эксмодетство;Эксмо 0 STRUCT-ONLY
|
||||
32 RU 5699070656 OK 978-5-699-07065-7|Эксмо 0 STRUCT-ONLY
|
||||
32 RU 5170300212 OK 978-5-17-030021-1|Хранитель;Редакция Елены Шубиной;АСТ;Астрель 0 STRUCT-ONLY
|
||||
37 RU 5733101571 OK 978-5-7331-0157-6|АКАДЕМИЧЕСКИЙ ПРОЕКТ 0 STRUCT-ONLY
|
||||
38 RU 9785908110549 OK 978-5-908110-54-9| 0 STRUCT-ONLY
|
||||
|
|
|
@ -76,13 +76,13 @@ EN ISBN = earliest/most-cited EN original from Open Library (year, publisher in
|
|||
| 21 | Assessing Personality Through Tree Drawings (Basic Books, 1977) | 9780465005055 | ❌ | — |
|
||||
| 22 | La Dimensión Simbólica (Spanish original) | — (not found in OL) | ❌ | — |
|
||||
| 23 | An Encyclopedia of Archetypal Symbolism, vol. 2 — Elder (Shambhala, 1996) | 9781570620966 | ❌ | — |
|
||||
| 24 | Number and Time — von Franz (Northwestern, 1986; orig. DE 1970, Klett) | 9780810105324 | Число и время (Фантом Пресс, 2012; Клуб Касталия, 2018; Касталия, 2025) | 5-263-00368-2; 978-5-519-65861-4; 978-5-521-24472-0 |
|
||||
| 24 | Number and Time — von Franz (Northwestern, 1986; orig. DE 1970, Klett) | 9780810105324 | Число и время (Фантом Пресс, 2012; Клуб Касталия, 2018; Касталия, 2025) | 978-5-263-00368-5 (was mis-transcribed 5-263-00368-2); 978-5-519-65861-4; 978-5-521-24472-0 (co-pub. Пальмира) |
|
||||
| 25 | “Peter Birkhäuser — Artist and Artwork” (Spring 1964, essay) | — (essay, not a stand-alone book) | ❌ | — |
|
||||
| 26 | The Secret World of Drawings (Norton 1989 / Sigo 2002) | 9780938434467 | Тайный мир рисунка. Исцеление через искусство (Деметра, 2003; 2nd ed. 2014) | — (not stated on title) |
|
||||
| 27 | Images, Meanings and Connection (Daimon, 1999) | 3856305866 | ❌ | — |
|
||||
| 28 | Man and His Symbols (Jung/Jaffé; Aldus, 1964; later Dell) | 9780440351832 (Dell) | Человек и его символы (Серебряные нити 1997/2002; Б.С.К. 2008; Медков 2006/2020) | 5-89163-003-6; 5-89613-003-6; 5-902582-08-3; 978-5-906891-48-8 |
|
||||
| 28 | Man and His Symbols (Jung/Jaffé; Aldus, 1964; later Dell) | 9780440351832 (Dell) | Человек и его символы (Серебряные нити 1997/2002; Б.С.К. 2008; Медков 2006/2020) | 5-89163-003-6; 5-902582-08-3; 978-5-906891-48-8 (5-89613-003-6 was a typo — bad check digit) |
|
||||
| 29 | Old and New Horizons of Sandplay Therapy (T&F, 2021) | 9780367756734 | ❌ (Dora Kalff is translated: «Сэндплей и его целительное воздействие…», ЦГИ 2011-12) | — |
|
||||
| 30 | Concerning the Spiritual in Art (orig. DE 1912; Dover) | 9780486847535 | О духовном в искусстве (БукСМарт 2020, 2 т.; РИПОЛ 2016; АСТ 2019; Азбука 2020; Эксмо 2020; URSS 2019; 1967 NY) | 978-5-907043-58-9/978-5-907043-60-2; 978-5-386-09656-4; 978-5-17-118159-8; 978-5-389-18275-2; 978-5-699-91768-6; 978-5-9710-6754-2 |
|
||||
| 30 | Concerning the Spiritual in Art (orig. DE 1912; Dover) | 9780486847535 | О духовном в искусстве (БукСМарт 2020, 2 т.; РИПОЛ 2016; АСТ 2019; Азбука 2020; Эксмо 2020; Ленанд 2019) | 978-5-907043-58-9/978-5-907043-60-2; 978-5-386-09656-4; 978-5-17-118159-8; 978-5-389-18275-2; 978-5-699-91768-6; 978-5-9710-6754-2 (Ленанд) |
|
||||
| 31 | The Tree Test (H. Huber, 1952) | — (pre-ISBN) | Тест «Дерево» (Эксмо, 2010, пер. С. Дежуров) | 978-5-699-36929-4 |
|
||||
| 32 | The Lüscher Color Test (Pocket Books, 1969; orig. DE 1949) | 0671780735 | Цветовой тест Люшера (Эксмо-Пресс 2002; Эксмо 2004; АСТ 2005) | 5-04-009715-8; 5-699-07065-6; 5-17-030021-2 |
|
||||
| 33 | Imagination in Action (1989; Shambhala 2015) | 9781611802016 | ❌ | — |
|
||||
|
|
@ -124,24 +124,64 @@ ISBN (pre-ISBN / not stated on title / new ed.); **❌** = no such edition found
|
|||
| 21 | Assessing Personality Through Tree Drawings (Basic 1977) | ✅ 9780465005055 | — | ❌ | — | — |
|
||||
| 22 | La Dimensión Simbólica (ES original) | ⚠ not found in OL | — | ❌ | — | — |
|
||||
| 23 | Encyclopedia of Archetypal Symbolism v.2 — Elder (Shambhala 1996) | ✅ 9781570620966 | — | ❌ | — | — |
|
||||
| 24 | Number and Time (Northwestern 1986; orig. DE 1970) | ✅ 9780810105324 | Число и время (Фантом 2012; Клуб Касталия 2018; Касталия 2025) | ✅ 5-263-00368-2 · 978-5-519-65861-4 · 978-5-521-24472-0 | 1 pdf | 1 djvu |
|
||||
| 24 | Number and Time (Northwestern 1986; orig. DE 1970) | ✅ 9780810105324 | Число и время (Фантом 2012; Клуб Касталия 2018; Касталия 2025) | ✅ 978-5-263-00368-5† · 978-5-519-65861-4 · 978-5-521-24472-0 | 1 pdf | 1 djvu |
|
||||
| 25 | “Peter Birkhäuser — Artist and Artwork” (Spring 1964, essay) | — essay, no ISBN | — | ❌ | — | — |
|
||||
| 26 | The Secret World of Drawings (Sigo 2002) | ✅ 9780938434467 | Тайный мир рисунка (Деметра 2003; 2nd 2014) | ⚠ not stated | — (absent) | 1 pdf |
|
||||
| 27 | Images, Meanings and Connection (Daimon 1999) | ✅ 3856305866 | — | ❌ | — | — |
|
||||
| 28 | Man and His Symbols (Aldus 1964; Dell) | ✅ 9780440351832 | Человек и его символы (Серебряные нити 1997/2002; Б.С.К. 2008; Медков 2006/2020) | ✅ 5-89163-003-6 · 5-89613-003-6 · 5-902582-08-3 · 978-5-906891-48-8 | 4 pdf | 4 fb2 |
|
||||
| 28 | Man and His Symbols (Aldus 1964; Dell) | ✅ 9780440351832 | Человек и его символы (Серебряные нити 1997/2002; Б.С.К. 2008; Медков 2006/2020) | ✅ 5-89163-003-6 · 5-902582-08-3 · 978-5-906891-48-8 | 4 pdf | 4 fb2 |
|
||||
| 29 | Old and New Horizons of Sandplay (T&F 2021) | ✅ 9780367756734 | — (Dora Kalff переведена: «Сэндплей…», ЦГИ 2011-12) | ❌ | — | — |
|
||||
| 30 | Concerning the Spiritual in Art (orig. DE 1912; Dover) | ✅ 9780486847535 | О духовном в искусстве (БукСМарт 2020 2т.; РИПОЛ 2016; АСТ 2019; Азбука 2020; Эксмо 2020; URSS 2019) | ✅ 978-5-907043-58-9 · 978-5-907043-60-2 · 978-5-386-09656-4 · 978-5-17-118159-8 · 978-5-389-18275-2 · 978-5-699-91768-6 · 978-5-9710-6754-2 | 1 pdf | 3 pdf |
|
||||
| 30 | Concerning the Spiritual in Art (orig. DE 1912; Dover) | ✅ 9780486847535 | О духовном в искусстве (БукСМарт 2020 2т.; РИПОЛ 2016; АСТ 2019; Азбука 2020; Эксмо 2020; Ленанд 2019) | ✅ 978-5-907043-58-9 · 978-5-907043-60-2 · 978-5-386-09656-4 · 978-5-17-118159-8 · 978-5-389-18275-2 · 978-5-699-91768-6 · 978-5-9710-6754-2‡ | 1 pdf | 3 pdf |
|
||||
| 31 | The Tree Test (H. Huber 1952) | ⚠ pre-ISBN | Тест «Дерево» (Эксмо 2010) | ✅ 978-5-699-36929-4 | — (absent) | 1 doc ⚠* |
|
||||
| 32 | The Lüscher Color Test (Pocket 1969; orig. DE 1949) | ✅ 0671780735 | Цветовой тест Люшера (Эксмо-Пресс 2002; Эксмо 2004; АСТ 2005) | ✅ 5-04-009715-8 · 5-699-07065-6 · 5-17-030021-2 | 1 pdf | 2 fb2 |
|
||||
| 33 | Imagination in Action (Shambhala 2015) | ✅ 9781611802016 | — | ❌ | — | — |
|
||||
| 34 | The Depth Psychology of Art (C.C. Thomas 1999) | ✅ 9780398055356 | — | ❌ | — | — |
|
||||
| 35 | Integrating the Arts in Therapy (C.C. Thomas 2004) | ✅ 9780398078683 | — | ❌ | — | — |
|
||||
| 36 | Encyclopedia of Archetypal Symbolism v.1 — Moon (Shambhala 1997) | ✅ 9781570622502 | — | ❌ | — | — |
|
||||
| 37 | The Archetypal World of Henry Moore (Harper & Row 1959) | ✅ 0691018650 | 🔶 4 ess. 1959 in «Глубинная психология и новая этика» (Азбука-Аттикус) | ⚠ 5-7331-0157-1 (anthology) | — | — |
|
||||
| 37 | The Archetypal World of Henry Moore (Harper & Row 1959) | ✅ 0691018650 | 🔶 4 ess. 1959 in «Глубинная психология и новая этика» (Азбука-Аттикус) | ⚠ 5-7331-0157-1‡ (anthology) | — | — |
|
||||
| 38 | Color Symbolism: The Eranos Lectures 1972 (Spring 2005) | ✅ 9780882145549 | Символизм цвета. Из архивов Эраноса 1972 (Клуб Касталия) | ✅ 978-5-90811-054-9 | 1 epub | — (absent) |
|
||||
| 39 | Art brut (Flammarion 1997; EN 2001) | ✅ 2080122339 | — | ❌ | — | — |
|
||||
|
||||
\* 31: the only libgen file is a RU compilation ABOUT the tree test, not Koch's book (see MANIFEST).
|
||||
† 24: was transcribed as 5-263-00368-2 (ISBN-10), whose check digit is wrong (should be 4);
|
||||
the valid ISBN-13 is 978-5-263-00368-5 (verified, check digit OK).
|
||||
‡ 30/37: ISBN structure valid, but the registered publisher GROUP differs from the attributed
|
||||
publisher (978-5-9710-… = Ленанд, not URSS; 5-7331-… = Академический проект) — likely co-publishing
|
||||
or a misattribution in the source record; ISBN itself is real (see Table 4).
|
||||
|
||||
## Table 4 — ISBN validation (2026-07-15, all 58 ISBNs from Table 3)
|
||||
|
||||
Pipeline (`tools/isbnval.py`, random pauses 2–5s): 1) **structure** — libgen.vg biblioservice
|
||||
`type=isbn` (checksum + registered publisher group); 2) **Open Library** `search.json?isbn=`
|
||||
(title/author/year); 3) **Google Books** `books.google.com/books?vid=ISBN…` via curl (title tag,
|
||||
200/404); 4) **NLR** free-text for RU misses. Raw data: `data/isbn-validation.tsv`.
|
||||
|
||||
**Result: 58/58 structurally valid (0 bad checksums) · 43 VALID (found in OL or Google Books with
|
||||
matching title) · 16 STRUCT-ONLY (real ISBN, registered prefix, but not indexed in OL/GB/NLR —
|
||||
small-press RU books, expected).**
|
||||
|
||||
Notable confirmations:
|
||||
- 31 RU 978-5-699-36929-4 → Google: «Тест "Дерево": [пер. с нем.] — Карл Кох», Эксмо ✓ (book & ISBN real).
|
||||
- 28 RU 5-89163-003-6 → Google «Человек и его символы» + prefix «Серебряные нити» ✓;
|
||||
5-902582-08-3 (Медков 2006) → Google «Человек и его символы: [сборник: перевод]» ✓.
|
||||
- 30 RU: БукСМарт т.1/т.2 → Google «О духовном в искусстве: Полное критическое издание» ✓;
|
||||
978-5-386-09656-4 = «Энтраст Трейдинг» (РИПОЛ) ✓; 978-5-17-118159-8 = АСТ/Хранитель ✓;
|
||||
978-5-389-18275-2 = Азбука-Аттикус ✓; 978-5-699-91768-6 = Эксмо ✓.
|
||||
- 01 RU both АСТ ISBNs → prefix «Хранитель; АСТ; Астрель» ✓.
|
||||
|
||||
Discrepancies found by validation:
|
||||
1. **5-89613-003-6** (item 28, was in Table 2/3) — ISBN-10 check digit invalid (269 mod 11 ≠ 0),
|
||||
prefix 5-896 unregistered → **typo, removed**. Correct: 5-89163-003-6.
|
||||
2. **5-263-00368-2** (item 24) — check digit invalid (should be 4) → replaced by 978-5-263-00368-5 (†).
|
||||
3. **978-5-9710-6754-2** (item 30) — prefix «Ленанд», not URSS (‡): real ISBN of a different
|
||||
2019-ish edition or co-publishing; needs a shop page to attribute.
|
||||
4. **5-7331-0157-1** (item 37) — prefix «Академический проект» (‡): the anthology was likely
|
||||
co-published (Азбука-Аттикус + Академический проект); ISBN itself valid.
|
||||
5. **978-5-98712-790-2** (item 11) — prefix «Петроглиф» (not ЦГИ): «Динамика символов» 2020 was
|
||||
co-published ЦГИ/Петроглиф; consistent.
|
||||
6. **978-5-521-24472-0** (item 24, Касталия 2025) — prefix «Пальмира»: 2025 ed. co-published
|
||||
with С.-Петербургский «Пальмира»; consistent.
|
||||
7. isbnsearch.org (first attempt) rate-walls after ~10 requests ("Please Verify to Continue",
|
||||
no auto-recovery in 7 min) — abandoned for the OL/GB/libgen-biblioservice pipeline.
|
||||
|
||||
### Quick stats
|
||||
- **Both EN and RU published, ISBN found in both:** 01, 05, 11, 24, 28, 30, 32, 38 — **8 books**.
|
||||
|
|
|
|||
107
tools/isbncheck.py
Normal file
107
tools/isbncheck.py
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Batch-validate ISBNs via isbnsearch.org (user-provided source, 2026-07-15).
|
||||
|
||||
Response shapes (calibrated):
|
||||
200 + "ISBN-13:"/"ISBN-10:" fields -> book found; parse title/author/publisher/year
|
||||
200 + "Please Verify to Continue" -> rate-limit wall; cooldown 150s, retry
|
||||
404 "Page Not Found" -> ISBN not in their DB
|
||||
|
||||
Usage:
|
||||
tools/isbncheck.py <items.tsv> <out.tsv>
|
||||
items.tsv rows: item\tlang\tisbn (whitespace-separated, # comments)
|
||||
Resume: rows already OK in out.tsv are skipped.
|
||||
Politeness: random pause 8-18s between requests (curl engine).
|
||||
"""
|
||||
import random, re, subprocess, sys, time
|
||||
|
||||
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
|
||||
|
||||
|
||||
def fetch(isbn):
|
||||
url = f"https://isbnsearch.org/isbn/{isbn}"
|
||||
p = subprocess.run(["curl", "-s", "-A", UA, "--max-time", "60",
|
||||
"-w", "\nHTTP_CODE:%{http_code}", url],
|
||||
capture_output=True, timeout=90)
|
||||
body, _, code = p.stdout.decode("utf-8", "replace").rpartition("HTTP_CODE:")
|
||||
return code.strip(), body
|
||||
|
||||
|
||||
def parse(body):
|
||||
def field(label):
|
||||
m = re.search(r"<td[^>]*>\s*" + re.escape(label) + r"\s*</td>\s*<td[^>]*>(.*?)</td>",
|
||||
body, re.S)
|
||||
if not m:
|
||||
return ""
|
||||
return re.sub(r"<[^>]+>", " ", m.group(1)).strip()
|
||||
tm = re.search(r"<title>ISBN\s+\S+\s*-\s*(.*?)</title>", body, re.S)
|
||||
title = re.sub(r"<[^>]+>", " ", tm.group(1)).strip() if tm else ""
|
||||
pm = re.search(r"Published:?\s*</td>\s*<td[^>]*>\s*([\d]{4})", body)
|
||||
year = pm.group(1) if pm else ""
|
||||
return title, field("Author:") or field("Authors:"), field("Publisher:"), year
|
||||
|
||||
|
||||
def main():
|
||||
items_file, out_file = sys.argv[1], sys.argv[2]
|
||||
rows = []
|
||||
for line in open(items_file):
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
rows.append(line.split("\t"))
|
||||
# resume: load existing OK rows (stale non-OK rows from wall-hits are dropped)
|
||||
done = set()
|
||||
if __import__("os").path.exists(out_file):
|
||||
for line in open(out_file):
|
||||
parts = line.rstrip("\n").split("\t")
|
||||
if len(parts) >= 4 and parts[3] == "OK":
|
||||
done.add((parts[0], parts[1], parts[2]))
|
||||
out = open(out_file, "w")
|
||||
out.write("item\tlang\tisbn\tstatus\ttitle\tauthor\tpublisher\tyear\n")
|
||||
if __import__("os").path.exists(out_file):
|
||||
for line in open(out_file):
|
||||
if line.startswith("item\t"):
|
||||
continue
|
||||
parts = line.rstrip("\n").split("\t")
|
||||
if len(parts) >= 4 and parts[3] == "OK":
|
||||
out.write(line)
|
||||
total = len(rows)
|
||||
n = 0
|
||||
for i, (item, lang, isbn) in enumerate(rows):
|
||||
if (item, lang, isbn) in done:
|
||||
print(f"[{i+1}/{total}] {item}/{lang} {isbn} skip (OK)", flush=True)
|
||||
continue
|
||||
n += 1
|
||||
status, fields = None, None
|
||||
for attempt in range(4):
|
||||
try:
|
||||
code, body = fetch(isbn)
|
||||
except Exception as e:
|
||||
print(f" {isbn}: fetch error ({e}), backoff", flush=True)
|
||||
time.sleep(15)
|
||||
continue
|
||||
if code == "200" and ("ISBN-13:" in body or "ISBN-10:" in body):
|
||||
status = "OK"
|
||||
fields = parse(body)
|
||||
break
|
||||
if code == "200" and "Please Verify to Continue" in body:
|
||||
print(f" {isbn}: VERIFY wall, cooldown 150s (attempt {attempt+1})", flush=True)
|
||||
time.sleep(150)
|
||||
continue
|
||||
status = code # 404 etc.
|
||||
break
|
||||
if status == "OK":
|
||||
title, author, pub, year = fields
|
||||
out.write(f"{item}\t{lang}\t{isbn}\tOK\t{title}\t{author}\t{pub}\t{year}\n")
|
||||
print(f"[{i+1}/{total}] {item}/{lang} {isbn} OK: {title[:60]}", flush=True)
|
||||
else:
|
||||
out.write(f"{item}\t{lang}\t{isbn}\t{status}\t-\t-\t-\t-\n")
|
||||
print(f"[{i+1}/{total}] {item}/{lang} {isbn} -> HTTP {status} (not found)", flush=True)
|
||||
out.flush()
|
||||
if i < total - 1:
|
||||
time.sleep(random.uniform(8, 18))
|
||||
out.close()
|
||||
print(f"done -> {out_file}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
157
tools/isbnval.py
Normal file
157
tools/isbnval.py
Normal file
|
|
@ -0,0 +1,157 @@
|
|||
#!/usr/bin/env python3
|
||||
"""ISBN validation pipeline (2026-07-15, replaces isbnsearch.org which rate-walls).
|
||||
|
||||
Sources per ISBN:
|
||||
1. STRUCT libgen.vg biblioservice type=isbn -> checksum error, publisher group name
|
||||
(free, no limits; ISBN-13 or ISBN-10 both accepted)
|
||||
2. OL openlibrary.org search.json?isbn= -> title/author/year/publisher (best for EN)
|
||||
3. GB books.google.com/books?vid=ISBN... -> <title> tag "T - A - Google Книги"
|
||||
(200 = indexed w/ title+author, 404 = not in Google's index)
|
||||
4. NLR tools/nlr.py free-text (RU books only, if 1-3 inconclusive) -> presence check
|
||||
|
||||
Usage: tools/isbnval.py <items.tsv> <out.tsv>
|
||||
items.tsv: item\tlang\tisbn
|
||||
Resume: rows with non-BAD struct+verdict already in out.tsv are skipped.
|
||||
Politeness: random pauses 2-5s (GB/OL), ~3s (libgen).
|
||||
"""
|
||||
import json, random, re, subprocess, sys, time
|
||||
|
||||
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
|
||||
|
||||
|
||||
def curl_json(url, timeout=60):
|
||||
p = subprocess.run(["curl", "-s", "-A", UA, "--max-time", str(timeout), url],
|
||||
capture_output=True, timeout=timeout + 30)
|
||||
return json.loads(p.stdout.decode("utf-8", "replace"))
|
||||
|
||||
|
||||
def isbn13(isbn):
|
||||
d = re.sub(r"\D", "", isbn)
|
||||
if len(d) == 13:
|
||||
return d
|
||||
if len(d) == 10:
|
||||
d = "978" + d[:9]
|
||||
s = sum(int(c) * (1 if i % 2 == 0 else 3) for i, c in enumerate(d))
|
||||
d += str((10 - s % 10) % 10)
|
||||
return d
|
||||
return None
|
||||
|
||||
|
||||
def struct_check(isbn):
|
||||
d = isbn13(isbn) or re.sub(r"\D", "", isbn)
|
||||
try:
|
||||
j = curl_json(f"https://libgen.vg/biblioservice.php?value={d}&type=isbn&format=json")
|
||||
r = j[0] if isinstance(j, list) else j
|
||||
if not r or r.get("error"):
|
||||
return ("BAD", r.get("error", "no response") if r else "no response", "")
|
||||
pubs = ";".join(p.get("name", "") for p in (r.get("isbn_pubgr_info") or []))
|
||||
return ("OK", r.get("isbn_with_dashes", ""), pubs)
|
||||
except Exception as e:
|
||||
return ("ERR", str(e)[:60], "")
|
||||
|
||||
|
||||
def ol_check(isbn):
|
||||
d = re.sub(r"\D", "", isbn)
|
||||
try:
|
||||
j = curl_json(f"https://openlibrary.org/search.json?isbn={d}&limit=3")
|
||||
docs = j.get("docs") or []
|
||||
if not docs:
|
||||
return ""
|
||||
x = docs[0]
|
||||
t = (x.get("title") or "").strip()
|
||||
a = ";".join((x.get("author_name") or [])[:2])
|
||||
y = (x.get("publish_year") or [""])[0]
|
||||
return f"{t} | {a} | {y}"
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
|
||||
def gb_check(isbn):
|
||||
d = isbn13(isbn)
|
||||
if not d:
|
||||
return ""
|
||||
try:
|
||||
p = subprocess.run(["curl", "-s", "-L", "-A", UA, "--max-time", "60",
|
||||
"-w", "\nHTTP:%{http_code}",
|
||||
f"https://books.google.com/books?vid=ISBN{d}"],
|
||||
capture_output=True, timeout=90)
|
||||
out = p.stdout.decode("utf-8", "replace")
|
||||
body, _, code = out.rpartition("HTTP:")
|
||||
code = code.strip()
|
||||
if code != "200":
|
||||
return ""
|
||||
m = re.search(r"<title>(.*?)</title>", body, re.S)
|
||||
if not m:
|
||||
return ""
|
||||
t = re.sub(r"<[^>]+>", " ", m.group(1))
|
||||
t = re.sub(r"\s+", " ", t).strip()
|
||||
t = re.sub(r"\s*-\s*Google (Книги|Books)\s*$", "", t)
|
||||
return t[:160]
|
||||
except Exception:
|
||||
return ""
|
||||
|
||||
|
||||
def nlr_check(isbn):
|
||||
d = re.sub(r"\D", "", isbn)
|
||||
try:
|
||||
p = subprocess.run(["python3", "tools/nlr.py", d], capture_output=True, timeout=150)
|
||||
t = p.stdout.decode("utf-8", "replace")
|
||||
m = re.search(r"(\d+) rows", t)
|
||||
return m.group(1) if m else "?"
|
||||
except Exception:
|
||||
return "?"
|
||||
|
||||
|
||||
def main():
|
||||
items_file, out_file = sys.argv[1], sys.argv[2]
|
||||
rows = []
|
||||
for line in open(items_file):
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
rows.append(line.split("\t"))
|
||||
done = set()
|
||||
import os
|
||||
if os.path.exists(out_file):
|
||||
for line in open(out_file):
|
||||
parts = line.rstrip("\n").split("\t")
|
||||
if len(parts) >= 4 and parts[3] == "OK":
|
||||
done.add((parts[0], parts[1], parts[2]))
|
||||
out = open(out_file, "w")
|
||||
out.write("item\tlang\tisbn\tstruct\tstruct_detail\tol\tgbooks\tnlr\tverdict\n")
|
||||
if os.path.exists(out_file):
|
||||
for line in open(out_file):
|
||||
parts = line.rstrip("\n").split("\t")
|
||||
if line.startswith("item\t") or (len(parts) >= 4 and parts[3] == "OK"):
|
||||
out.write(line)
|
||||
total = len(rows)
|
||||
for i, (item, lang, isbn) in enumerate(rows):
|
||||
if (item, lang, isbn) in done:
|
||||
print(f"[{i+1}/{total}] {item}/{lang} {isbn} skip", flush=True)
|
||||
continue
|
||||
s_stat, s_det, s_pub = struct_check(isbn)
|
||||
time.sleep(random.uniform(1.5, 3.0))
|
||||
ol = ol_check(isbn)
|
||||
time.sleep(random.uniform(1.0, 2.5))
|
||||
gb = gb_check(isbn)
|
||||
time.sleep(random.uniform(2.0, 5.0))
|
||||
nlr = ""
|
||||
if lang == "RU" and not gb:
|
||||
nlr = nlr_check(isbn)
|
||||
time.sleep(random.uniform(2.0, 4.0))
|
||||
found = bool(ol) or bool(gb)
|
||||
if s_stat == "BAD":
|
||||
verdict = "BAD-STRUCT"
|
||||
elif found:
|
||||
verdict = "VALID"
|
||||
else:
|
||||
verdict = "STRUCT-ONLY"
|
||||
out.write(f"{item}\t{lang}\t{isbn}\t{s_stat}\t{s_det}|{s_pub}\t{ol}\t{gb}\t{nlr}\t{verdict}\n")
|
||||
out.flush()
|
||||
print(f"[{i+1}/{total}] {item}/{lang} {isbn} {verdict} | gb={gb[:50]!r} | ol={ol[:50]!r} | pub={s_pub[:40]}", flush=True)
|
||||
out.close()
|
||||
print(f"done -> {out_file}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue