2012-06-28 2 views
1

В настоящее время я использую кусок кода, чтобы получить контактные данные Google из учетной записи google и отображать их в таблицу. Письма отображаются правильно, но я хотел бы, чтобы имя человека также появилось. Код, который я использую в настоящее время, выглядит следующим образом. Я знаю, что $ xml содержит имя (я попробовал распечатать на html), но я не знаю, как его отображать. $ result больше не содержит имен, поэтому я предполагаю, что отображение имени должно быть до этого. Кто-нибудь есть идеи?получение имен контактов google с помощью oauth

//passing accesstoken to obtain contact details 
$xmlresponse = file_get_contents('https://www.google.com/m8/feeds/contacts/default/full?oauth_token='.$tok_value.'&max-results=500'); 
//print_r($xmlresponse); 
//reading xml using SimpleXML 
$xml = new SimpleXMLElement($xmlresponse); 
//print_r($xml); 
$xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005'); 
//after dumping there is no names in the result 
$result = $xml->xpath('//gd:email'); 
//var_dump($result); 
$count = 0; 
echo "<table class=\"inv-table\" cellpadding=\"5\">"; 
foreach ($result as $title) 
{ 
    //echo $title->attributes()->address . "<br><br>"; 
    echo "<tr><td><input type=\"checkbox\" 
         name=\"email_to[]\" 
         value=".$title->attributes()->address.">".$title->attributes()->address; 
    echo "</td></tr>"; 
    //echo $title->attributes()->displayName; 
    //echo $title->fullName; 
    $count = $count + 1; 
} 
echo "</table>"; 

Заранее благодарен!

ответ

1

Вы смогли получить имена. Я пытался решить ту же проблему.

Я заметил, что вы пытались echo $title->fullName, он не будет находиться под $title, потому что это только результаты всех адресов электронной почты, которые были найдены, у которых есть только и адрес и некоторые другие необязательные элементы (ни одно из которых не является именем).

Если вы print_r($xml), вы должны увидеть имена там, но для меня никакое количество xpath не может получить их для меня.

2

Поместите этот код в цикле:

echo $xml->entry[$count]->title; 
2

Я попытался выше метод, где echo $xml->entry[$count]->title;, который не работает, так как это не дает правильные имена писем. Вместо этого я сделал это:

// https://www.google.com/m8/feeds/contacts/default/full?updated-min=1970-03-16T00:00:00&max-results=10000"); 

function getNamesAndEmails ($xml_response) { 
    $xml = new \SimpleXMLElement($xml_response); 
    $xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005'); 

    $results = array(); 
    foreach($xml->entry as $entry){ 

     $xml = simplexml_load_string($entry->asXML()); 

     $ary = array(); 
     $ary['name'] = (string) $entry->title; 

     foreach ($xml->email as $e) { 
      $ary['emailAddress'][] = (string) $e['address']; 
     } 

     if (isset($ary['emailAddress'][0])) { 
      $ary['email'] = $ary['emailAddress'][0]; 
     } 

     $results[] = $ary; 

    } 

    return $results; 
} 
0

Просто очень похожее решение, но отлично работает для меня:

$url = "https://www.google.com/m8/feeds/contacts/default/full?max-results=2000&oauth_token=$token"; 
$xmlresponse = file_get_contents($url); 
$xml = new SimpleXMLElement($xmlresponse); 
$xml->registerXPathNamespace('gd', 'http://schemas.google.com/g/2005'); 
$result = $xml->xpath('//gd:email'); 

$contacts = array(); 
foreach ($result as $key=>$title) { 
    $contact = new stdClass(); 
    $contact->name = sprintf("%s", $xml->entry[$key]->title[0]); 
    $contact->email = sprintf("%s", $title->attributes()->address); 
    $contacts[] = $contact; 
} 

Таким образом, после цикла, то есть массив с простым объектом, наполненную имя и адрес электронной почты ,

Смежные вопросы