Google Calendar PHP - 活动网址/ ID? (Zend_Gdata)

时间:2009-07-22 05:24:46

标签: php events zend-framework calendar

我修改了我的PHP网络应用程序,以便将事件添加到Google日历中。目前,它成功添加。

但是,现在我希望删除和编辑事件。这似乎很容易做到,除了我不知道哪个事件URL与每个事件相关联。

我是否应该在添加活动时设置此事件网址(或ID?)?我怎么知道它是什么?

我似乎无法在其他地方找到这些信息......

谢谢!

编辑:

我一直在使用Zend Framework(Gdata包)......

编辑:

$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();

  }

4 个答案:

答案 0 :(得分:1)

您可以查看Zend_GdataZend_Gdata_Calendar:这些可能有助于所有的努力工作 - 如果您不必花费代码与Google的API进行通信,它会给出你有更多的时间来开发其他东西; - )

它似乎可以在Zend FRamework之外使用:它甚至可以单独下载:http://framework.zend.com/download/gdata

(如果你真的想亲自去做,你仍然可以尝试理解Zend_Gdata如何做到这一点^^)

答案 1 :(得分:1)

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();

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

听起来你需要后者。

修改

从$ event获取编辑链接。它显示在上面的代码中:

$event->getEditLink()->href;

这将在已保存的活动中提供。 e.g。

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

答案 2 :(得分:0)

这是一个很好的资源来帮助你: Integrate your PHP application with Google Calendar

以下是我使用newEventEntry发布事件后获取日历事件的唯一ID的方法。我将$ id值存储在数据库中,以防我以后需要通过更新或删除进行编辑。

    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!';  

然后,当我需要访问该特定事件时,我可以使用它来定位 该事件以使用ID的$ _POST进行更新/删除:

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!';

希望这能回答你的问题 - 我努力让这项工作成功,但在这里与你分享我的发现,如果它有帮助我很乐意帮助你。

斯科特

答案 3 :(得分:0)

好吧,如果您不想在本地数据库中存储事件ID,这里有另一个删除事件的好方法,如果您有关于开始时间,结束时间和日历ID的信息(要在开始时间和之间删除事件的特定日历)结束时间)

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();
    }
}

希望对某人有所帮助,就像对我一样。