web-dev-qa-db-fra.com

Comment utiliser la "clé d'accès API simple" de Google pour accéder aux informations de Google Agenda (PHP)?

J'essaie d'utiliser l'API Google v3 pour accéder à un calendrier Google et, conformément à la documentation, ici: http://code.google.com/apis/calendar/v3/using.html#intro et ici: https://code.google.com/apis/console/ , la solution dont j'ai besoin est le "Simple API Access" & "Clé pour les applications serveur (avec verrouillage IP)".

Maintenant, quand je crée une page avec ce code:

session_start();

require_once 'fnc/google-api-php-client/src/apiClient.php';
require_once 'fnc/google-api-php-client/src/contrib/apiCalendarService.php';

$apiClient = new apiClient();
$apiClient->setUseObjects(true);
$service = new apiCalendarService($apiClient);

if (isset($_SESSION['oauth_access_token'])) {$apiClient->setAccessToken($_SESSION['oauth_access_token']);
} else {
    $token = $apiClient->authenticate();
    $_SESSION['oauth_access_token'] = $token;
}

et dans mon fichier "config.php", j'ajoute SEULEMENT ma clé de développeur (à la place du "X"):

global $apiConfig;
$apiConfig = array(
    // True if objects should be returned by the service classes.
    // False if associative arrays should be returned (default behavior).
    'use_objects' => false,

    // The application_name is included in the User-Agent HTTP header.
    'application_name' => '',

    // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
    'oauth2_client_id' => '',
    'oauth2_client_secret' => '',
    'oauth2_redirect_uri' => '',    

    // The developer key, you get this at https://code.google.com/apis/console
    'developer_key' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',

    // OAuth1 Settings.
    // If you're using the apiOAuth auth class, it will use these values for the oauth consumer key and secret.
    // See http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html for info on how to obtain those
    'oauth_consumer_key'    => 'anonymous',
    'oauth_consumer_secret' => 'anonymous',

Mais alors je reçois des erreurs et cela me dit qu'il essaie de s'authentifier en utilisant le système "OAuth 2.0" que je ne veux pas utiliser. Je veux seulement accéder à un calendrier avec une clé API.

Et étonnamment, quand je cherche dans Google "clé d'accès API simple", je ne trouve rien, rien dans leur documentation, pas d'exemples, pas de tutoriels, rien. Suis-je le seul à utiliser cette chose?

Alors quelqu'un peut-il me dire ce que je fais mal?

16
Joel

(Je sais que c'est une vieille question mais j'aurais été heureux si quelqu'un donnait une vraie réponse ici, alors je le fais maintenant)


Je suis venu sur le même problème. L’accès à l’API simple n’est pas bien documenté (ou peut-être pas où j’ai cherché), mais en utilisant le Google API Explorer j’ai trouvé un moyen d’obtenir ce dont j’avais besoin, ce qui est en fait assez simple. . Vous n'avez pas besoin de lib spécifique ni de quoi que ce soit: c'est vraiment très simple.

Dans mon cas, je devais simplement chercher un mot clé sur G +, alors je devais faire une demande GET: 

https://www.googleapis.com/plus/v1/activities?query={KEYWORD}&key={YOUR_API_KEY}

Maintenant, pour un accès au calendrier ( voir ici ), supposons que nous voulons récupérer la liste des règles de contrôle d'accès. Nous devons nous référer à calendar.acl.list qui nous donne l’URI: 

https://www.googleapis.com/calendar/v3/calendars/{CALENDAR_ID}/acl?key={YOUR_API_KEY}

Complétez les blancs et c'est à peu près tout ce que vous devez faire. Obtenez une clé server (sous-menu API Access), stockez-la quelque part dans votre projet et appelez-la dans l'URI que vous demandez.

5
tsadiq

Vous ne pouvez pas accéder aux informations de votre calendrier avec API Key . Les clés d'API (ou simple clé d'accès à l'API) ne sont pas des jetons autorisés et ne peuvent être utilisées que pour certains appels d'API tels qu'une requête de recherche Google, etc. Les clés API ne vous permettront pas d'accéder à des données spécifiques à un utilisateur, ce qui, je suppose, est votre objectif via cette application de calendrier.

De plus, d'après ce que je vois dans votre code, vous créez un objet client qui va utiliser l'authentification OAuth 2.0 et vous obtenez par conséquent des messages d'erreur d'authentification.

3
Antony Thomas

Il n’existe pas une telle chose appelée Simple API Access key.

Normalement, OAuth 2.0 est utilisé pour l'autorisation. Mais puisque tu as ta raison de ne pas l'utiliser.

  • Si vous souhaitez utiliser OAuth1.0 pour l'autorisation. Vous avez besoin d’une section API key dans Simple API Access sur la page API Access .
  • Si vous souhaitez utiliser le nom d'utilisateur et le mot de passe à la place d'OAuth, vous pouvez vous référer à ClientLogin , mais cela n'est pas recommandé.
1
Rannnn

Je suis arrivé à ce fil en essayant de faire la même chose aujourd'hui. Bien que ce soit bien tard, mais la réponse est OUI, il existe en fait une clé API simple pour les API ne nécessitant pas d'autorisations d'utilisateur, ce que la bibliothèque client officielle prend en charge.

La bibliothèque api le fait par Options, qui est clé, paire de valeurs.

Prenons l'exemple suivant: pour obtenir des informations sur une vidéo YouTube donnée, vous utiliseriez cette API: https://godoc.org/google.golang.org/api/youtube/v3#VideosListCall.Do

Pour utiliser la clé api, créez simplement un type qui implémente l'interface CallOption et laissez-le renvoyer la clé api:

type APIKey struct {
}

func (k *APIKey) Get() (string, string) {
    return "key", "YOU API KEY HERE"
}

Ensuite, lorsque vous appelez l’API, fournissez-lui la clé APIKey:

youtube, err := youtube.New(&http.Client{})
call := youtube.Videos.List("snippet,contentDetails,statistics").Id(id)
rsp, err := call.Do(opt)

De cette façon, vous pouvez construire le client youtube avec le client vallina http, plutôt que le client oauth, et profiter de la simple clé api.

La première réponse disait que vous pouvez utiliser http GET directement, mais vous devrez ensuite gérer les erreurs et analyser le résultat vous-même.

0
fluter