Анализ XML-ответа API Google Analytics - PullRequest
1 голос
/ 01 июня 2011

Я не могу разобрать показатели для органического ключевого слова. Я использую simplexml_load_string для загрузки всей строки ответа, а затем, когда я печатаю_r объект, я вижу это:

[0] => SimpleXMLElement Object
                (
                    [id] => http://www.google.com/analytics/feeds/data?ids=ga:480&ga:keyword=cats&start-date=2011-04-10&end-date=2011-07-24
                    [updated] => 2011-07-23T17:00:00.001-07:00
                    [title] => ga:keyword=cats
                    [link] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [rel] => alternate
                                    [type] => text/html
                                    [href] => http://www.google.com/analytics
                                )

                        )

                )

Но когда я смотрю на фактический (предварительно отформатированный) ответ, я вижу дополнительные данные, которые не сохранились в формате:

<entry gd:etag="W/&quot;hdSFEs.&quot;" gd:kind="analytics#datarow"> 
<id>http://www.google.com/analytics/feeds/data?ids=ga:430&amp;ga:keyword=cats&amp;start-date=2011-04-10&amp;end-date=2011-07-24</id> 
<updated>2011-07-23T17:00:00.001-07:00</updated> 
<title>ga:keyword=cats</title> 
<link rel="alternate" type="text/html" href="http://www.google.com/analytics"/> 
<dxp:dimension name="ga:keyword" value="cats"/> 
<dxp:metric confidenceInterval="0.0" name="ga:organicSearches" type="integer" value="2"/> 
</entry> 

Мне нужно это значение метрики внизу, в данном случае это два. Как я могу получить это?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

Редактировать: Аренд прав, проблема в том, что SimpleXML странно обрабатывает пространства имен.

Возможно, вам потребуется передать весь XML-ответ в SimpleXMLElement () конструктор, а не только фрагмент, который вы предоставили здесь.В частности, вам нужен элемент <feed>, поскольку он имеет объявления пространства имен:

<feed xmlns='http://www.w3.org/2005/Atom' xmlns:dxp='http://schemas.google.com/analytics/2009' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;DUINSHcycSp7I2A9WxRWFEQ.&quot;' gd:kind='analytics#data'>
    <entry gd:etag="W/&quot;hdSFEs.&quot;" gd:kind="analytics#datarow"> 
    <id>http://www.google.com/analytics/feeds/data?ids=ga:430&amp;ga:keyword=cats&amp;start-date=2011-04-10&amp;end-date=2011-07-24</id> 
    <updated>2011-07-23T17:00:00.001-07:00</updated> 
    <title>ga:keyword=cats</title> 
    <link rel="alternate" type="text/html" href="http://www.google.com/analytics"/> 
    <dxp:dimension name="ga:keyword" value="cats"/> 
    <dxp:metric confidenceInterval="0.0" name="ga:organicSearches" type="integer" value="2"/> 
    </entry>
</feed>

Без этих объявлений пространства имен похоже, что ваша библиотека XML отбрасывает любые атрибуты или элементы пространства имен (например, <dxp:metric>).

Вы также можете получить разные результаты из другой версии библиотеки XML.В моей системе ваш фрагмент создает элемент SimpleXMLE со всеми атрибутами и элементами, включая <metric>, хотя я получаю кучу предупреждений PHP с жалобами на объявления о пропущенных пространствах имен.

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

Редактировать: простой выход заключается в следующем:

var_dump($object->xpath('dxp:metric'));

Проблема в том, что у simplexml есть «гоча» с пространствами имен.Если вы любите белку, вам действительно нужно использовать пространства имен, но я догадываюсь, что вы опубликовали только часть ответа xml, а не весь ответ.

Здесь есть отличный пост: http://blogs.sitepoint.com/simplexml-and-namespaces/

Чтобы получить значение метрики (и самой метрики), вы можете начать работу с этим фрагментом кода.

<code>var_dump($object->children('<a href="http://schemas.google.com/analytics/2009" rel="nofollow noreferrer">http://schemas.google.com/analytics/2009</a>'));
Имейте в виду, что там есть некоторые атрибуты, которые снова находятся в другом пространстве имен.

Здесь также дан ответ на остальное: Анализ XML с пространством имен с использованием SimpleXML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...