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