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

Ну, ответов нет, но еще несколько исследований указали мне на https://developers.google.com/google-apps/spreadsheets/#working_with_list-based_feeds, где нажатие на ссылку «protocol» в «добавлении строки списка» дало мне достаточно информации чтобы построить следующее:

 //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.

Создайте токен Auth с конкретным паролем приложения: curl -v https://www.google.com/accounts/ClientLogin --data-urlencode Email=yourname@gmail.com --data-urlencode Passwd=... -d accountType=GOOGLE -d service=wise

Не обязательно иметь адрес GMail – используйте адрес своей учетной записи Google.

Я также использовал -d source=... (как в документе 'using curl' выше), но я думаю, что это необязательно.

Что касается wise строки – см. https://developers.google.com/gdata/faq#clientlogin для списка имен служб.

Скопируйте ключ auth: Auth=... в документе, возвращенном сервером.

Если вы можете как-то заставить аутентификацию работать (я этого не сделал), остальные могут по-прежнему работать:

Получить список ваших электронных таблиц: curl -v -H 'Authorization: GoogleLogin auth=...' https://spreadsheets.google.com/feeds/spreadsheets/private/full > spreadsheets.xml

Найти URL-адрес xmllint --format spreadsheets.xml | less для вашей таблицы: xmllint --format spreadsheets.xml | less 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 rel. 🙁

Получить список рабочих таблиц в таблице: curl -v -H 'Authorization: GoogleLogin auth=...' https://spreadsheets.google.com/feeds/worksheets/.../private/full >worksheets.xml

Найдите URL-адрес списка для вашего рабочего листа: xmllint --format workheets.xml | less 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 довольно придирчив – он требует двойных кавычек вокруг значений атрибутов.