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

Author: user2029890, 2014-04-25

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);

Надеюсь, это поможет кому-то еще

 5
Author: user2029890, 2014-04-25 18:04:33

Вот несколько заметок, которые я сделал, когда проходил авторизацию. Я думаю, что документация 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 довольно требователен - он требует двойных кавычек вокруг значений атрибутов.

 1
Author: jcsahnwaldt, 2017-04-22 00:45:53