0 votes

PHP Curl avec Google Calendar

<?php

if(isset($_GET['token']))
{

    $url="http://www.google.com/calendar/feeds/default/allcalendars/full";
    $useragent="PHP 5.2";
    $header=array(  "GET /accounts/AuthSubSessionToken HTTP/1.1",
                    "Content-Type: application/x-www-form-urlencoded",
                    "Authorization: AuthSub token=".$_GET['token'],
                    "User-Agent: PHP/5.2",
                    "Host: https://www.google.com",
                    "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2",
                    "Connection: keep-alive"
                );

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_URL, $url); 

    $data = curl_exec($ch); 

    print_r($data);
}
?>

Le résultat est une page non trouvée. Cependant, j'appelle http://www.google.com/calendar/feeds/default/allcalendars/full à partir de firefox , c'est le retour du fichier XML. Donc, je pense que mon code est peut-être erroné. Mais je n'arrive pas à trouver l'erreur :(

0voto

animuson Points 23184

Cela est dû au fait que vous accédez à Google Agenda via votre port personnel. Chaque fois que vous accédez à cette URL spécifique, Google vérifie si vous êtes connecté. Si ce n'est pas le cas, il envoie un message 404. Si vous l'êtes, il édite l'agenda en fonction des paramètres que vous avez fournis. Cette URL ne précise pas le calendrier spécifique qu'elle est censée extraire du site, et elle ne peut pas utiliser les cookies stockés sur l'ordinateur de l'utilisateur, car elle est récupérée sur votre serveur, qui ne contient pas de cookies pour un calendrier. Lorsque j'essaie d'accéder à cette page sans me connecter, j'obtiens une erreur 401 Authorization Required, ce qui, je parie, est ce que PHP obtient et que vous ne le réalisez pas.

Vous devez vous rendre dans les paramètres de votre agenda Google et trouver les options d'intégration pour trouver une URL spécifique à votre compte afin de toujours récupérer un flux XML pour votre agenda.

Pour en savoir plus sur l'"adresse calendrier" de Google, cliquez ici : http://www.google.com/support/calendar/bin/answer.py?answer=34578

Vue d'autres applications : http://www.google.com/support/calendar/bin/answer.py?hl=en&answer=37648

0voto

Cetra Points 1741

Je pense que vous remplacez l'URL par cette ligne dans l'en-tête :

GET /accounts/AuthSubSessionToken HTTP/1.1

Je pense que cela va diriger CURL vers http://www.google.com/accounts/AuthSubSessionToken

Que se passe-t-il lorsque vous le retirez ?

0voto

saturngod Points 13043

Je l'ai obtenu.... J'ai changé comme ceci

<?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(isset($_GET['token']))
{
$sessiontoken=get_session_token($_GET['token']);
$accountxml = make_api_call("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full", $sessiontoken);
print_r($accountxml);

}
else
{
$next=urlencode("http://www.mysteryzillion.org/gdata/index.php");
$scope=urlencode("http://www.google.com/m8/feeds/contacts/yourmail@gmail.com/full");
?>
<a href="https://www.google.com/accounts/AuthSubRequest?next=<?= $next ?>&scope=<?= $scope ?>&secure=0&session=1">Click here to authenticate through Google.</a>

<?
}
?>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X