【问题标题】:Access Google Contact API with PHP Codeigniter使用 PHP Codeigniter 访问 Google Contact API
【发布时间】:2013-01-25 14:11:55
【问题描述】:

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

请帮忙。

【问题讨论】:

    标签: php codeigniter google-contacts-api


    【解决方案1】:

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

    然后将此代码用于控制器中的谷歌内容

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2012-05-20
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多