1

是否有任何关于使用 CodeIgniter 框架访问 Google Contact API 的帖子/教程?
我用谷歌搜索了很多,发现只有一篇使用Zend带有 Codeigniter 的库的帖子。
经历了一些联系 API 的 PHP 实现。但他们都在使用Curl与 API 对话。
我可以使用与 Codeigniter 模型类相同的方式吗?还是我应该考虑使用 javascript 访问 gmail 联系人?

请帮忙。

4

1 回答 1

3

我将 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);
            }
        }

    }
于 2013-01-25T06:11:55.393 回答