API электронных таблиц Google как вставить новую строку
До сих пор я использовал API только для извлечения данных из электронной таблицы Google, но я не уверен, как вставлять данные. Я просмотрел все, но ни один из примеров не является достаточно ясным.
Для получения данных все, что мне нужно было сделать, это создать URL-адрес и получить его с помощью CURL в PHP следующим образом:
//Get spreadsheet data
$headers = array(
"Authorization: GoogleLogin auth=" . $auth,
"GData-Version: 3.0",
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://spreadsheets.google.com/tq?tqx=out:html&tq=select%20D%2C%20E%20where%20B%3D&key=1c1xxxxxxxxxxxxx
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1
$response= curl_exec($curl);
, как мне создать аналогичный URL-адрес для вставки? Я бы подумал, что можно было бы использовать аналогичный URL-адрес. Может кто-нибудь, пожалуйста, указать мне правильное направление? Я не мог найти информация об этом здесь https://developers.google.com/chart/interactive/docs/querylanguage
2 answers
Ну, ответов нет, но еще несколько исследований указали мне на https://developers.google.com/google-apps/spreadsheets/#working_with_list-based_feeds где щелчок по ссылке "протокол" "добавление строки списка" дал мне достаточно подсказок, чтобы построить следующее:
//create xml with each element representing a column header (note: for some reason the headers must only contain alphanumeric characters)
$xml = "
<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'>
<gsx:id>123</gsx:id>
<gsx:status>123</gsx:status>
<gsx:date>4/26/2014</gsx:date>
<gsx:user>bob</gsx:user>
</entry>";
//set headers which includes auth from elsewhere in the code
$headers = array(
"Authorization: GoogleLogin auth=" . $auth,
"GData-Version: 3.0",
"Content-Type: application/atom+xml",
);
//post the xml. The key in the url is taken from the actual url when you view the sheet
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_URL, "https://spreadsheets.google.com/feeds/list/xxxxxxxxxxxxxxxkeyxxxxxxxxx/0/private/full");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POSTFIELDS, "$xml");
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
Надеюсь, это поможет кому-то еще
Вот несколько заметок, которые я сделал, когда проходил авторизацию. Я думаю, что документация Google довольно тонкая. Надеюсь, это может кому-то помочь.
С 2017 года аутентификация больше не работает, как описано здесь.
Ознакомьтесь с этим сообщением - гораздо более доступным, чем "официальная" документация: https://developers.google.com/gdata/articles/using_cURL#authenticating-clientlogin
Создайте новую электронную таблицу с помощью http://drive.google.com
Создайте новый пароль для конкретного приложения с помощью https://security.google.com/settings/security/apppasswords
Создайте токен аутентификации с паролем, определенным для приложения:
curl -v https://www.google.com/accounts/ClientLogin --data-urlencode [email protected] --data-urlencode Passwd=... -d accountType=GOOGLE -d service=wise
Не обязательно должен быть адрес GMail - используйте адрес своей учетной записи Google.
Я также использовал -d source=...
(как в документе "использование завитка" выше), но, думаю, в этом нет необходимости.
Что касается строки wise
- см. https://developers.google.com/gdata/faq#clientlogin для списка имен служб.
Скопируйте ключ аутентификации: Auth=...
в документ, возвращенный сервером.
Если вы каким-то образом сможете заставить аутентификацию работать (я этого не сделал), остальное все еще может работать:
Получить список ваших электронных таблиц: curl -v -H 'Authorization: GoogleLogin auth=...' https://spreadsheets.google.com/feeds/spreadsheets/private/full > spreadsheets.xml
Найдите URL-адрес рабочих листов для своей электронной таблицы: xmllint --format spreadsheets.xml | less
Найдите название своей электронной таблицы, скопируйте ссылку href из <link rel="http://schemas.google.com/spreadsheets/2006#worksheetsfeed".../>
Объяснено здесь: https://developers.google.com/google-apps/spreadsheets/#retrieving_information_about_worksheets, но с другим относительным URI.:-(
Получить список листов в вашей электронной таблице: curl -v -H 'Authorization: GoogleLogin auth=...' https://spreadsheets.google.com/feeds/worksheets/.../private/full >worksheets.xml
Найдите URL-адрес listfeed для вашего рабочего листа: xmllint --format workheets.xml | less
Должно быть описано здесь: https://developers.google.com/google-apps/spreadsheets/#adding_a_list_row , но опять же, URI не соответствуют тому, что я вижу... <link rel="http://schemas.google.com/spreadsheets/2006#listfeed".../>
выглядит хорошо...
Наконец, добавьте строку. Это часть, которую пользователь2029890 описывает в своем ответе: curl -v -H 'Content-Type: application/atom+xml' -H 'Authorization: GoogleLogin auth=...' -d '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"><gsx:id>123</gsx:id><gsx:user>bob</gsx:user></entry>' https://spreadsheets.google.com/feeds/list/.../.../private/full
Имена XML-элементов, например gsx:id
и gsx:user
, должны соответствовать заголовкам столбцов.
Анализатор XML довольно требователен - он требует двойных кавычек вокруг значений атрибутов.