我正在使用 php 类向谷歌日历添加事件。但是加载 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
我的代码有什么问题?
当我从谷歌代码下载课程时,他们说请确保在使用前都安装了(例如:pear install Net 和 pear install HTTP)。我不知道该怎么做?给我一个解决方案。