Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Problem Solved!!


So I have been following this mini-guide found here.

I have inserted the code below for ease of access. However when I run the code (after inputting proper details for google) I get an error at the end.

Logging into Google...
Logged into Google
Searching for Worksheet 'S'...

JSON Parse Error: SyntaxError: Unexpected end of input

Any idea what I am doing wrong? Is there some change I need to make? Also in the interest of learning, if you could also explain how you solved my problem and not just give me the solution so that I can solve similar problems in the future by myself.

Thanks

Uk

/**
* Fetch data from the web and save it into a Google Sheet document
*
* Requirements:
  1. NodeJS
  2. npm install request
  3. npm install cheerio
  4. npm install edit-google-spreadsheet

* Author: Ido Green | plus.google.com/+Greenido
* Date: 15 Aug 2013
*/

var request     = require('request');
var cheerio     = require('cheerio');
var Spreadsheet = require('edit-google-spreadsheet');

// Some parameters 
// TODO: move from the global scope
var ticker  = "LVS";
var yUrl    = "http://finance.yahoo.com/q/ks?s=" + ticker;
var financeDetails = new Array();
var keyStr         = new Array();


// Upload our data to G-Sheet
function sheetReady(err, spreadsheet) {
    if (err) throw err;
    spreadsheet.add({ 1: { 1: "Attribute" } });
    spreadsheet.add({ 1: { 2: "Value" } });

    spreadsheet.add({ 
      2: {
        1: keyStr
      }
    });
    spreadsheet.add({ 
      2: {
        2: financeDetails
      }
    });

    spreadsheet.send(function(err) {
      if(err) throw err;
      console.log("Updated " + financeDetails.length + " Items with data");
    });
  }

//
// The main call to fetch the data, parse it and work on it.  
//
request(yUrl, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    var $ = cheerio.load(body);

    // the keys - We get them from a certain class attribute
    var td = $('.yfnc_tablehead1');
    $(td).each(function(j, val) {
      keyStr[j] = $(val).text();
    });

    // the values
    // TODO: normalize them 
    var tData = $('.yfnc_tabledata1');
    $(tData).each(function(j, val) {
      financeDetails[j] = $(val).text();
    });

    // Let's do something with the data we have
    for (var i=0; i < financeDetails.length; i++) {
      console.log (i + ") " + keyStr[i] + " " + financeDetails[i]);
    }

    // upload our data to Google sheet
    // yFinanceDataPerComapy
    Spreadsheet.create({
      debug: true,
      username: 'TODO-fill',
      password: 'TODO-fill',
      debug: true,
      spreadsheetName: 'TODO-yourSheetName',
      worksheetName: 'TODO-Sheet1orAbetterName',
      callback: sheetReady
    });
  }

}); // -- end of request --
share|improve this question

1 Answer 1

up vote 1 down vote accepted

This is an error with the edit-google-spreadsheet module reported here. The error is thrown when trying to retrieve private spreadsheets. There are a few options you can take.

  • Make the spreadsheet public.
  • Try to use the fixed pull request. It looks like there are still issues that need to be resolved.
  • Use the worksheet id instead of the worksheet name. This is a more difficult process:
    1. Start by opening your spreadsheet in google drive
    2. Find the spreadsheet id in the url. Example:
      https://docs.google.com/spreadsheets/d/SPREADSHEET_ID_HERE/edit?usp=drive_web
    3. List the sources by going to this url:
      view-source:https://spreadsheets.google.com/feeds/worksheets/SPREADSHEET_ID_HERE/private/full
    4. Find the entry from the response (od6 in the below example):
<entry>
    <id>https://spreadsheets.google.com/feeds/worksheets/SPREADSHEET_ID_HERE/private/full/od6</id>
    ...
    <title type='text'>Sheet1</title>
    ...
</entry>
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.