garethbjohnson / gutendex Goto Github PK
View Code? Open in Web Editor NEWWeb API for Project Gutenberg ebook metadata
Home Page: https://gutendex.com
License: MIT License
Web API for Project Gutenberg ebook metadata
Home Page: https://gutendex.com
License: MIT License
Hello Gareth,
First of all thank you for providing this API to open source. I have learnt alot through perusing and manipulating some code.
I wanted to know how to register and authenticate users who then get access to particular books. I would like to register users with - username, firstname, lastname, email and passwords. I can provide the code base of what I have done.
Kindly help.
The public API URL at https://gutendex.com/ throws a "This site can't be reached" when I visit it.
I would really appreciate translators being included, i.e. for instance for https://www.gutenberg.org/ebooks/39402
{
id: 39402,
title: 'Jeremiah: A Drama in Nine Scenes',
authors: [ { name: 'Zweig, Stefan', birth_year: 1881, death_year: 1942 } ],
translators: [{name: 'Cedar, Paul', birth_year: 1880, death_year: 1972 }, {name: 'Eden, Paul', birth_year: 1865, death_year: 1944 }]
...
}
Thanks in advance & for this great project in general
Leonard
Is there an easy way to use the urls in "formats" to fetch a books contents. Im trying to use the url from "text/plain", but I get CORS errors from Gutenberg. Is the only way to fetch the url in my backend then redirect the results back to my frontend?
Hi,
Thanks for making this great resource! I noticed that Gutendex's API only gave the KF8 file format for Kindles, which is only compatible with newer Kindles. However, on Gutenberg's official website, they have two files, "Kindle" and "older Kindles."
I'm not sure if Gutenberg's downloadable API supports this, but I was wondering if it might be possible to include these files as well.
Thank you!
EDIT: Right now, I'm just replacing ".kf8" with ".kindle" because of Gutenberg's file naming convention, but I'm not sure if there's a better way to do this.
Getting error 500
CASE: Im following the guide until the step 4 during installing requirements.txt
Building wheel for psycopg2 (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [89 lines of output]
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.10
creating build/lib.linux-x86_64-3.10/psycopg2
copying lib/pool.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/_range.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/_ipaddress.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/tz.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/sql.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/_json.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/extensions.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/extras.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/psycopg1.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/errorcodes.py -> build/lib.linux-x86_64-3.10/psycopg2
copying lib/__init__.py -> build/lib.linux-x86_64-3.10/psycopg2
creating build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_cancel.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_async_keyword.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_types_basic.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_fast_executemany.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_lobject.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/testconfig.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_errcodes.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_copy.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_transaction.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_green.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_connection.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_bugX000.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_async.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_extras_dictcursor.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_notify.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_quote.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_sql.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_bug_gc.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/dbapi20.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_ipaddress.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_replication.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_cursor.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_types_extras.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/testutils.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_dates.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_psycopg2_dbapi20.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_with.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/test_module.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/dbapi20_tpc.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
copying tests/__init__.py -> build/lib.linux-x86_64-3.10/psycopg2/tests
Skipping optional fixer: buffer
Skipping optional fixer: idioms
Skipping optional fixer: set_literal
Skipping optional fixer: ws_comma
running build_ext
building 'psycopg2._psycopg' extension
creating build/temp.linux-x86_64-3.10
creating build/temp.linux-x86_64-3.10/psycopg
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_asis.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_asis.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_binary.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_binary.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_datetime.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_datetime.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_list.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_list.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_pboolean.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_pboolean.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_pdecimal.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_pdecimal.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_pfloat.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_pfloat.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_pint.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_pint.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/adapter_qstring.c -o build/temp.linux-x86_64-3.10/psycopg/adapter_qstring.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/bytes_format.c -o build/temp.linux-x86_64-3.10/psycopg/bytes_format.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/connection_int.c -o build/temp.linux-x86_64-3.10/psycopg/connection_int.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/connection_type.c -o build/temp.linux-x86_64-3.10/psycopg/connection_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/cursor_int.c -o build/temp.linux-x86_64-3.10/psycopg/cursor_int.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/cursor_type.c -o build/temp.linux-x86_64-3.10/psycopg/cursor_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/diagnostics_type.c -o build/temp.linux-x86_64-3.10/psycopg/diagnostics_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/error_type.c -o build/temp.linux-x86_64-3.10/psycopg/error_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/green.c -o build/temp.linux-x86_64-3.10/psycopg/green.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/libpq_support.c -o build/temp.linux-x86_64-3.10/psycopg/libpq_support.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/lobject_int.c -o build/temp.linux-x86_64-3.10/psycopg/lobject_int.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/lobject_type.c -o build/temp.linux-x86_64-3.10/psycopg/lobject_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/microprotocols.c -o build/temp.linux-x86_64-3.10/psycopg/microprotocols.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/microprotocols_proto.c -o build/temp.linux-x86_64-3.10/psycopg/microprotocols_proto.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/notify_type.c -o build/temp.linux-x86_64-3.10/psycopg/notify_type.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/pqpath.c -o build/temp.linux-x86_64-3.10/psycopg/pqpath.o -Wdeclaration-after-statement
x86_64-linux-gnu-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPSYCOPG_DEFAULT_PYDATETIME=1 -DPSYCOPG_VERSION="2.7.1 (dt dec pq3 ext lo64)" -DPG_VERSION_NUM=141000 -DHAVE_LO64=1 -I/usr/include/python3.10 -I. -I/usr/include/postgresql -I/usr/include/postgresql/14/server -c psycopg/psycopgmodule.c -o build/temp.linux-x86_64-3.10/psycopg/psycopgmodule.o -Wdeclaration-after-statement
psycopg/psycopgmodule.c: In function ‘psyco_is_main_interp’:
psycopg/psycopgmodule.c:685:18: error: invalid use of incomplete typedef ‘PyInterpreterState’ {aka ‘struct _is’}
685 | while (interp->next)
| ^~
psycopg/psycopgmodule.c:686:24: error: invalid use of incomplete typedef ‘PyInterpreterState’ {aka ‘struct _is’}
686 | interp = interp->next;
| ^~
error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for psycopg2
Running setup.py clean for psycopg2
Failed to build psycopg2
ERROR: Could not build wheels for psycopg2, which is required to install pyproject.toml-based projects```
ubuntu@ip-172-31-29-115:~/pgserver$
Hi,
Amazing service! Thank you so much!
Might it be possible to allow POST requests as well?
Hey there.
I am attempting to call gutendex.com using elm in the "Ellie" playground. You can experiment with going to ellie-app.com. Here is the code:
module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
import Http
import Json.Decode exposing (Decoder, field, string)
type alias Model =
{ title : Maybe String }
initialModel flags =
( { title = Nothing }, getBook )
getBook : Cmd Msg
getBook =
Http.get
{ url = url
, expect = Http.expectJson GotBook bookDecoder
}
bookDecoder : Decoder String
bookDecoder =
field "title" string
type Msg
= GotBook (Result Http.Error String) -- start with just title
update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
case msg of
GotBook (Ok title) ->
( { model | title = Just title }, Cmd.none )
GotBook (Err e) ->
( model, Cmd.none )
view : Model -> Html Msg
view model =
case model.title of
Just title ->
div [] [ text title ]
Nothing ->
div [] [ text "Looking..." ]
url =
"http://gutendex.com/books/2591/"
main : Program () Model Msg
main =
Browser.element
{ init = initialModel
, view = view
, update = update
, subscriptions = \_ -> Sub.none
}
However, in dev tools, I see I get a 'Blocked' request. I'm not sure what this means. Is your server setup to block external requests like this?
Thanks.
So i created this issue just to say a personal Thank You for creating this amazing API!
I've been using your API from very long time in some of my personal python scripts etc and recently made an Android app so the general people could also benefit from the amazing book catalogue of the project Gutenberg (since the official website doesn't seems very optimised with mobile devices).
The project might not be possible or would've taken a lot of work and time without this amazing API of yours. So thanks again for creating such an useful stuff!
PS: feel free to close this issue after you see it :)
Hey, I am trying to run gutendex on an azure server but when trying to update the catalog, I get:
./manage.py updatecatalog
/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/environ/environ.py:628: UserWarning: /tmp/8dbba6c19a61f2e/gutendex/.env doesn't exist - if you're not configuring your environment separately, create one.
warnings.warn(
Starting script at 10:22:34 on September 21, 2023
Making temporary directory...
Downloading compressed catalog...
Decompressing catalog...
Detecting stale directories...
Error: [Errno 2] No such file or directory: '/tmp/8dbba6c19a61f2e/catalog_files/tmp/cache/epub'
Traceback (most recent call last):
File "/tmp/8dbba6c19a61f2e/./manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/8dbba6c19a61f2e/books/management/commands/updatecatalog.py", line 345, in handle
send_log_email()
File "/tmp/8dbba6c19a61f2e/books/management/commands/updatecatalog.py", line 260, in send_log_email
send_mail(
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/mail/__init__.py", line 60, in send_mail
return mail.send()
^^^^^^^^^^^
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/mail/message.py", line 306, in send
return self.get_connection(fail_silently).send_messages([self])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/mail/backends/smtp.py", line 103, in send_messages
new_conn_created = self.open()
^^^^^^^^^^^
File "/tmp/8dbba6c19a61f2e/antenv/lib/python3.11/site-packages/django/core/mail/backends/smtp.py", line 70, in open
self.connection.login(self.username, self.password)
File "/opt/python/3.11.4/lib/python3.11/smtplib.py", line 750, in login
raise last_exception
File "/opt/python/3.11.4/lib/python3.11/smtplib.py", line 739, in login
(code, resp) = self.auth(
^^^^^^^^^^
File "/opt/python/3.11.4/lib/python3.11/smtplib.py", line 662, in auth
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first')
It seems like the main problem here is Error: [Errno 2] No such file or directory: '/tmp/8dbba6c19a61f2e/catalog_files/tmp/cache/epub'
.
Do you have any idea what could cause this?
I can't access the API or its companion website. Gutendex.com is not responding.
Hello
I try to deploy gutendex on heroku.com. But I don't know exactly how to do it. What I did so far:
Create "Procfile" file:
release: pip install gunicorn && python manage.py migrate && python manage.py updatecatalog && python manage.py collectstatic web: gunicorn gutendex.wsgi
Catalog (DB) is now generated. But somehow Server always crash on start up:
Maybe someone can help me?
Hi,
I tried to follow the installation guide and after this command:
./manage.py updatecatalog
I end up with this error:
Traceback (most recent call last):
File "./manage.py", line 22, in
execute_from_command_line(sys.argv)
File "/LocalPath/Python/gutendex/venv/local/lib/python2.7/site-packages/django/core/management/init.py", line 367, in execute_from_command_line
utility.execute()
File "/LocalPath/Python/gutendex/venv/local/lib/python2.7/site-packages/django/core/management/init.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/LocalPath/Python/gutendex/venv/local/lib/python2.7/site-packages/django/core/management/init.py", line 208, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/LocalPath/Python/gutendex/venv/local/lib/python2.7/site-packages/django/core/management/init.py", line 40, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/usr/lib/python2.7/importlib/init.py", line 37, in import_module
import(name)
ImportError: No module named management.commands.updatecatalog
I'm totally noob to Django and Python, what did I do wrong ?
Thanks...
It will be nice if the API can call Recently added. The latest new and updated eBooks.
Thanks in advance & for this great project.
Is there a way to add the page count to the json reply? It would be very useful if that's possible
Hey, first thanks for building and hosting a sane API for the Gutenberg project.
TL;DR;
Check out the simple react app I threw together in a few hours: https://gutenberg.netlify.com/
I wanted to let you know I recently embarked on a project to overhaul the Gutenberg UI, and was considering building both a frontend and API (which is when I encountered your project 🎉 ). Using your API I banged out a SUPER rough React frontend in a couple of hours. It needs a lot more work and it clearly has a lot of functions that are simply mocked out right now, but the popularity slider is pulling from your API and searching on a string will return the first page of results from your API (haven't done infinite scrolling or anything yet).
Let me know if you'd be interested in collaborating in some way!
Hi,
Sorry to ask so many questions. I was wondering if it might be possible to get the file size of each file. It can be helpful to estimate how long a book is :).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.