代码之家  ›  专栏  ›  技术社区  ›  Mike Lammers

如何使用联系人API检索所有谷歌联系人?

  •  0
  • Mike Lammers  · 技术社区  · 10 年前

    我正在尝试使用Contacts API来检索点击 <a> 在response-callback.php的底部。我正在使用谷歌应用引擎,在GAE中我启用了联系人API。我通过遵循教程获得了这段代码,所以我自己很难找到错误。我没有使用过PHP、GAE或任何API。这也是为什么我不能调试和检查某些值是否为空的原因。

    当我启动网站时。我什么都没表现出来。甚至连我用来测试是否能到达响应回调的回声都没有。php和H2都没有显示,我只是得到了一个完全白色的页面。

    应用程序:

    application: csimporttest
    version: 1
    runtime: php55
    api_version: 1
    threadsafe: yes
    
    handlers:
    
    - url: /
      script: main.php;
    

    主.php:

    <!DOCTYPE html>
    <html>
    
    <head>
    </head>
    
    <body>
    <h2>Hi! Stackoverflow!</h2>
    <?php include'response-callback.php';
    echo "response-callback file: " $test; 
    ?>
    
    </body>
    
    </html>
    

    response-callback.php:

    <?php
    session_start();
    
    require_once 'google-api-php-client/src/autoload.php';
    
    $test = 'WORKS!'; 
    
    $google_client_id = 'SECRET';
    $google_client_secret = 'SECRET';
    $google_redirect_uri = 'SECRET';
    
    //setup new google client
    $client = new Google_Client();
    $client -> setApplicationName('csimporttest');
    $client -> setClientid($google_client_id);
    $client -> setClientSecret($google_client_secret);
    $client -> setRedirectUri($google_redirect_uri);
    $client -> setAccessType('online');
    
    $client -> setScopes('https://www.googleapis.com/auth/contacts.readonly');
    
    $googleImportUrl = $client -> createAuthUrl();
    function curl($url, $post = "") {
     $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.
     if ($post != "") {
     curl_setopt($curl, CURLOPT_POST, 5);
     curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
     }
     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, FALSE);
     //To stop cURL from verifying the peer's certificate.
     $contents = curl_exec($curl);
     curl_close($curl);
     return $contents;
    }
    if(isset($_SESSION['google_code'])) {
     $auth_code = $_SESSION['google_code'];
     $max_results = 200;
        $fields=array(
            'code'=>  urlencode($auth_code),
            'client_id'=>  urlencode($google_client_id),
            'client_secret'=>  urlencode($google_client_secret),
            'redirect_uri'=>  urlencode($google_redirect_uri),
            'grant_type'=>  urlencode('authorization_code')
        );
        $post = '';
        foreach($fields as $key=>$value)
        {
            $post .= $key.'='.$value.'&';
        }
        $post = rtrim($post,'&');
        $result = curl('https://www.googleapis.com/oauth2/v4/token',$post);
        $response =  json_decode($result);
        $accesstoken = $response->access_token;
        $url = 'https://www.google.com/m8/feeds/contacts/default/full?max-results='.$max_results.'&alt=json&v=3.0&oauth_token='.$accesstoken;
        $xmlresponse =  curl($url);
        $contacts = json_decode($xmlresponse,true);
    
     $return = array();
     if (!empty($contacts['feed']['entry'])) {
     foreach($contacts['feed']['entry'] as $contact) {
               //retrieve Name and email address  
     $return[] = array (
     'name'=> $contact['title']['$t'],
     'email' => $contact['gd$email'][0]['address'],
     );
     } 
     }
    
     $google_contacts = $return;
    
     unset($_SESSION['google_code']);
    
    }
    ?>
    <a href="<?php echo $googleImportUrl; ?>"> Import google contacts </a>
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Mand    10 年前

    您可以使用var_dump()来查看数组google_contacts是否实际已填充。把这个放在main.php中:

     <?php
    var_dump($google_contacts);
    ?>
    

    如果你在var_dump中得到一个输出,你可以使用一个html表和一个简单的foreach,如下所示:

    <table border='1' class="table table-striped table-condensed">
    <thead>
    <tr>
        <th>Naam </th>
        <th>Email </th>
    </tr>
    </thead>
    <tbody>
    <?php
    foreach ($google_contacts as $contacts){
        echo'<tr>';
        echo'<td>'. $contacts['name']."</td>";
        echo'<td>'. $contacts['email'].'</td>';
        echo'</tr>';
    }
    ?>
    </tbody>
    
    </table>
    
    推荐文章