Я разрабатываю приложение HTML5 и хочу читать / записывать некоторые данные из / в таблицы Google.
Попытка 1. Чистый JavaScript
Я попытался вызвать веб-сервис, расположенный в файле .gs в Google Script.
gapi.auth.signIn({
'clientid' : 'MY_CLIENT_ID',
'cookiepolicy' : 'single_host_origin',
'callback' : 'loginCallback',
'scope' : 'https://www.googleapis.com/auth/plus.me https://spreadsheets.google.com/feeds'
});
$.get('https://script.google.com/macros/s/APP_CODE/exec');
Это работает только для одного скрипта .gs. Для другого сценария .gs я получаю сообщение об ошибке: «На запрошенном ресурсе отсутствует заголовок« Access-Control-Allow-Origin ». Поэтому для источника« domainname.xx »доступ запрещен». В соответствии с документацией по API Google запрещено вызывать функции в файлах .gs с помощью AJAX. Как заставить их работать?
Попытка 2. PHP-приложение в качестве прокси
Мне удалось пройти проверку подлинности в Google с помощью OAuth 2, но как отправлять запросы GET / POST от имени прошедшего проверку пользователя? Могу ли я получить доступ к функциям в файлах .gs или электронных таблицах напрямую?
// OAuth getting the token - works fine
$params['client_id'] = self::OAUTH_CLIENT_ID;
$params['response_type'] = 'code';
$params['scope'] = self::OAUTH_SCOPE;
$params['redirect_uri'] = self::OAUTH_REDIRECT_URI;
$this->response->redirect('https://accounts.google.com/o/oauth2/auth?'. http_build_query($params));
// OAuth exchange tokens - works fine
$fp = fsockopen('ssl://www.googleapis.com', 443, $errno, $errstr, 30);
$postData['code'] = $_GET['code'];
$postData['redirect_uri'] = self::OAUTH_REDIRECT_URI;
$postData['client_id'] = self::OAUTH_CLIENT_ID;
$postData['client_secret'] = self::OAUTH_CLIENT_SECRET;
$postData['scope'] = '';
$postData['grant_type'] = 'authorization_code';
$postContent = http_build_query($postData);
$out = "POST /oauth2/v3/token HTTP/1.0\r\n";
$out .= "Host: www.googleapis.com\r\n";
$out .= 'Content-length: '.strlen($postContent)."\r\n";
$out .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
$out .= $postContent;
fwrite($fp, $out);
$response = strstr(fread($fp, 4096), '{');
Как вызвать функции doGet () и doPost () из файлов .gs как прошедшего проверку пользователя? Если это невозможно, как читать и писать в электронные таблицы на Google Диске?
Вы можете получить доступ к опубликованный Сценарий приложения с HTTP-запросом. Вы не можете напрямую вызвать функцию в скрипте приложений из HTTP-запроса. Вы мог сделать запрос GET / POST для скрипта приложения; отправить данные в строке поиска в конце URL-адреса и получить doGet()
или же doPost()
Функция «решает», какие функции запускать в зависимости от того, что было отправлено в строке поиска, а затем возвращает соответствующий ответ. Таким образом, в этом смысле вы можете получить различные функции для запуска с этим методом.
Посмотрите на Контент Сервис документация:
Apps Script — контент-сервис
Если вы решите использовать PHP, вы можете использовать Apps Script в качестве посредника между вашим сайтом и электронной таблицей Google, но если вы можете понять API клиента PHP, просто используйте это.
Других решений пока нет …