Как извлечь список листов из XML-канала API таблиц Google в R? - PullRequest
2 голосов
/ 04 сентября 2011

Я пытаюсь получить список листов в общедоступной электронной таблице Google из XML-фида API электронных таблиц, используя R, и просто не понимаю, как это сделать ...

Подробнеепо счастливой случайности (и вырезать и вставить!), чем судить, я дошел до импорта канала и (используя шпаргалку от http://www.mail-archive.com/r-help@r-project.org/msg108087.html относительно пространств имен по умолчанию) получил какой-то элемент списка элементов электронной таблицы:

ssKey='0AmbQbL4Lrd61dDBfNEFqX1BGVDk0Mm1MNXFRUnBLNXc'
ssURL=paste(sep="",'http://spreadsheets.google.com/feeds/worksheets/',ssKey,'/public/basic')
ssd=xmlTreeParse(ssURL,useInternal=TRUE)
nodes=getNodeSet(ssd,"//x:entry","x")
titles=sapply(nodes, function(x) xmlSApply(x, xmlValue))

Вот что я получил в результате:

[, 1]
id "https://spreadsheets.google.com/feeds/worksheets/0AmbQbL4Lrd61dDBfNEFqX1BGVDk0Mm1MNXFRUnBLNXc/public/basic/od6" updated" 2011-08-28T16: 03: 50.190Z "
category" "
title" FP1 times "
content" FP1 times "
link" "
ссылка ""
ссылка ""
ссылка ""
[, 2]
id "https://spreadsheets.google.com/feeds/worksheets/0AmbQbL4Lrd61dDBfNEFqX1BGVDk0Mm1MNXFRUnBLNXc/public/basic/od7" обновлено" 2011-08-28T16: 03: 50.190Z "
категория""
title" Классификация FP1 "
содержание" Классификация FP1 "
ссылка" "
ссылка" "
ссылка" "
ссылка" "
[, 3]
id

Вопрос в том, как создать фрейм данных или распечатать список,t отображает заголовки листов и идентификаторы, например:

sheetName           sheet.Id
FP1 times            od6
FP1 Classification   od7

, где od6 и od7 - идентификаторы, которые появляются в конце элемента id.

1 Ответ

1 голос
/ 05 сентября 2011

При запуске вашего кода, похоже, вся соответствующая информация хранится в матрице символов 9 x 13 под названием titles. Похоже, вам нужна информация из определенных строк этой матрицы. Мы можем извлечь его следующим образом:

library(stringr)
data.frame(sheetName = titles['content',], 
           sheetId = str_sub(titles['id',],-3,-1))

            sheetName sheetId
1           FP1 times     od6
2  FP1 Classification     od7
3           FP2 times     od4
4  FP2 Classification     od5
5           FP3 Times     oda
6  FP3 Classification     odb
7   Practice Combined     od8
8         Quali Times     od9
9         Quali Stats     ocy
10         Race times     ocz
11       Race History     ocw
12     Race Proximity     ocx
13         Race Stats     od2

Обратите внимание, что я упрощен, предполагая, что идентификатор листа всегда будет последним тремя символами URL. В общем случае это может быть не так, и в этом случае вам потребуется более сложная стратегия для извлечения соответствующего фрагмента URL, возможно, с использованием регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...