How do I connect to the Google Calendar API without the oAuth authentication?

Jon Hargett picture Jon Hargett · Jan 24, 2012 · Viewed 39.3k times · Source

I have been studying the Google Calendar API and the docs on authentication (http://code.google.com/apis/calendar/v3/using.html#auth). It seems that the use case mentioned here is writing an application that accesses the user's calendar. However, I am writing a web page that will access the web site owner's calendar and display just that one calendar's information. So, I don't want the user to enter in their Google account information which is what oAuth wants to do.

Basically, I am looking for a way to access a single private Google calendar and authenticate to it by passing the credentials directly to the service.

There is a similar questions here: How to use OAuth with Google Calendar to access only ONE calendar? that seems to indicate that the poster originally was passing the credentials directly. Is this feature still available? How do you handle the use case I described?

Answer

gX. picture gX. · Aug 17, 2012

If I'm not wrong, they've launched Service Account for this now: https://developers.google.com/accounts/docs/OAuth2ServiceAccount

Edit:

Here's the modification from their Prediction API

    session_start();
    require_once "google-api-php-client/src/Google_Client.php";
    require_once "google-api-php-client/src/contrib/Google_CalendarService.php";

    const CLIENT_ID = '...';
    const SERVICE_ACCOUNT_NAME = '...';

    // Make sure you keep your key.p12 file in a secure location, and isn't
    // readable by others.
    const KEY_FILE = '...';

    $client = new Google_Client();
    $client->setApplicationName("...");


    if (isset($_SESSION['token'])) {
     $client->setAccessToken($_SESSION['token']);
    }

    // Load the key in PKCS 12 format (you need to download this from the
    // Google API Console when the service account was created.
    $key = file_get_contents(KEY_FILE);
    $client->setAssertionCredentials(new Google_AssertionCredentials(
        SERVICE_ACCOUNT_NAME,
        array('https://www.googleapis.com/auth/calendar', "https://www.googleapis.com/auth/calendar.readonly"),
        $key)
    );

    $client->setClientId(CLIENT_ID);
    $service = new Google_CalendarService($client);

    //Save token in session
    if ($client->getAccessToken()) {
      $_SESSION['token'] = $client->getAccessToken();
    }

    //And now you can use the code in their PHP examples, like: $service->events->listEvents(...)