Я дошел до точки отчаяния и прошу помощи. Я провел все выходные, изучая новые вещи, чтобы попытаться понять, как использовать API таблиц слияния Google, который требует аутентификации через Oauth 2.0. Я начал разрабатывать на php исключительно потому, что смог найти несколько примеров, которые помогли мне в дальнейшем. Несколько дней назад я очень мало знал в этой области, и если вам интересно, почему я попробовал определенный подход в моем коде ниже, а не какой-то другой подход, простой ответ заключается в том, что это все, что я нашел.
Мне удалось успешно разработать страницу, которая запрашивала код ответа от Google для доступа к моему личному профилю. Я также смог успешно разработать страницу, расположенную в требуемом месте перенаправления, которая будет принимать этот код, передавать его обратно в Google и запрашивать токен доступа и токен обновления, которые были успешно записаны в файл в защищенном паролем каталоге на моем веб-сайте. . Мне также удалось успешно разработать страницу, которая передаст токен обновления обратно в Google, получит обновленный токен доступа и запишет его в файл, если/когда это необходимо. Все это делалось на php.
Теперь моя основная цель для всего этого — иметь возможность записывать стили таблиц слияния в новые таблицы слияния. В настоящее время у меня есть несколько полностью разработанных таблиц слияния (вместе с правильным стилем) в моей учетной записи документов Google. Я также загрузил тестовую таблицу слияния, в которой есть полностью разработанные данные, но еще не применены стили. Я пытался просто написать некоторый код, который получил бы стиль от существующего полностью разработанного FT и записал бы тот же стиль в этот тестовый FT.
Мне удалось успешно получить объект стиля JSON из существующего FT и изменить этот объект JSON таким образом, чтобы его свойство идентификатора таблицы было изменено на тестовый FT, чтобы объект JSON можно было передать обратно в тестовый FT и записать в стили. .
Однако, когда я пытаюсь передать данные стиля обратно в Google для обновления тестового FT через POST, я получаю сообщение об ошибке, которое выводится на " { "error": { "errors": [ { "domain": "global", "reason ": "authError", "message": "Неверные учетные данные", "locationType": "header", "location": "Авторизация" } ], "code": 401, "message": "Неверные учетные данные" } }"
Вполне возможно, что я неправильно форматирую POST. Однако я не делаю ничего необычного (пока) с токеном доступа. Я просто сделал запрос, получил его от Google, скопировал и вставил прямо в код, чтобы не было проблем с назначением переменных и/или тайм-аутом.
Вот мой код для того, что я надеялся сделать довольно простым процессом, с некоторыми элементами конфиденциальных данных, отредактированными, но описанными. Пожалуйста, предлагайте предложения, если можете.
<html>
<head>
<title>Google Fusion Tables API Example</title>
</head>
<body>
<?php
//table id of the FT that has fully developed styling.
$strTableID = '1r8CRtGalQ3vC0zd_xmsChzjALlriiV5UDYFVOJU';
//prepare your cURL request for GET of FT styling data from existing table. Initialize it, set the options and then execute it.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/fusiontables/v1/tables/'.$strTableID.'/styles/1?&key=redactedKey');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
//print result to see if it works (it works)
echo "<br> Result: $result";
//the result returns as a JSON object. Decode the object into a standard array, then display the individual elements of the array to see that it worked.
$jsonResult = json_decode($result,true);
echo "<br><br> JSON Result: ".$jsonResult['polygonOptions']['fillColorStyler']['columnName'];
echo "<br> Table ID: ".$jsonResult['tableId'];
//update the tableID and the bound column
//this is the table id of the test FT
$strTableID = '1CnecsDL67YHjBzSmfLjODRWxHDuC39frZEaTEKQ';
$jsonResult['tableId'] = $strTableID;
$jsonResult['polygonOptions']['fillColorStyler']['columnName'] = 'redacted column name';
//print out the updated new JSON elements to see that they were properly applied (works)
echo "<br><br> JSON Result: ".$jsonResult['polygonOptions']['fillColorStyler']['columnName'];
echo "<br> Table ID: ".$jsonResult['tableId'];
//Re-encode the array into a JSON object
$jsonWrite = json_encode($jsonResult);
$postField = 'access_token=redactedAccessToken in the form of ya29.AHE...Rdw';
//set your header type so that Google knows what type of data it is receiving
$arrHeader = array('Content-Type'=>'application/json');
$url = "https://www.googleapis.com/fusiontables/v1/tables/".$strTableID."/styles";
//prepare your cURL request. Initialize it, set the options and then execute it.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $arrHeader);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postField.'&'.$jsonWrite);
$result = curl_exec($ch);
curl_close($ch);
//print out the response to see if it worked (doesn't work)
echo "<br><br>Post Result: $result";
?>
</body>
</html>
Я также попробовал один альтернативный метод. Я попытался поместить токен доступа в заголовок POST как таковой:
$arrHeader = array('Content-Type'=>'application/json', 'access_token'=>'redactedAccessToken in the form of ya29.AHE...Rdw');
А затем упрощая параметры полей публикации как таковые:
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonWrite);
Это возвращает другую ошибку: "{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Required Login", "locationType": "header ", "местоположение": "Авторизация" } ], "код": 401, "сообщение": "Требуется вход в систему" } }"
Пожалуйста, окажите любую помощь, если можете. Спасибо за уделенное время.