You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ISBN调用Open Library API查询图书数字借阅可用性

问题:Open Library API 图书借阅可用性属性确认与代码修正

我已实现搜索栏功能,可通过Google Books API根据搜索词获取包含标题、作者、ISBN等信息的图书列表,该部分运行正常。现在需要为每个列表项添加按钮,点击后调用Open Library API,传入Google Books返回的ISBN,查询该图书是否可在Open Library进行数字借阅。我想明确Open Library API中对应图书借阅可用性的数据属性名称(例如Google Books中ISBN对应volumeInfo.industryIdentifiers[0].identifier),目前推测可能是editions.ebook_access但不确定,希望能正确引用该属性并在页面展示。


Google Books 数据提取代码

var bookTitle = book.volumeInfo.title;
var bookAuthor = book.volumeInfo.authors;
var bookDescription = book.volumeInfo.description
var bookThumbnail = book.volumeInfo.imageLinks.smallThumbnail;
var isbn =  book.volumeInfo.industryIdentifiers[0].identifier;

我编写的Open Library API 请求代码

var fetchRequest = function() {
    var isbn = '0451526538'
    var searchURL = `https://openlibrary.org/api/books?bibkeys=${isbn}&format=json&jscmd=data`; 
    
    fetch(searchURL)
    .then(function(response) {
        return response.json();
    })
    .then(function(response2) {
        return response2.items.map(function(book) {
          createBookList(book)
        })   
    })
    .catch( function()  {
        console.log(`There was an error with the fetch request`);       
    }); 
}     

我尝试的属性关联代码

bookEPUB.textContent = 'This book is available to borrow in ePUB format';
bookEPUB.href =  'book.ebooks.availability.epub_url';
bookPDF.textContent = 'This book is available to borrow in PDF format';
bookPDF.href = 'book.ebooks.availability.pdf_url';
bookTEXT.textContent = 'This book is available to borrow in TEXT format';
bookTEXT.href = 'book.ebooks.availability.text_url';

正确的Open Library API 借阅属性说明

你使用的https://openlibrary.org/api/books接口,当指定jscmd=data参数时,电子书借阅相关属性位于ebooks字段下:

  • 借阅权限标识:ebooks.access,常见值为borrow(可借阅)、read(免费阅读)
  • 格式链接属性:
    • ePUB借阅链接:ebooks.availability.epub_url
    • PDF借阅链接:ebooks.availability.pdf_url
    • TEXT借阅链接:ebooks.availability.text_url

另外,你的请求代码存在两处关键错误,需要修正:

  1. Bibkeys格式错误:接口要求ISBN参数必须添加前缀(如ISBN:),否则无法正确匹配图书
  2. 响应结构处理错误:该接口返回的是键为ISBN:xxx的对象,而非包含items数组的结构,不能用response2.items.map遍历

修正后的请求代码

var fetchRequest = function(isbn) {
    // 为ISBN添加前缀,兼容ISBN-10/ISBN-13格式
    var bibkey = `ISBN:${isbn}`;
    var searchURL = `https://openlibrary.org/api/books?bibkeys=${bibkey}&format=json&jscmd=data`; 
    
    fetch(searchURL)
    .then(function(response) {
        return response.json();
    })
    .then(function(responseData) {
        // 提取返回的图书数据(取对象的第一个值)
        var bookData = Object.values(responseData)[0];
        if (bookData) {
            displayBorrowInfo(bookData);
        } else {
            console.log('未找到该图书的借阅信息');
        }
    })
    .catch( function()  {
        console.log(`请求Open Library API时出错`);       
    }); 
}     

修正后的属性关联代码

function displayBorrowInfo(book) {
    // 检查是否有可借阅的电子书资源
    if (book.ebooks && book.ebooks.access === 'borrow') {
        // 处理ePUB格式
        if (book.ebooks.availability.epub_url) {
            bookEPUB.textContent = '可借阅ePUB格式';
            bookEPUB.href = book.ebooks.availability.epub_url;
            bookEPUB.style.display = 'inline';
        } else {
            bookEPUB.style.display = 'none';
        }
        
        // 处理PDF格式
        if (book.ebooks.availability.pdf_url) {
            bookPDF.textContent = '可借阅PDF格式';
            bookPDF.href = book.ebooks.availability.pdf_url;
            bookPDF.style.display = 'inline';
        } else {
            bookPDF.style.display = 'none';
        }
        
        // 处理TEXT格式
        if (book.ebooks.availability.text_url) {
            bookTEXT.textContent = '可借阅TEXT格式';
            bookTEXT.href = book.ebooks.availability.text_url;
            bookTEXT.style.display = 'inline';
        } else {
            bookTEXT.style.display = 'none';
        }
    } else {
        // 无可用借阅资源时的提示
        bookEPUB.textContent = '该图书无法在Open Library数字借阅';
        bookEPUB.href = '';
        bookEPUB.style.display = 'inline';
        bookPDF.style.display = 'none';
        bookTEXT.style.display = 'none';
    }
}

内容的提问来源于stack exchange,提问作者TD99999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:46:25