Skip to content

Commit 9b3f078

Browse files
committed
Merge pull request #2 from tanakaworld/multiple-sheets
Multiple sheets
2 parents bd622c0 + c6f2db3 commit 9b3f078

File tree

6 files changed

+73
-33
lines changed

6 files changed

+73
-33
lines changed

demo/sample.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
window.onload = function () {
1414
this.updateSpreadSheet = function () {
1515
var url = $("#publishedUrl")[0].value;
16-
var gss = new GoogleSpreadsheetsParser(url, true);
16+
var title = $("#sheetTitle")[0].value;
17+
18+
var gss = new GoogleSpreadsheetsParser(url, {sheetTitle: title, hasTitle: true});
1719

1820
console.log(gss.titles);
1921
console.log(gss.contents);
@@ -25,11 +27,12 @@ <h1>GoogleSpreadSheetParser Sample</h1>
2527

2628
<div class="panel-body">
2729
<ul>
28-
<li>Enter published Spreadsheet url</li>
30+
<li>Enter published Spreadsheet url & sheet title</li>
2931
<li>Click "Get data", output data into console log.</li>
3032
</ul>
3133
<input id="publishedUrl" type="text" size="100px"
3234
value="https://docs.google.com/spreadsheets/d/1vyPu1EtzU1DvGXfthjrR-blJ8mGe75TL4BFNWtFMm0I/pubhtml">
35+
<input id="sheetTitle" type="text" size="50px" value="Sample2">
3336
<button onclick="updateSpreadSheet()">Get data</button>
3437
</div>
3538

dist/googleSpreadsheetsParser.js

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,27 @@ GoogleSpreadsheetsUtil = (function() {
1212
return matched[1];
1313
};
1414

15-
GoogleSpreadsheetsUtil.prototype.getWorksheetId = function(key) {
16-
var basicInfo, matched, url, xhr;
15+
GoogleSpreadsheetsUtil.prototype.getWorksheetId = function(key, sheetTitle) {
16+
var basicInfo, e, i, matched, ref, url, xhr;
1717
url = "https://spreadsheets.google.com/feeds/worksheets/" + key + "/public/basic?alt=json";
1818
xhr = new XMLHttpRequest();
1919
xhr.open("GET", url, false);
2020
xhr.send();
2121
matched = [];
2222
if (xhr.status === 200) {
2323
basicInfo = JSON.parse(xhr.responseText);
24-
matched = basicInfo.feed.entry[0].id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/);
24+
if (sheetTitle) {
25+
ref = basicInfo.feed.entry;
26+
for (i in ref) {
27+
e = ref[i];
28+
if (e.title.$t === sheetTitle) {
29+
matched = e.id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/);
30+
break;
31+
}
32+
}
33+
} else {
34+
matched = basicInfo.feed.entry[0].id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/);
35+
}
2536
}
2637
if (matched === null || matched.length !== 2) {
2738
return null;
@@ -43,10 +54,10 @@ GoogleSpreadsheetsUtil = (function() {
4354
};
4455

4556
GoogleSpreadsheetsUtil.prototype.makeTitle = function(feedEntry) {
46-
var cell, i, len, obj, titles;
57+
var cell, j, len, obj, titles;
4758
titles = [];
48-
for (i = 0, len = feedEntry.length; i < len; i++) {
49-
obj = feedEntry[i];
59+
for (j = 0, len = feedEntry.length; j < len; j++) {
60+
obj = feedEntry[j];
5061
cell = obj.gs$cell;
5162
if (cell === null) {
5263
return titles;
@@ -61,15 +72,15 @@ GoogleSpreadsheetsUtil = (function() {
6172
};
6273

6374
GoogleSpreadsheetsUtil.prototype.makeContents = function(feedEntry) {
64-
var cell, columnCount, contents, i, len, obj, row, rowNumber;
75+
var cell, columnCount, contents, j, len, obj, row, rowNumber;
6576
contents = [];
6677
if (!(feedEntry.length >= 1 && feedEntry[0].gs$cell)) {
6778
return contents;
6879
}
6980
columnCount = Number(feedEntry[feedEntry.length - 1].gs$cell.col);
7081
rowNumber = 0;
71-
for (i = 0, len = feedEntry.length; i < len; i++) {
72-
obj = feedEntry[i];
82+
for (j = 0, len = feedEntry.length; j < len; j++) {
83+
obj = feedEntry[j];
7384
cell = obj.gs$cell;
7485
if (Number(cell.row) !== 1) {
7586
if (cell.row !== rowNumber) {
@@ -91,14 +102,13 @@ GoogleSpreadsheetsUtil = (function() {
91102
})();
92103

93104
GoogleSpreadsheetsParser = (function() {
94-
function GoogleSpreadsheetsParser(publishedUrl, hasTitle) {
95-
var _util, feedEntry, feeds, key, mtd;
96-
if (hasTitle == null) {
97-
hasTitle = false;
98-
}
105+
function GoogleSpreadsheetsParser(publishedUrl, option) {
106+
var _util, feedEntry, feeds, hasTitle, key, mtd, sheetTitle;
107+
sheetTitle = option.sheetTitle || null;
108+
hasTitle = option.hasTitle || true;
99109
_util = new GoogleSpreadsheetsUtil();
100110
key = _util.extractKey(publishedUrl);
101-
mtd = _util.getWorksheetId(key);
111+
mtd = _util.getWorksheetId(key, sheetTitle);
102112
feeds = _util.getFeeds(key, mtd);
103113
feedEntry = feeds.feed.entry;
104114
if (hasTitle) {

dist/googleSpreadsheetsParser.min.js

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

spec/googleSpreadsheetsUtilSpec.coffee

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ describe GoogleSpreadsheetsUtil, ->
44
beforeAll ->
55
@publishedUrl = "https://docs.google.com/spreadsheets/d/1vyPu1EtzU1DvGXfthjrR-blJ8mGe75TL4BFNWtFMm0I/pubhtml"
66
@key = "1vyPu1EtzU1DvGXfthjrR-blJ8mGe75TL4BFNWtFMm0I"
7-
@worksheetId = "od6"
7+
@firstWorksheetId = "od6"
8+
@secondWorksheetId = "obeh737"
89
@util = new GoogleSpreadsheetsUtil()
910

1011
describe '.extractKey', ->
@@ -30,16 +31,32 @@ describe GoogleSpreadsheetsUtil, ->
3031
jasmine.Ajax.stubRequest(requestUrl).andReturn
3132
status: 200
3233
responseText: JSON.stringify(mockedSampleDataBasicJson)
33-
it 'should got worksheetId', ->
34-
expect(@util.getWorksheetId(@key)).toEqual(@worksheetId)
34+
35+
describe 'without sheet name', ->
36+
it 'should got worksheetId', ->
37+
expect(@util.getWorksheetId(@key)).toEqual(@firstWorksheetId)
38+
39+
describe 'with sheet name (1st sheet)', ->
40+
it 'should got worksheetId', ->
41+
expect(@util.getWorksheetId(@key, 'Sample')).toEqual(@firstWorksheetId)
42+
43+
describe 'with sheet name (2nd sheet)', ->
44+
it 'should got worksheetId', ->
45+
expect(@util.getWorksheetId(@key, 'Sample2')).toEqual(@secondWorksheetId)
3546

3647
describe 'Spreadsheet is not found', ->
3748
beforeEach ->
3849
requestUrl = "https://spreadsheets.google.com/feeds/worksheets/#{@key}/public/basic?alt=json"
3950
jasmine.Ajax.stubRequest(requestUrl).andReturn
4051
status: 404
41-
it 'should got null', ->
42-
expect(@util.getWorksheetId(@key)).toBeNull()
52+
53+
describe 'without sheet name', ->
54+
it 'should got null', ->
55+
expect(@util.getWorksheetId(@key)).toBeNull()
56+
57+
describe 'with sheet name (Invalid)', ->
58+
it 'should got null', ->
59+
expect(@util.getWorksheetId(@key, 'Invalid')).toBeNull()
4360

4461
describe '.getFeeds', ->
4562
beforeEach ->
@@ -51,20 +68,20 @@ describe GoogleSpreadsheetsUtil, ->
5168
beforeEach ->
5269
mockedSampleDataFeedJson = window.__fixtures__['spec/fixtures/sampleDataFeed']
5370

54-
requestUrl = "https://spreadsheets.google.com/feeds/cells/#{@key}/#{@worksheetId}/public/values?alt=json"
71+
requestUrl = "https://spreadsheets.google.com/feeds/cells/#{@key}/#{@firstWorksheetId}/public/values?alt=json"
5572
jasmine.Ajax.stubRequest(requestUrl).andReturn
5673
status: 200
5774
responseText: JSON.stringify(mockedSampleDataFeedJson)
5875
it 'should got feeds', ->
59-
expect(@util.getFeeds(@key, @worksheetId)).not.toBeNull()
76+
expect(@util.getFeeds(@key, @firstWorksheetId)).not.toBeNull()
6077

6178
describe 'Spreadsheet is not found', ->
6279
beforeEach ->
63-
requestUrl = "https://spreadsheets.google.com/feeds/cells/#{@key}/#{@worksheetId}/public/values?alt=json"
80+
requestUrl = "https://spreadsheets.google.com/feeds/cells/#{@key}/#{@firstWorksheetId}/public/values?alt=json"
6481
jasmine.Ajax.stubRequest(requestUrl).andReturn
6582
status: 404
6683
it 'should got feeds', ->
67-
expect(@util.getFeeds(@key, @worksheetId)).toBeNull()
84+
expect(@util.getFeeds(@key, @firstWorksheetId)).toBeNull()
6885

6986
describe '.makeTitle', ->
7087
beforeEach ->

src/googleSpreadsheetsParser.coffee

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
class GoogleSpreadsheetsParser
22

3-
constructor: (publishedUrl, hasTitle = false) ->
3+
constructor: (publishedUrl, option) ->
4+
sheetTitle = option.sheetTitle || null
5+
hasTitle = option.hasTitle || true
6+
47
_util = new GoogleSpreadsheetsUtil()
58

69
key = _util.extractKey(publishedUrl)
7-
mtd = _util.getWorksheetId(key)
10+
mtd = _util.getWorksheetId(key, sheetTitle)
811
feeds = _util.getFeeds(key, mtd)
912

1013
feedEntry = feeds.feed.entry

src/googleSpreadsheetsUtil.coffee

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class GoogleSpreadsheetsUtil
55
return null if matched is null or matched.length isnt 2
66
return matched[1]
77

8-
getWorksheetId: (key) ->
8+
getWorksheetId: (key, sheetTitle) ->
99
url = "https://spreadsheets.google.com/feeds/worksheets/#{key}/public/basic?alt=json"
1010
xhr = new XMLHttpRequest()
1111
xhr.open("GET", url, false)
@@ -14,7 +14,13 @@ class GoogleSpreadsheetsUtil
1414
matched = []
1515
if xhr.status is 200
1616
basicInfo = JSON.parse(xhr.responseText)
17-
matched = basicInfo.feed.entry[0].id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/)
17+
if sheetTitle
18+
for i, e of basicInfo.feed.entry
19+
if e.title.$t is sheetTitle
20+
matched = e.id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/)
21+
break
22+
else
23+
matched = basicInfo.feed.entry[0].id.$t.match(/https:\/\/spreadsheets.google.com\/feeds\/worksheets\/.+\/public\/basic\/(.+)/)
1824

1925
return null if matched is null or matched.length isnt 2
2026
return matched[1]

0 commit comments

Comments
 (0)