如何使用脚本、JSON和Books API将ISBN中的标题值插入图纸

vbopmzt1  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(107)

第一次在谷歌应用程序脚本编码,所以我为我的无知提前道歉。
我看到这个伟大的脚本上的数字灵感,但我难倒试图让它写的表。
我已经创建了一个Google工作表,包含以下3列数据:标题|作者|对于isbn,isbn I在C2和C3中具有2个值:9781471178412和9780669397666
在Google App Scripts中,我使用Google Books API来提取书名,但一直在纠结如何将Google API中的“title”值插入到我的书号的Google Sheet中。它记录了正确的书名,但当我在函数“fillInTheBlanks”中调用它时,它说它未定义。
任何指导,你可以提供这个新手是非常感谢!谢谢!

function getBookDetails(isbn) {

 var ISBN_COLUMN = 2;

 var dataRange = SpreadsheetApp.getActiveSpreadsheet()
    .getDataRange();
 var bookValues = dataRange.getValues();

 for(var row = 1; row < bookValues.length; row++){   
     var isbn = bookValues[row][ISBN_COLUMN];

    var url = "https://www.googleapis.com/books/v1/volumes?country=US&q=isbn:" + isbn;

    var response = UrlFetchApp.fetch(url);
    var results = JSON.parse(response);

    if (results.totalItems) {
      // There'll be only 1 book per ISBN
       var book = results.items[0];
       var title = (book["volumeInfo"]["title"]);
       var authors = (book["volumeInfo"]["authors"]);
  
       // For debugging
       Logger.log(book);
       Logger.log(title);
       Logger.log(authors);

     }
  }
}

function fillInTheBlanks(){
  var TITLE_COLUMN = 0;
  var AUTHOR_COLUMN = 1;
  var ISBN_COLUMN = 2;

var dataRange = SpreadsheetApp.getActiveSpreadsheet()
    .getDataRange();
var bookValues = dataRange.getValues();

for(var row = 1; row < bookValues.length; row++){   
    var isbn = bookValues[row][ISBN_COLUMN];
    var title1 = bookValues[row][TITLE_COLUMN];
    var author1 = bookValues[row][AUTHOR_COLUMN];

    if(isbn != "" && (title1 === "" || author1 === "") ){
      var runresults = getBookDetails(isbn);
      
     if(title1 === "" && runresults.title){
        bookValues[row][TITLE_COLUMN] = runresults.title; 
      
    }
  }
  
}
dataRange.setValues(bookValues);   
}
bprjcwpo

bprjcwpo1#

我知道我的代码不像大多数人那样优雅,但是我很高兴能够让它在我第一次尝试JSON/应用程序脚本时工作。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Book-list')
    .addItem('GoogleDataPull', 'fillInTheBlanks')
    .addSeparator()
    .addItem('OpenLibraryDataPull', 'fillInTheBlanksOL')
    .addToUi();
}

function getBookDetails(isbn) {
   var url = "https://www.googleapis.com/books/v1/volumes?country=US&q=isbn:" + isbn;
        var response = UrlFetchApp.fetch(url);
      var bookData = JSON.parse(response);
      if (bookData.totalItems) {
      // There'll be only 1 book per ISBN
       var book = bookData.items[0];
       var title = (book["volumeInfo"]["title"]);

       // For debugging
       Logger.log(book);
       Logger.log(title);
       return title;
  }
}
function fillInTheBlanks(){
  var TITLE_COLUMN = 0;
  var ISBN_COLUMN = 1;



var dataRange = SpreadsheetApp.getActiveSpreadsheet();
var sheet = dataRange.getSheets()[0];
// This represents ALL the data
var range = sheet.getDataRange();
var bookValues = range.getValues();

 // var dataRange = SpreadsheetApp.getActiveSpreadsheet()
 //   .getDataRange();
 // var bookValues = dataRange.getValues();
  for(var row = 1; row < bookValues.length; row++){   
    var isbn = bookValues[row][ISBN_COLUMN];
    var title1 = bookValues[row][TITLE_COLUMN];
    
    if(isbn != "" && title1 === "" ){
     // var bookData = getBookDetails(isbn);
      
      
      if(title1 === "" && getBookDetails(isbn)){
        bookValues[row][TITLE_COLUMN] = getBookDetails(isbn); 
        range.setValues(bookValues); 
      
      }
  }
  
}
//dataRange.setValues(bookValues);   
}

相关问题