2012-02-24 24 views
0

phpクラスを使用してGoogleカレンダーにイベントを追加していますが、クラスはindex.phpページを読み込む際にエラーを返します。php gcalクラスが動作しません

これは、ここにindex.phpページ内のコードIAM呼び出し元のクラスです:

<?php 
require_once('gcal.class.php'); 
$g = new gcal('[email protected]','test123$'); 
$cal_url = 'https://www.google.com/calendar/feeds/[email protected]/private-01d281d910a2622c8c2f5899690b9eb5/basic'; 
$eTitle = 'test event'; $eDesc = 'Another Test'; $eAuthorName = 'Justin Burger'; $eAuthorEmail = '[email protected]'; $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; 
     } 
    } 

?> 

次にブラウザでこれを取ってIAMエラーを表示します。

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 

私のコードの問題点は何ですか?

グーグルコードからクラスをダウンロードするときに、使用する前に両方をインストールしていることを確認してください(例:pear install Netとpear install HTTP)。 これを行う方法はわかりませんでしたか?解決策を教えてください。

答えて

0

HTTP_Requestパッケージをインストールする必要があります。パッケージには、「PEAR」フォルダが存在する場合は、ここでinstallation についてを参照してください。それが

+0

どうすればインストールできますか? – Kichu

+0

編集された答えを見る、PEARをインストールするためのリンクを確認してください –

0

まずホープ、あなたの "PHPのフォルダにチェック

hereを見つけることができます。そうでなければPEARをインストールしないでください(命令:http://pear.php.net/manual/en/installation.php)。

ので、パラメータ 'のinclude_path' が 'PEAR' フォルダへの絶対パスを持っている場合は、 'php.iniの' にチェックした場合(例えばWindowsの場合:のinclude_path = "; C:\ XAMPPの\ PHPの\のPEAR")

よろしくお願いいたします。
Bronek

関連する問題