【问题标题】:ZEND framework Google Calendar Shutdown - php web appZEND 框架 Google Calendar Shutdown - php web 应用程序
【发布时间】:2014-11-18 13:50:18
【问题描述】:

自 2014 年 11 月 17 日起,Google 宣布他们关闭了 google calendar API v1、v2。

查看此链接: http://googleappsupdates.blogspot.com/2014/06/calendar-gdata-api-google-calendar.html

几年前,我们使用 ZEND 框架构建了一个 php Web 表单,用于将数据输入到日历中。

当前代码现在无法运行并出现此错误。

错误:预期响应代码 200,得到 403 禁止的 错误 403

这非常令人沮丧,因为我们需要这个应用程序在网站上运行,这基本上就是首先访问该网站的全部意义。

php 表单非常简单。基本上,访问者会输入他们的邮政编码,然后从他们的 gmail 日历帐户的“可用性日历”中选择显示的日期和时间。还有两个自定义日历用于在线预订和内部预订。一旦有人完成了包括输入表单及其联系信息并点击提交在内的步骤,“可用日历”将在他们的网站上更新为已预订和谷歌日历本身。

它还会发送电子邮件通知您已预订。

我个人对 ZEND 和 Google Cal APIv3 并不熟悉。我对 php/css/etc 有一定程度的了解,但还不够深入,无法完成整个升级过程。

我希望这可能是一件很容易的事情,并且 StackOverflow 上对这些材料有深入了解的人可以帮助我。

似乎我已经阅读了他们的论坛,并且很多很多人对 v1、v2 的关闭感到沮丧。

我需要升级 ZEND 框架吗?目前是 1.11.3,或者我可以不用管它。

