2016-07-29 97 views
6

我想通过我的朋友的电子邮件获得完整的联系人列表。 我可以得到联系人列表,但没有电子邮件。Google API - 获取联系人邮件

这里是我的代码:

require_once APPPATH . 'vendor/google/src/Google_Client.php'; 
require_once APPPATH . 'vendor/google/src/contrib/Google_Oauth2Service.php'; 
$client = new Google_Client(); 

$client->setApplicationName("PHP Google Test"); 
$client->setClientId('xxx'); 
$client->setClientSecret('xxx'); 
$client->setRedirectUri('http://www.domain.xx/admin/others/google?test'); 
$client->setScopes("http://www.google.com/m8/feeds/"); 

$oauth2 = new Google_Oauth2Service($client); 

if (isset($_GET['code'])) { 
    $client->authenticate(); 
    $_SESSION['token'] = $client->getAccessToken(); 
    $redirect   = 'http://www.domain.xx/admin/others/google'; 
    header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
} 
if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 
if (isset($_REQUEST['logout'])) { 
    unset($_SESSION['token']); 
    $client->revokeToken(); 
} 
if ($client->getAccessToken()) { 
    $req = new Google_HttpRequest("https://www.google.com/m8/feeds/contacts/default/full"); 
    $val = $client->getIo()->authenticatedRequest($req); 
    $response = json_encode(simplexml_load_string($val->getResponseBody())); 
    print "<pre>" . print_r(json_decode($response, true), true) . "</pre>"; 
    $_SESSION['token'] = $client->getAccessToken(); 
} else { 
    $auth = $client->createAuthUrl(); 
} 

$auth = $client->createAuthUrl(); 

echo '<a href="' . $auth . '" target="_blank">' . $auth . '</a>'; 

我怎样才能从联系人列表的电子邮件吗?

+0

有人帮助我吗? –

+0

这里是完全相同的问题与答案:http://stackoverflow.com/questions/21469433/how-to-get-email-address-when-user-is-authenticated-with-google-oauth2-and-peopl – Jehy

+0

不,我需要从联系人获得电子邮件:) –

回答

3

我有解决方案:

代码:

$response = json_encode(simplexml_load_string($val->getResponseBody())); 
print "<pre>" . print_r(json_decode($response, true), true) . "</pre>"; 

更改为:

$xml = simplexml_load_string($val->getResponseBody()); 
      $xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005');   

      $output_array = array(); 
      foreach ($xml->entry as $entry) { 
       foreach ($entry->xpath('gd:email') as $email) { 
       $output_array[] = array((string)$entry->title, (string)$email->attributes()->address); 
       } 
      } 
      print_r($output_array); 
0

您可以从GDATA组件使用联系人种类的谷歌联系人API的 假设$response是您向Google联系人索取的回复:

$xml= new SimpleXMLElement($response); 
$xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005'); 
$result = $xml->xpath('//gd:email'); 

查找谷歌API联系方式联系人种类元素的更多信息请参考here

相关问题