1

目前我正在使用一段代码从谷歌帐户获取谷歌联系人电子邮件并将它们显示到表格中。电子邮件正确显示,但我也希望显示此人的姓名。我目前使用的代码如下。我知道 $xml 包含名称(我尝试在 html 上打印出来),但我不知道如何显示它。$result 不再包含名称,所以我猜测显示的名称必须在此之前。有人有什么主意吗?

//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>";

提前致谢!

4

4 回答 4

2

将此代码放入循环中:

echo $xml->entry[$count]->title;
于 2012-10-24T11:05:31.670 回答
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;
}
于 2013-03-11T17:13:40.277 回答
1

你能得到名字吗?我一直在尝试处理同样的问题。

我注意到您尝试了echo $title->fullName,它不会在下面,$title因为这只是找到的所有电子邮件地址的结果,其中只有和地址​​和一些其他可选项目(都不是名称)。

如果您print_r($xml)应该在那里看到名称,但对我来说,没有多少 xpath 可以为我检索它们。

于 2012-08-08T23:22:20.447 回答
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;
}

因此,在循环之后,您有一个包含简单对象的数组,其中填充了姓名和电子邮件。

于 2015-08-10T00:38:57.657 回答