Использование PHP для экспорта события в календарь Google - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы экспортировать события календаря со своего веб-сайта в существующий календарь Google, используя PHP (примечание: это не календарь пользователя, который вошел в систему, а предопределенный календарь, связанный с моей учетной записью).Я не смог найти полный пример в официальной документации.Пример документации использует PHP в командной строке.Однако я хочу настроить его на своем веб-сайте без использования командной строки.Я нашел следующее сообщение: API Календаря Google (v3) - PHP может писать, но не читать? , который использует curl, поэтому я попытался использовать это:

$api_key = 'api-key-from-google-console';
$calendar_id = "calendar_id";

$start = array(
  "dateTime" => $date . "T" . $start_time . ":00",
  "timeZone" => "Africa/Johannesburg"
);

$end = array(
  "dateTime" => $date . "T" . $end_time . ":00",
  "timeZone" => "Africa/Johannesburg"
);

$headerarray = array(
  'Content-type: application/json',
  'Authorization: Bearer ' . $api_key,
  'X-JavaScript-User-Agent: Google APIs Explorer'
);

$post_data = array(
  "start"       => $start,
  "end"         => $end,
  "summary"     => $title,
  "description" => $description,
  "key"         => "$api_key"
);

$url = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerarray);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = json_decode($response);

Однако, это возвращает сошибка, что мои учетные данные недействительны.Что не так в этом коде?Я использую активный ключ API, но когда я просматриваю документацию Google, мне неясно, как именно я должен использовать это в этом коде curl.В примере из Stackoverflow также не было никаких дополнительных инструкций .?

1 Ответ

0 голосов
/ 04 декабря 2018

Прежде всего вы должны рассмотреть вопрос об использовании учетной записи службы.Сервисная учетная запись похожа на фиктивного пользователя.Например, у него есть собственный аккаунт в календаре Google.Однако, поскольку это пользователь, вы можете поделиться своим личным календарем Google с учетной записью службы, и он сможет получить к нему доступ без необходимости входа в систему.

Если вы открыты для использования клиентской библиотеки gpis apis php, выможно использовать ServiceAccount.php для проверки подлинности вашего кода, а затем вызывать его всякий раз, когда вам нужно.Я рекомендую следовать php quickstart

require_once __DIR__ . '/vendor/autoload.php';
// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');
/**
 * Gets the Google client refreshing auth if needed.
 * Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
 * Initializes a client object.
 * @return A google client object.
 */
function getGoogleClient() {
    return getServiceAccountClient();
}
/**
 * Builds the Google client object.
 * Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
 * Scopes will need to be changed depending upon the API's being accessed. 
 * array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
 * List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
 * @return A google client object.
 */
function getServiceAccountClient() {
    try {   
        // Create and configure a new client object.        
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([YOUR SCOPES HERE]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

Я не пытался заставить это работать с curl, но если вы хотите, это может помочь https://developers.google.com/api-client-library/php/auth/service-accounts

...