4

根据 Google Books API 文档,每卷产生 6 个不同的图像链接(smallThumbnail、thumbnail、small、medium、large、extraLarge)。

不幸的是,对于我尝试过的所有查询(并且我已经尝试了很多)smallThumbnail并被thumbnail退回。(示例查询

另外,这两张图片除了很小之外,右下角还有这个小假狗耳朵

示例缩略图

他们是否弃用了高质量的图片链接?还有其他方法可以获取这些图像吗?我尝试过的其他 API 要么已弃用(Goodreads),要么不太广泛(开放库)

4

3 回答 3

2

我有同样的问题。搜索查询仅产生 imageLinks 的 smallThumbnail 和 thumbnail 键。如果您直接查询卷(像这样),那么您将获得 imageLinks 的所有选项。

不过,这不会 100% 解决您的问题。对于某些书籍,小/中/大链接指向书籍的第一页,而不是实际的封面。

于 2021-01-05T15:41:28.823 回答
2

您可能无法始终获得高分辨率图像。此外,对于某些图书搜索结果,您可能根本无法获得任何图像。

我正在做一个类似的项目,我不得不手动检查我在回复中得到的每张图片的分辨率,我只选择了“好”的图片。这是我必须做的:

        let newArr = [];
        let lowResImage = 0;
        let dataWithoutImage = 0;
        let highResImage = 0;
genreResults?.forEach((book, index) => {

        if (book?.volumeInfo?.imageLinks?.smallThumbnail) {//the current book has an image

            mypromise(book.volumeInfo.imageLinks.smallThumbnail).then((res) => {
                ++highResImage;
                newArr.push(book)
            }).catch(error => {
                ++lowResImage;
            }).finally(() => {
                if (dataWithoutImage + highResImage + lowResImage === genreResults.length) {
                    console.log("---------data populated----------");
                    console.log("highResolutionImages", highResImage);
                    console.log("low resolution images:", lowResImage);
                    console.log("booksWithoutImages", dataWithoutImage);
                    console.log("genreResults size", genreResults.length)
                    setBooks(newArr)
                }
            });

        }
        else //this book does not contain an image
            ++dataWithoutImage

    })

检查分辨率的函数如下所示:

let mypromise = function checkImageResolution(url) {
    return new Promise((resolve, reject) => {
        var img = new Image();
        img.src = url;
        img.onload = function () {
            console.log("image dimensions", this.width, this.height);
            if (this.width < 125 || this.height < 100) //if either of these is true, reject the image
                reject("low quality image");
            else
                resolve("high quality ,let's have this one");
        }
    });
}
于 2021-07-14T07:52:19.697 回答
0

替换以下内容:

thumbnail=thumbnail.replaceAll("1","10");

但它仅适用于某些书籍,而对于其余书籍,它只会加载书籍的第一页。

于 2021-08-21T08:57:00.837 回答