Question

Voici ce que je pensais à ce jour:

Pour obtenir le contenu de la feuille de calcul « od6 » avec l'ID « 0Aj3x4n7SOPMRdFA2VmJuampIUDFzdlAwRUwtSEJacmc » vous devez acces l'adresse suivante: https://spreadsheets.google.com/feeds/cells/0Aj3x4n7SOPMRdFA2VmJuampIUDFzdlAwRUwtSEJacmc/ od6 / privé / full

(voir API )

Cela fonctionne bien, si je mets l'URL dans mon navigateur (parce que je suis connecté pour GDocs et les cookies sont en place).

Si je veux accéder à l'URL ci-dessus à partir de mon GMail Gadget, je suppose que j'ai 2 options.

  1. Charger via Ajax
  2. Chargez directement dans le PHP qui génère le gadget

Avec la première approche que je tombe sur le problème, que les cookies ne sont pas connus dans l'appel Ajax (je suppose que cela est dû au fait des différents domaines concernés).

Arrière-plan Info: Mon Gadget-script PHP fonctionne à mon hôte ( https://sslsites.de ), ce gadget est chargé par GMail et fourni creux une sorte de procuration (si l'hôte de mon gadget dans le iFrame http://kipb0cvv7sa9gunc3o5eii57sr1eoem5-a-gm-opensocial.googleusercontent.com/gadgets ). Où est https://mail.google.com/mail

Il coud un appel Ajax de cette IFrame ne peut pas envoyer des cookies au domaine https://spreadsheets.google.com . Droite? La réponse est vide.

Alors j'ai essayé la deuxième approche. Si je veux accéder à la feuille de calcul de PHP je besoin OAuth. Ce qui fonctionne très bien avec ce code:

<?php
function make_api_call($url, $token) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $curlheader[0] = sprintf("Authorization: AuthSub token=\"%s\"/n", $token);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $curlheader);
  $output = curl_exec($ch);
  curl_close($ch);
  return $output;
}

function get_session_token($onetimetoken) {
  $output = make_api_call("https://www.google.com/accounts/AuthSubSessionToken", $onetimetoken);
  if (preg_match("/Token=(.*)/", $output, $matches)) $sessiontoken = $matches[1];
  else {
    echo "Error authenticating with Google.";
    exit;
  }
  return $sessiontoken;
}

if ($_GET['token'] and !$_COOKIE['token']) {
  $_COOKIE['token'] = get_session_token($_GET['token']);
  setcookie("token", $_COOKIE['token']);
}

if ($_COOKIE['token']) {
  $accountxml = make_api_call("https://spreadsheets.google.com/feeds/cells/tP6VbnjjHP1svP0EL-HBZrg/od6/private/full", $_COOKIE['token']);
  print_r($accountxml);
}
?>
<a href="https://www.google.com/accounts/AuthSubRequest?scope=https%3A%2F%2Fspreadsheets.google.com%2Ffeeds%2F&session=1&secure=0&next=https%3A%2F%2Fsslsites.de%2Fknox.orgapage.de%2Fdocget.php" target="_blank">Sign in</a>

Mais encore une fois, j'ai la question avec les domaines ici. Ce code fonctionne bien sur https://sslsites.de . Mais de GMail je la question, que je ne peux pas passer le _COOKIE $ [ « jeton »]. Si je me inscris https://sslsites.de avec OAuth, mon navigateur ne passera pas le cookie par proxy gadget gmails. Si j'inscrire le proxy ( http: //kipb0cvv7sa9gunc3o5eii57sr1eoem5-a-gm-opensocial.googleusercontent. com / gadgets ) mesme pour OAuth le cookie est là, mais mon script PHP ne connaît pas aussi bien.

Alors, est-il possible que je peux passer le creux Cookie le proxy (qui coud comme une boîte noire pour moi, parce que je ne peux pas trouver de la documentation sur elle)?

Ou y at-il d'autres API pour accéder à des feuilles de calcul? Les feuilles de calcul dont je parle sont publiques à tout le monde, donc je n'attendre à un besoin d'authentifier.

Cependant, la feuille de calcul est public: https://spreadsheets.google.com/ccc?key=0Aj3x4n7SOPMRdFA2VmJuampIUDFzdlAwRUwtSEJacmc&hl=en&authkey= CJ2ppJsP

Mais pas l'appel API de données au même: https://spreadsheets.google.com/feeds/cells/0Aj3x4n7SOPMRdFA2VmJuampIUDFzdlAwRUwtSEJacmc/ od6 / privé / full

Était-ce utile?

La solution

Je pensais finalement comment utiliser OAuth dans les gadgets.

Vous devez définir dans le XML gadgets, comme ceci:

<OAuth>
  <Service name="google">
    <Access url="https://www.google.com/accounts/OAuthGetAccessToken" method="GET" />
    <Request url="https://www.google.com/accounts/OAuthGetRequestToken?scope=https://spreadsheets.google.com/feeds/" method="GET" />
    <Authorization url="https://www.google.com/accounts/OAuthAuthorizeToken?oauth_callback=http://oauth.gmodules.com/gadgets/oauthcallback" />
  </Service>
</OAuth>

Ensuite, vous serez en mesure d'interroger la feuille de calcul des flux:

function initSSData() {
  var params = {};
  params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
  params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.OAUTH;
  params[gadgets.io.RequestParameters.OAUTH_SERVICE_NAME] = "google";
  params[gadgets.io.RequestParameters.OAUTH_USE_TOKEN] = "always";
  params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;

  gadgets.io.makeRequest("https://spreadsheets.google.com/feeds/spreadsheets/private/full?title=GIdea&alt=json", function(response) {
    // Show sign in
    if (response.oauthApprovalUrl) {
      var popup = shindig.oauth.popup({
        destination: response.oauthApprovalUrl,
        windowOptions: null,
        onOpen: function() { document.getElementById('approval').style.display = "none"; document.getElementById('waiting').style.display = "block"; },
        onClose: function() { initSSData(); }
      });
      var personalize = document.getElementById('personalize');
      personalize.onclick = popup.createOpenerOnClick();
      var approvaldone = document.getElementById('approvaldone');
      approvaldone.onclick = popup.createApprovedOnClick();

      document.getElementById('approval').style.display = "block";

    // Show result
    } else if (response.data) {
      // Access the spreadsheet with response.data
    }
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top