To, co próbuję uzyskać obecnie, to po prostu atrybut gd: e-mail, który jest "adresem =", nic innego jak tylko w danym momencie. Które mogę dostać do części xml, do cholery Mogę nawet dostać jakąkolwiek myśl na powiedzenie tak długo, jak jego wewnątrz tagów, ale, aby uzyskać atrybut dowolnego takiego jak w moim przypadku .. Jestem całkowicie zdezorientowany. Kiedyś wiedziałem, jak to zrobić, ale było tak dawno, odkąd zrobiłem coś, co nie było proste do wykorzystania XML. tak zrobiłem pomieszane moje własne poczucie up ..PHP GMAIL Kontakt XML Parsowanie z DOMDocument i cURL
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gContact='http://schemas.google.com/contact/2008' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gd='http://schemas.google.com/g/2005'>
<id>[email protected]</id>
<updated>2011-06-30T00:07:48.706Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'>Taco Bells's Contacts</title>
<link rel='alternate' type='text/html' href='http://www.google.com/'/>
<link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full'/>
<link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full'/>
<link rel='http://schemas.google.com/g/2005#batch' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/batch'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full?max-results=5'/>
<link rel='next' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full?start-index=6&max-results=5'/>
<author>
<name>Taco Bell</name>
<email>[email protected]</email>
</author>
<generator version='1.0' uri='http://www.google.com/mate/feeds'>Contacts</generator>
<openSearch:totalResults>90</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<openSearch:itemsPerPage>5</openSearch:itemsPerPage>
<entry>
<id>http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/base/0</id>
<updated>2010-01-27T00:11:57.430Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'>Taco B</title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/0/8_XL_JoAPon1k7SNixI2iA'/>
<link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/0'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/0'/>
<link rel='edit' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/0/1264551117430000'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='[email protected]' primary='true'/>
</entry>
<entry>
<id>http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/base/1</id>
<updated>2007-08-01T18:02:04.410Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'></title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/1/1B2M2Y8AsgTpgAmY7PhCfg'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/1'/>
<link rel='edit' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/1/1185991324410001'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='[email protected]' primary='true'/>
</entry>
<entry>
<id>http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/base/2</id>
<updated>2010-01-27T00:11:57.430Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'>Steve Sattler</title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/2/1B2M2Y8AsgTpgAmY7PhCfg'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/2'/>
<link rel='edit' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/2/1264551117430000'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='[email protected]' primary='true'/>
</entry>
<entry>
<id>http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/base/3</id>
<updated>2010-01-27T00:11:57.430Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'>Michael Montana</title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/3/1B2M2Y8AsgTpgAmY7PhCfg'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/3'/>
<link rel='edit' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/3/1264551117430000'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='[email protected]' primary='true'/>
</entry>
<entry>
<id>http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/base/4</id>
<updated>2007-08-01T18:02:04.410Z</updated>
<category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
<title type='text'></title>
<link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='http://www.google.com/mate/feeds/photos/media/xxxxxxxxxxxxxx%40gmail.com/4/1B2M2Y8AsgTpgAmY7PhCfg'/>
<link rel='self' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/4'/>
<link rel='edit' type='application/atom+xml' href='http://www.google.com/mate/feeds/contacts/xxxxxxxxxxxxxx%40gmail.com/full/4/1185991324410001'/>
<gd:email rel='http://schemas.google.com/g/2005#other' address='[email protected]' primary='true'/>
</entry>
</feed>
z kodem, który wygląda jak (jest to cały skrypt (obecnie))
$user = "[email protected]";
$password = "xxxxxxxxxxxx";
// ref: http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html
// step 1: login
$login_url = "https://www.google.com/accounts/ClientLogin";
$fields = array(
'Email' => $user,
'Passwd' => $password,
'service' => 'cp', // <== contact list service code
'source' => 'test-google-contact-grabber',
'accountType' => 'GOOGLE',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$login_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$fields);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$returns = array();
foreach (explode("\n",$result) as $line)
{
$line = trim($line);
if (!$line) continue;
list($k,$v) = explode("=",$line,2);
$returns[$k] = $v;
}
curl_close($curl);
// step 2: grab the contact list
$feed_url = "http://www.google.com/m8/feeds/contacts/$user/full?&max-results=5";
$header = array(
'Authorization: GoogleLogin auth=' . $returns['Auth'],
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $feed_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
$doc = new DOMDocument();
$doc->load($result);
$arrFeeds = array();
foreach ($doc->getElementsByTagName('entry') as $node) {
$monkey = $node->getAttribute('{gd:email}');
$itemRSS = array($monkey->nodeValue);
array_push($arrFeeds, $itemRSS);
}
array_unique($arrFeeds);
To jest niesamowite! Nie sądzę, bym sam doszedł do takiego wniosku przynajmniej na jakiś czas. Ale ciekawy. "// gd: email" Co oznacza część "//"? Jak to ma znaczenie? Następnie "$ xpath-> registerNamespace (" gd "," http://schemas.google.com/g/2005 ");" jest tak, aby nie mieć części http: // ...... ponieważ im myślę co jeśli tam jest coś innego .. – chris
@chris - // oznacza tylko: "Wybiera węzły w dokumencie z bieżącego węzła, który dopasuj wybór niezależnie od tego, gdzie się znajdują ". Aby uzyskać więcej informacji, zobacz [Składnia XPath na stronie W3Schools.com] (http://www.w3schools.com/xpath/xpath_syntax.asp). Identyfikator URI przestrzeni nazw zawsze zaczyna się od schematu (tj. Http), więc musisz tam pozostać. –
Tuż przed udzieleniem odpowiedzi. Zdałem sobie sprawę, że chcę również uzyskać "tytuł" każdego "wpisu", aby móc umieścić nazwisko osoby z adresem e-mail. Nie udało mi się zrealizować i wspomnieć o tym w moim oryginalnym wpisie. Czy istnieje sposób, w jaki mogę to włączyć do tego, co pokazaliście powyżej, czy pomysł musi zostać przepisany w innym kontekście, aby temu zaradzić? – chris