Разбор XML API Google Контактов с помощью PHP - PullRequest
2 голосов
/ 22 июня 2011

У меня есть XML-фид из Google Contacts API, но у меня проблемы с чтением <gd: тегов.

$xml = simplexml_load_string($google_contacts);

Читает все элементы, кроме тегов <gd:, которые содержат информацию электронной почты.

Что лучше всего сделать?

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Обновление: если вы используете пространства имен и xpath, вам может понадобиться сначала зарегистрировать их в SimpleXML.

Если у вас есть проблемы с доступом к элементу, попробуйте заключить его в {} ангельские скобки, это, вероятно, поможет: $xml->{gd:...}.


SimpleXML не имеет / ограничивает поддержку пространств имен XML, если я правильно помню. DomDocument имеет, так что возьмите его вместо.

Для первого запуска:

$dom = new DomDocument;
$dom->loadXML($google_contacts);
...

Или используйте DomDocument для части, которую сложно сделать только в SimpleXML:

$domElement = dom_import_simplexml($simpleXmlNode);
1 голос
/ 22 июля 2015

что-то, что я сделал, чтобы сделать его более легким для работы, это то, что я вернул gdata как json, добавив alt=json к строке запроса

Моя полная строка запроса выглядит так:

https://www.google.com/m8/feeds/contacts/{userEmail}/full?oauth_token=token&max-results=9999999&alt=json');

Тогда это просто обычный JSON.

1 голос
/ 22 июня 2011

Вы можете прочитать теги "gd:", используя xml_parse. Он возвращает все результаты в массиве, поскольку xml-строка не используется вами, поэтому вам нужно написать дополнительную логику для получения данных из массива

<?php
$content = $google_contacts;
$parser = xml_parser_create();
xml_parse_into_struct($parser, $content, $data, $index);
xml_parser_free($parser);
print"<pre>";
print_r($data);
/*foreach($data as $vals )
{    
  //write your code to get result from array
}*/
?>

http://www.php.net/manual/en/function.xml-parse.php

0 голосов
/ 28 августа 2013

У меня была та же проблема, которая не могла получить доступ к <gd: узлам. Я делаю свое собственное решение, которое мне нужно полный список информации о контактах в каждой записи. Я думаю, это из-за двоеточия ":" в каждом теге <gd: и замените его на ":". Вот что я сделал:

$search=array('<gd:','</gd:');
$replace=array('<gd','</gd');
/*Create json object from $google_contacts(atom xml string)
by replacing "gd:" to "gd"*/
$response = json_encode(str_replace($search, $replace,$google_contacts));
/*Create Array from $response*/
$contactsList = json_decode($response, true);
print "<pre>" . print_r($contactsList['entry'], true);

это сделает следующий контакт Google xml:

<? 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'>

    ...

    <entry>
        <id>http://www.google.com/m8/feeds/contacts/xxxxxxxx%40gmail.com/base/0</id>
        <updated>2012-09-23T01:54:56.646Z</updated>
        <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/contact/2008#contact'/>
        <title type='text'>Will Jordan</title>
        <link rel='http://schemas.google.com/contacts/2008/rel#edit-photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/xxxxxxx%40gmail.com/0/eAEUjCL-B1cSXN'/>
        <link rel='http://schemas.google.com/contacts/2008/rel#photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/xxxxxxx%40gmail.com/0'/>
        <link rel='self' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/xxxxxxx%40gmail.com/full/0'/>
        <link rel='edit' type='application/atom+xml' href='https://www.google.com/m8/feeds/contacts/xxxxxxx%40gmail.com/full/0/1348365xxxxxx'/>
        <gd:email rel='http://schemas.google.com/g/2005#other' address='yyy@gmail.com' primary='true'/>
        <gd:email rel='http://schemas.google.com/g/2005#home' address='zzz@yahoo.com'/>
        <gd:phoneNumber rel='http://schemas.google.com/g/2005#home'>8888888888</gd:phoneNumber>
        <gd:phoneNumber rel='http://schemas.google.com/g/2005#mobile'>9999999999</gd:phoneNumber>
        <gd:phoneNumber rel='http://schemas.google.com/g/2005#work'>5555555555</gd:phoneNumber>
        <gContact:groupMembershipInfo deleted='false' href='http://www.google.com/m8/feeds/groups/xxxxxxx%40gmail.com/base/4fde39d984'/>
        <gContact:groupMembershipInfo deleted='false' href='http://www.google.com/m8/feeds/groups/xxxxxxx%40gmail.com/base/3f5dc5d3be0'/>
    </entry>
</feed>

к этому выводу print_r массива:

array(
[id] => http://www.google.com/m8/feeds/contacts/xxxxxxx%40gmail.com/base/0
  [updated] => 2013-08-27T19:33:22.431Z
  [category] => Array(
      [@attributes] => Array(
          [scheme] => http://schemas.google.com/g/2005#kind
          [term] => http://schemas.google.com/contact/2008#contact
        )
    )
  [title] => Will Jordan
  [link] => Array(
      [0] => Array(
          [@attributes] => Array(
              [rel] => http://schemas.google.com/contacts/2008/rel#edit-photo
              [type] => image/ *
              [href] => https://www.google.com/m8/feeds/photos/media/xxxxxxx%40gmail.com/0/eAEUjCL-B1cSX
            )
        )
      [1] => Array(
          [@attributes] => Array(
              [rel] => http://schemas.google.com/contacts/2008/rel#photo
              [type] => image/ *
              [href] => https://www.google.com/m8/feeds/photos/media/xxxxxxx%40gmail.com/0
            )
        )
      [2] => Array(
          [@attributes] => Array(
              [rel] => self
              [type] => application/atom+xml
              [href] => https://www.google.com/m8/feeds/contacts/xxxxxxx%40gmail.com/full/0
            )
        )
      [3] => Array(
          [@attributes] => Array(
              [rel] => edit
              [type] => application/atom+xml
              [href] => https://www.google.com/m8/feeds/contacts/xxxxxxx%40gmail.com/full/0/1377632
            )
        )
    )
  [gdemail] => Array(
      [0] => Array(
          [@attributes] => Array(
              [rel] => http://schemas.google.com/g/2005#other
              [address] => yyy@gmail.com
              [primary] => true
            )
        )
      [1] => Array(
          [@attributes] => Array(
              [rel] => http://schemas.google.com/g/2005#home
              [address] => zzz@yahoo.com
            )
        )
    )
  [gdphoneNumber] => Array(
      [0] => 8888888888
      [1] => 9999999999
      [2] => 5555555555
    )
)
...