我读到 v3 的目的是让编写代码更容易,所以也许这不是什么难的任务……这是第一步的代码。

        <?php

        function setEnvironment() {
            session_start();
            date_default_timezone_set('America/New_York');
        }

        setEnvironment();

        function setup() {
            set_include_path("/var/www/vhosts/mydomainexample.com/httpdocs/");
            require_once("Zend/Loader.php");
            Zend_Loader::loadClass("Zend_Gdata");
            Zend_Loader::loadClass("Zend_Gdata_ClientLogin");
            Zend_Loader::loadClass("Zend_Gdata_Calendar");
        }   

        //////////////////////////////////////////////////
        //                                              //
        //  CONNECT TO GOOGLE CALENDAR                  //
        //                                              //
        //////////////////////////////////////////////////

        function connect() {
            global $service;

            $user = "mygmailexample@gmail.com";
            $pass = "mypasswordexample";

            $serviceName = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
            $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $serviceName);
            $service = new Zend_Gdata_Calendar($client);
        }


        //////////////////////////////////////////////////
        //                                              //
        //  CREATE EVENT AND ADD TO CALENDAR            //
        //                                              //
        //////////////////////////////////////////////////

        function bookAppointment() {
            global $service;

            $title = "ONLINE BOOKING: " . $_SESSION["fullName"] . " , " . $_SESSION["townCity"];

            $content .= "Name: " . $_SESSION["fullName"] . "\n\n";
            $content .= "Requested Time: " . date("l M jS g:i A",$_SESSION["s"]) . " - " . date("g:i A",$_SESSION["e"]) . "\n\n";
            $content .= "Home Phone: " . $_SESSION["homePhone"] . "\n\n";
            $content .= "Email: " . $_SESSION["emailAddress"] . "\n\n";

            $content .= "Address: \n\n" . $_SESSION["streetAddress"] . "\n";
            $content .= "" . $_SESSION["townCity"] . " ";
            $content .= "" . $_SESSION["zipCode"] . "\n\n";

            $content .= "" . $_SESSION["jobDescription"] . "\n\n";

            $event = $service->newEventEntry();
            $event->title = $service->newTitle($title);
            $event->content = $service->newContent($content);
            $when = $service->newWhen();
            $when->startTime = date(DateTime::RFC3339,$_SESSION["s"]);
            $when->endTime = date(DateTime::RFC3339,$_SESSION["e"]);
            $event->when = array($when);

            $newEvent = $service->insertEvent($event,"http://www.google.com/calendar/feeds/o8d31pro7mbgbi2g93acsluhn8@group.calendar.google.com/private/full");
            $eventUri = $newEvent->id->text;

            $to      = "example@example.com";
            $subject = $title;
            $message = $content;
            $headers = 'From: ' . $_SESSION["emailAddress"] . "\r\n" .
            'Reply-To: ' . $_SESSION["emailAddress"] . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

            mail($to, $subject, $message, $headers);

            $to      = $_SESSION["emailAddress"];
            $subject = "BOOKED:";
            $message = "Thank you for booking an appointment with example! We look forward to seeing you and may contact you one more time to confirm before we travel to your location.\n\n" . $content;
            $headers = "From: example <example@example.com>\r\n" .
            "Reply-To: Lalaland Tan <example@example.com>\r\n" .
            "X-Mailer: PHP/" . phpversion();

            mail($to, $subject, $message, $headers);
        }

        //////////////////////////////////////////////////
        //                                              //
        //  GET SCHEDULE AND AVAILABILITY FROM GOOGLE   //
        //                                              //
        //////////////////////////////////////////////////

        function getSchedule() {
            global $service, $timeSlotsByDay;

            $query = $service->newEventQuery();
            $query->setVisibility("private");
            $query->setProjection("full");
            $query->setOrderby("starttime");
            $query->setSortOrder('ascending');
            $query->setStartMin(date(DateTime::RFC3339));
            $query->setStartMax(date(DateTime::RFC3339,(time()+2678400)));
            $query->setSingleEvents("true");
            $query->setMaxResults(999);

            $query->setUser("exampleurl@group.calendar.google.com");

            try {
                $internalBookings = $service->getCalendarEventFeed($query);
            } catch (Zend_Gdata_App_Exception $e) {
                echo "Error: " . $e->getMessage();
            }

            $query->setUser("exampleurl@group.calendar.google.com");

            try {
                $onlineBookings = $service->getCalendarEventFeed($query);
            } catch (Zend_Gdata_App_Exception $e) {
                echo "Error: " . $e->getMessage();
            }

            $query->setUser("exampleurl@group.calendar.google.com");

            try {
                $availableSlots = $service->getCalendarEventFeed($query);
            } catch (Zend_Gdata_App_Exception $e) {
                echo "Error: " . $e->getMessage();
            }

            $timeSlotsByDay = array();

            foreach ($availableSlots as $timeSlot) {

                $slotStart = strtotime($timeSlot->when[0]->starttime);
                $slotEnd = strtotime($timeSlot->when[0]->endtime);
                $available = true;

                foreach ($internalBookings as $event) {
                    if ( $available ) {
                        $bookingStart = strtotime($event->when[0]->starttime);
                        $bookingEnd = strtotime($event->when[0]->endtime);

                        if ( ( $bookingStart >= $slotStart ) && ( $bookingStart < $slotEnd ) ) {
                            $available = false;
                        }

                        if ( ( $bookingEnd > $slotStart ) && ( $bookingEnd <= $slotEnd ) ) {
                            $available = false;
                        }

                        if ( ( $bookingStart <= $slotStart ) && ( $bookingEnd >= $slotEnd ) ) {
                            $available = false;
                        }
                    }
                }

                foreach ($onlineBookings as $event) {
                    if ( $available ) {
                        $bookingStart = strtotime($event->when[0]->starttime);
                        $bookingEnd = strtotime($event->when[0]->endtime);

                        if ( ( $bookingStart >= $slotStart ) && ( $bookingStart < $slotEnd ) ) {
                            $available = false;
                        }

                        if ( ( $bookingEnd > $slotStart ) && ( $bookingEnd <= $slotEnd ) ) {
                            $available = false;
                        }
                    }
                }

                $timeSlotsByDay[date("Ymd",strtotime($timeSlot->when[0]->starttime))][] = array("start"=>$slotStart,"end"=>$slotEnd,"available"=>$available);
            }

        }

        //////////////////////////////////////////////////
        //                                              //
        //  STORE FORM DATA IN SESSION                  //
        //                                              //
        //////////////////////////////////////////////////

        function sessTimeSlot() {
            $_SESSION["s"] = $_GET["s"];
            $_SESSION["e"] = $_GET["e"];
        }

        function sessJobDetails() {
            $_SESSION["fullName"] = $_POST["fullName"];
            $_SESSION["homePhone"] = $_POST["homePhone"];
            $_SESSION["emailAddress"] = $_POST["emailAddress"];

            $_SESSION["streetAddress"] = $_POST["streetAddress"];
            $_SESSION["townCity"] = $_POST["townCity"];
            $_SESSION["zipCode"] = $_POST["zipCode"];

            $_SESSION["jobDescription"] = $_POST["jobDescription"];

        }



        ?>   

【问题讨论】:

    标签: php zend-framework calendar


    【解决方案1】:

    您不能再使用 Zend 来列出、添加、删除事件。您必须使用谷歌 api v3。 这是可用于管理事件的类示例: Authentification Zend Gdata (403 forbidden)

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 1970-01-01
      • 2022-09-23
      • 2011-09-09
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      相关资源
      最近更新 更多