Php Gcal класс не работает - PullRequest
       19

Php Gcal класс не работает

0 голосов
/ 24 февраля 2012

Я использую класс php для добавления события в google calender. Но класс возвращает ошибку при загрузке страницы index.php.

Это код на странице index.php, который я здесь называю классом:

<?php
require_once('gcal.class.php');
$g = new gcal('test@gmail.com','test123$'); 
$cal_url = 'https://www.google.com/calendar/feeds/test@gmail.com/private-01d281d910a2622c8c2f5899690b9eb5/basic'; 
$eTitle = 'test event'; $eDesc = 'Another Test'; $eAuthorName = 'Justin Burger'; $eAuthorEmail = 'justin@loudisrelative.com'; $eLocation = 'LIR Offices'; $eStartTime = date('c'); $eEndTime = date('c',strtotime("+1 hour")); 

//Adding an event.
$g->addEvent($cal_url,$eTitle, $eDesc, $eAuthorName, $eAuthorEmail,$eLocation,$eStartTime, $eEndTime); 

?>

А это код gcal.class.php:

 <?php
require_once('HTTP/Request.php');

    class gcal{
        /** Google Auth Token, used to authorize add functions*/
        private $token;

        /** Users Email Address (notice, password is not stored) */
        private $email;
        function __construct($email, $password){
            $this->login($email,$password); 
            $this->email = $email;      
        }
        public function addEvent($cal_url,$eTitle, $eDesc, $eAuthorName, $eAuthorEmail,$eLocation,$eStartTime, $eEndTime){
            /* Make sure we send ONLY valid XML. */
            $eTitle         = htmlentities($eTitle);
            $eDesc          = htmlentities($eDesc);
            $eAuthorName    = htmlentities($eAuthorName);
            $eAuthorEmail   = htmlentities($eAuthorEmail);
            $eLocation      = htmlentities($eLocation);
            $eStartTime     = htmlentities($eStartTime);
            $eEndTime       = htmlentities($eEndTime);

             $xml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>
                <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category>
                <title type='text'>{$eTitle}</title>
                <content type='text'>{$eDesc}</content>
                <author>
                    <name>{$eAuthorName}</name>
                    <email>{$eAuthorEmail}</email>
                </author>
                <gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
                <gd:eventStatus
                    value='http://schemas.google.com/g/2005#event.confirmed'>
                </gd:eventStatus>
                <gd:where valueString='{$eLocation}'></gd:where>
                <gd:when startTime='{$eStartTime}'
                    endTime='{$eEndTime}'></gd:when>
            </entry>";

            $http = new HTTP_Request($cal_url,array('allowRedirects' => true));
            $http->setMethod('POST');
            $http->addHeader('Host','www.google.com');
            $http->addHeader('MIME-Version','1.0');
            $http->addHeader('Accept','text/xml');
            $http->addHeader('Content-type','application/atom+xml');
            $http->addHeader('Authorization','GoogleLogin auth=' . $this->token);
            $http->addHeader('Content-length',strlen($xml));
            $http->addHeader('Cache-Control','no-cache');
            $http->addHeader('Connection','close');
            $http->setBody($xml);
            $http->sendRequest();

            switch($http->getResponseCode()){
                case 201: case 200:
                    return true;
                    break;
                default:
                    throw new Exception('Error Adding Google Cal Event. Response From Google:' . $http->getResponseBody(), $http->getResponseCode());
                    return false;
                    break;  
            }

        }

        public function getCalendarList(){
            $url = 'http://www.google.com/calendar/feeds/' . $this->email;

            $http = new HTTP_Request($url,array('allowRedirects' => true));
            $http->addHeader('Authorization','GoogleLogin auth=' . $this->token);
            $http->setMethod('GET');
            $http->sendRequest();
            $xml = new SimpleXMLElement($http->getResponseBody());

            $calendars = array();
            foreach ($xml->entry as $cal){

                foreach($cal->link as $key=>$link){
                    $linkSets = array();
                    $links = $link->attributes();
                    $links = (array) $links;
                    foreach($links as $l){
                        $linkSets[] = array('rel'=>$l['rel'],
                                            'type'=>$l['type'],
                                            'href'=>$l['href']);
                    }
                }
                $calendars[] = array('id'=>strval($cal->id),
                                     'published'=>strval($cal->published),
                                     'updated'=>strval($cal->updated),
                                     'title'=>strval($cal->title),
                                     'authorName'=>strval($cal->author->name),
                                     'authorEmail'=>strval($cal->author->email),
                                     'links'=>$linkSets);
            }
            return $calendars;
        }
        private function login($email, $password){
            $url = 'https://www.google.com/accounts/ClientLogin';


            $http = new HTTP_Request('https://www.google.com/accounts/ClientLogin',
                                     array('allowRedirects' => true));
            $http->setMethod('POST');
            $http->addPostData('Email', $email);
            $http->addPostData('Passwd', $password);
            $http->addPostData('source', 'example-test-2');
            $http->addPostData('service', 'cl');
            $http->addPostData('accountType', 'HOSTED_OR_GOOGLE');
            $http->sendRequest();

            switch($http->getResponseCode()){
                case 403:
                    throw new Exception('Google Auth Failed',403);
                    break;
                case 200: case 201:
                    $this->token = $this->extractAuth($http->getResponseBody());
                    return true;
                    break;
                default:
                    throw new Exception('Unknown Google Auth Failure',$http->getResponseCode());
                    break;  
            }
        }

        private function extractAuth($body){
            $st = strpos($body,'Auth=');
            $token = trim(substr($body,($st+5)));
            return $token;
        }
    }

?>

Затем, принимая это в браузере, он отображает ошибку:

Warning: require_once(HTTP/Request.php) [function.require-once]: failed to open stream: No such file or directory in E:\wamp\www\gcal\gcal.class.php on line 2
Fatal error: require_once() [function.require]: Failed opening required 'HTTP/Request.php' (include_path='.;C:\php\pear') in E:\wamp\www\gcal\gcal.class.php on line 2

В чем проблемав моем коде?

Когда я загружал класс из кода Google, они сказали, что, пожалуйста, убедитесь, что вы оба установили перед использованием (например: pear install Net и pear install HTTP).Я не знаю, как это сделать? Дайте мне решение.

Ответы [ 2 ]

0 голосов
/ 12 июля 2012

Во-первых, проверьте в вашей папке 'php', существует ли папка 'PEAR'. Если нет, тогда установите PEAR (инструкция: http://pear.php.net/manual/en/installation.php).

В этом случае проверьте в php.ini, имеет ли параметр include_path абсолютный путь к папке PEAR (например, в Windows: include_path = ".; C: \ xampp \ php \ PEAR")

Привет
Бронек

0 голосов
/ 29 февраля 2012

Вам нужно установить пакет HTTP_Request, чтобы он работал.Пакет можно найти здесь

См. Здесь установка Надеюсь, это поможет

...