Как я могу получить доступ к содержимому (нового стиля) листа Google JSON? Моя цель - получить доступ к значениям из JavaScript, поэтому мне нужно иметь возможность загружать JSON через HTTP.
Ответ 1
Я наконец (вроде) решил свою проблему. Просто для справок в будущем, и в случае, если кто-то другой столкнется с теми же проблемами, вот решение, которое я придумал:
-
Чтобы сделать рабочий лист общедоступным, необходимо сделать рабочий лист общедоступным. Это делается в веб-интерфейсе Google Таблиц, используя записи меню File > Publish to the web... > link > publish
. Можно опубликовать всю электронную таблицу или отдельные рабочие листы.
-
API для доступа к данным из Google Таблиц программно описан на веб-страницах API Google Таблиц. Этот API использует URLS формы https://spreadsheets.google.com/feeds/.../
key /
worksheetId /...
Чуть странно, значение ключа и workheetId, похоже, не объясняется в документации API.
Мои эксперименты показывают, что ключевое значение можно найти, приняв участие в URL-адресах, используемых для доступа к листу через веб-интерфейс (см. Также здесь). Ключом является все после /d/
, до следующего косая черта. Для электронной таблицы в вопросе ключ, таким образом, является 1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI
. Рабочий листId кажется целочисленным, что дает положение рабочего листа в электронной таблице. Для примера в вопросе нужно знать, что показанный лист является вторым листом, рабочий лист имеет в этом случае 2
.
API определяет public
и private
запросы. Чтобы получить доступ к экспортированному ресурсу без проверки подлинности, должны использоваться public
запросы.
-
Вызовы API для получения данных из электронной таблицы объясняются в разделе "Получение фида на основе списка" (щелкните на вкладке "Протокол" в примерах). Требуется URL-адрес, чтобы извлечь данные из электронной таблицы в вопросе.
https://spreadsheets.google.com/feeds/list/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/2/public/full
HTTP-запрос GET для этого URL-адреса возвращает эти данные как XML. (Я не нашел способ получить данные как JSON.)
-
Обычная защита снова вызывает запросы на межсайтовый сайт, что затрудняет доступ к данным через вызовы JavaScript XML RPC в веб-приложении. Один из способов решения этой проблемы - проксировать вызовы API через веб-сервер (например, с помощью директивы nginx proxy_pass).
Вышеуказанные шаги - это, по крайней мере, частичное решение проблемы в вопросе. Единственная трудность состоит в том, что данные возвращаются как XML, а не как JSON. Поскольку в документации API не упоминается JSON, возможно, больше невозможно извлечь данные в этом формате?
Ответ 2
Если вы хотите использовать новейший API (v4), вам необходимо сделать следующее:
- Создайте ключ API электронных таблиц (см. Инструкции ниже).
- Сделайте ваш лист общедоступным.
-
Используйте запрос формы:
https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
Затем вы получите чистый ответ JSON:
{
"range": "Sheet1!A1:D5",
"majorDimension": "ROWS",
"values": [
["Item", "Cost", "Stocked", "Ship Date"],
["Wheel", "$20.50", "4", "3/1/2016"],
["Door", "$15", "2", "3/15/2016"],
["Engine", "$100", "1", "30/20/2016"],
["Totals", "$135.5", "7", "3/20/2016"]
],
}
Обратите внимание, что если вы хотите указать все содержимое страницы, то идентификатор, такой как Sheet1
, абсолютно корректен.
Дополнительную информацию см. В разделе " Основное чтение".
Начиная с v4 API, все запросы должны сопровождаться идентификатором (например, ключом API):
Запросы API Google Таблиц для общедоступных данных должны сопровождаться идентификатором, который может быть ключом API или токеном доступа.
Следуйте инструкциям связанного документа, чтобы создать ключ API на странице учетных данных.
Убедись в:
- Создайте новое приложение на Google Cloud Platform.
- Создайте новый ключ API.
- Добавьте API Google Таблиц. (API-менеджер> Dashboard> Enable API)
Обратите внимание, что вы все равно можете получать доступ к общедоступным данным, не заставляя пользователя входить в систему:
В новом листе API v4 нет явного объявления видимости. Вызовы API выполняются с использованием идентификаторов таблиц. Если у приложения нет разрешения на доступ к указанной электронной таблице, возвращается ошибка. В противном случае вызов продолжается.
Обратите внимание, что вам не нужно публиковать лист в Интернете. Все, что вам нужно сделать, это убедиться, что любой, у кого есть ссылка, может получить доступ к листу.
(Т.е. когда вы нажимаете Создать учетные данные в API-интерфейсе Google Таблиц, выберите "Другие не-пользовательские интерфейсы", "Пользовательские данные", и в нем говорится: "Пользовательские данные не могут быть доступны с платформы без пользовательского интерфейса, поскольку для этого требуется взаимодействие с пользователем для входа". безопасно игнорировать это сообщение. Ключ API - это все, что вам действительно нужно, поскольку это общедоступные данные.)
Общие сообщения об ошибках:
В запросе отсутствует действительный ключ API.
Вы не включили key=
param в свой звонок.
Неверный ключ API. Отправьте действительный ключ API. Консоль разработчиков Google
Вы указали неправильный ключ API. Убедитесь, что вы набрали свой ключ правильно. Если у вас еще нет ключа, перейдите в консоль разработчиков Google и создайте его.
Ключ API не найден. Отправьте действительный ключ API.
Ключ API консоли разработчика Google
Ваш API-ключ, вероятно, правильный, но вы, скорее всего, не добавили разрешение Google Таблиц. Перейдите на страницу ключа API консоли разработчика Google и добавьте права на листы.
У вызывающего абонента нет разрешения
Ваш лист не установлен для общедоступного доступа.