2009-07-22 7 views
1

J'ai modifié mon application web PHP pour ajouter des événements à un agenda Google. Actuellement, il ajoute avec succès.Google Calendar PHP - URL/ID de l'événement? (Zend_Gdata)

Cependant, maintenant je souhaite supprimer et éditer des événements. Cela semble facile à faire, sauf que je ne connais pas l'URL de l'événement associé à chaque événement.

Suis-je censé définir cet URL d'événement (ou ID?) Lors de l'ajout d'un événement? Comment suis-je censé comprendre ce que c'est?

Je ne peux pas sembler trouver cette information nulle part ailleurs ...

Merci!

EDIT:

J'utilise le Zend Framework pour ce (paquet Gdata) ...

EDIT:

$newIncludePath = array(); 

$newIncludePath[] = '../ZendGdata-1.8.4PL1/library'; 

$newIncludePath = implode($newIncludePath); 

set_include_path($newIncludePath); 



    // load classes 

    require_once 'Zend/Loader.php'; 

    Zend_Loader::loadClass('Zend_Gdata'); 

    Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 

    Zend_Loader::loadClass('Zend_Gdata_Calendar'); 

    Zend_Loader::loadClass('Zend_Http_Client'); 



    // connect to service 

    $gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; 

    $user = "********@gmail.com"; 

    $pass = "*****"; 

    $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal); 

    $gcal = new Zend_Gdata_Calendar($client); 



    // construct event object 

    // save to server  

    try { 

    $event = $gcal->newEventEntry();   

    $event->title = $gcal->newTitle($title); 

    $event->content = $gcal->newContent($desc);  

    $when = $gcal->newWhen(); 

    $when->startTime = $date; 

    $when->endTime = $date; 

    $event->when = array($when);   

    $gcal->insertEvent($event); 

echo $event->getEditLink()->href; 


    } catch (Zend_Gdata_App_Exception $e) { 

    echo "Error: Unable to add event to Google Calendar" . $e->getResponse(); 

    } 

Répondre

1

Ceci est clairement documenté dans la documentation Zend_Gdata:

http://framework.zend.com/manual/en/zend.gdata.calendar.html#zend.gdata.calendar.deleting_events

// Option 1: Events can be deleted directly 
$event->delete(); 

ou

// Option 2: Events can be deleted supplying the edit URL of the event 
// to the calendar service, if known 
$service->delete($event->getEditLink()->href); 

Il semble que vous ayez besoin de ce dernier.

Edit:

obtenir le lien d'édition de votre événement $. Il est indiqué dans le code ci-dessus:

$event->getEditLink()->href; 

Cet événement sera disponible pour un événement enregistré. par exemple.

$newEvent = $service->insertEvent($event); 
echo $newEvent->getEditLink()->href; 
+0

hobodave - J'ai regardé ça, mais ce qui me déroute, c'est la "fourniture de l'URL d'édition de la partie paire". Disons que je viens d'ajouter un événement, et maintenant je veux le supprimer. Comment puis-je connaître l'URL de cet événement? J'ai ajouté une modification à mon message d'origine avec la façon dont j'ajoute un événement, au cas où cela serait utile. Merci pour votre aide. – littleK

+1

C'était dans ma réponse initiale. J'ai mis à jour pour le rendre plus clair. S'il vous plaît * essayez * le code indiqué. – hobodave

+0

Merci pour votre aide. – littleK

1

Vous pouvez jeter un oeil à Zend_Gdata et Zend_Gdata_Calendar: les serait probablement utile pour tout le travail acharné - et si vous n'avez pas à dépenser du code pour communiquer avec l'API de Google, cela vous donne plus de temps pour développer d'autres choses ;-)

Et il semble qu'il peut être utilisé outsid du Zend Framework: il est même disponible en téléchargement autonome: http://framework.zend.com/download/gdata

(Si vous voulez vraiment faire vous-même, vous pouvez toujours essayer de comprendre comment Zend_Gdata-t-il ^^)

+1

Désolé, j'aurais dû mentionner que j'utilise Zend Framework pour réaliser ce que j'ai déjà fait. Mais, même en regardant dans l'API, je n'arrive pas à trouver comment obtenir une URL d'événement pour un événement particulier! – littleK

0

est ici une ressource pour vous aider à GREAT avec ceci: Integrate your PHP application with Google Calendar

Voilà comment j'obtenir l'ID unique de l'événement du calendrier après la publication de l'événement avec newEventEntry. Je stocke la valeur de $ id dans la base de données, au cas où je devrais l'éditer plus tard avec la mise à jour ou la suppression.

try { 
     $event = $gcal->newEventEntry();   
     $event->title = $gcal->newTitle($title);   
     $when = $gcal->newWhen(); 
     $when->startTime = $start; 
     $when->endTime = $end; 
     $event->when = array($when);   
     $gcal->insertEvent($event); 
     $id = substr($event->id, strrpos($event->id, '/')+1); // trim off everything but the id 
     } catch (Zend_Gdata_App_Exception $e) { 
     echo "Error: " . $e->getResponse(); 
     } 

// Do mysql Insert functions here to store the record in db (removed for clarity) 

     echo 'Event '. $id. 'successfully added!'; 

Puis, quand j'ai besoin d'accéder à cet événement particulier, je peux l'utiliser pour cibler juste cet événement pour la mise à jour/suppression de l'aide d'un $ _POST de l'ID:

try { 

$event = $gcal->getCalendarEventEntry('http://www.google.com/calendar/feeds/default/private/full/' . $_POST['id']); 
     $event->title = $gcal->newTitle($title); 
     $when = $gcal->newWhen(); 
     $when->startTime = $start; 
     $when->endTime = $end; 
     $event->when = array($when); 
     $event->save(); 

    } catch (Zend_Gdata_App_Exception $e) { 
     die("Error: " . $e->getResponse()); 
    } 
    echo 'Event successfully modified!'; 

Espérons que cela répond votre question - je me suis battu pour que cela fonctionne, mais partagez mes conclusions avec vous ici, si cela aide je suis heureux d'avoir aidé.

Scott

0

Eh bien, si vous ne voulez pas stocker l'événement ids dans la base de données locale, voici une autre bonne façon d'événement supprimer si vous avez infomration temps de début, heure de fin et id calendrier (calendrier spécifique pour lequel vous voulez supprimer l'événement entre l'heure de début et l'heure de fin)

function deleteEvent($client,$startDate,$endDate,$startTime,$endTime,$tzOffset,$cal_id) 
{ 
$gdataCal = new Zend_Gdata_Calendar($client); 
$query = $gdataCal->newEventQuery(); 
$query->setUser($cal_id); 
$query->setVisibility('private'); 
$query->setProjection('full'); 
$query->setOrderby('starttime'); 
$query->setStartMin("{$startDate}T{$startTime}:00.000{$tzOffset}"); 
$query->setStartMax("{$endDate}T{$endTime}:00.000{$tzOffset}"); 
$eventFeed = $gdataCal->getCalendarEventFeed($query); 
    foreach ($eventFeed as $event) { 
     $event->delete(); 
    } 
} 

J'espère que cela aide quelqu'un, comme cela m'a été fait.

Questions connexes