是否有任何关于使用 CodeIgniter 框架访问 Google Contact API 的帖子/教程?
我用谷歌搜索了很多,发现只有一篇使用Zend
带有 Codeigniter 的库的帖子。
经历了一些联系 API 的 PHP 实现。但他们都在使用Curl
与 API 对话。
我可以使用与 Codeigniter 模型类相同的方式吗?还是我应该考虑使用 javascript 访问 gmail 联系人?
请帮忙。
是否有任何关于使用 CodeIgniter 框架访问 Google Contact API 的帖子/教程?
我用谷歌搜索了很多,发现只有一篇使用Zend
带有 Codeigniter 的库的帖子。
经历了一些联系 API 的 PHP 实现。但他们都在使用Curl
与 API 对话。
我可以使用与 Codeigniter 模型类相同的方式吗?还是我应该考虑使用 javascript 访问 gmail 联系人?
请帮忙。
我将 oauth 库用于 codeigniter http://getsparks.org/packages/oauth2/versions/HEAD/show
在 spark->oauth->libries->provider->google 中设置范围
public function __construct(array $options = array()) {
// Now make sure we have the default scope to get user data
empty($options['scope']) and $options['scope'] = array(
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.google.com/m8/feeds',
);
在同一文件中添加以下代码
public function curl_file_get_contents($email, OAuth2_Token_Access $token) {
$url = "https://www.google.com/m8/feeds/contacts/$email/full?max-results=" . 25 . "&oauth_token=" . $token->access_token;
$curl = curl_init();
$userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
curl_setopt($curl, CURLOPT_URL, $url); //The URL to fetch. This can also be set when initializing a session with curl_init().
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); //The number of seconds to wait while trying to connect.
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); //The contents of the "User-Agent: " header to be used in a HTTP request.
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); //To follow any "Location: " header that the server sends as part of the HTTP header.
curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE); //To automatically set the Referer: field in requests where it follows a Location: redirect.
curl_setopt($curl, CURLOPT_TIMEOUT, 10); //The maximum number of seconds to allow cURL functions to execute.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //To stop cURL from verifying the peer's certificate.
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$contents = curl_exec($curl);
curl_close($curl);
return $contents;
}
然后将此代码用于控制器中的google contant
public function google() {
$this->load->helper('url_helper');
$this->load->spark('oauth2');
$provider = $this->oauth2->provider('google', array(
'id' => GOOGLE_APP_ID,
'secret' => GOOGLE_APP_SECRET,
));
if (!$this->input->get('code')) {
// By sending no options it'll come back here
$provider->authorize();
} else {
// Howzit?
try {
$token = $provider->access($_GET['code']);
$user = $provider->get_user_info($token);
$email = $user['email'];
$xmlresponse = $provider->curl_file_get_contents($email, $token);
if ((strlen(stristr($xmlresponse, 'Authorization required')) > 0) && (strlen(stristr($xmlresponse, 'Error ')) > 0)) {
echo "<h2>OOPS !! Something went wrong. Please try reloading the page.</h2>";
exit();
}
$xml = new SimpleXMLElement($xmlresponse);
$xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005');
$result = $xml->xpath('//gd:email');
$this->data['email_address'] = $result;
print_r($result);exit;
} catch (OAuth2_Exception $e) {
show_error('That didnt work: ' . $e);
}
}
}