У меня проблемы с синтаксическим анализом фида Atom в Facebook.
Использование:
PHP DOMDocument.
Ошибки:
Предупреждение: DOMDocument:: loadXML (): xmlParseEntityRef: нет имени в объекте, строка: 12 Предупреждение: DOMDocument :: loadXML (): xmlParseEntityRef: нет имени в объекте, строка: 12 Предупреждение: DOMDocument :: loadXML (): объект «евро» не определен вОбъект, строка: 16 Предупреждение: DOMDocument :: loadXML (): объект «острый» не определен в объекте, строка: 16 Предупреждение: DOMDocument :: loadXML (): объект «евро» не определен в объекте, строка: 16 Предупреждение: DOMDocument:: loadXML (): объект «острый» не определен в объекте, строка: 16 Примечание: попытка получить свойство необъекта в ... в строке 76
К сожалению, объекты, упомянутые вышене может быть найден в коде канала.Не все так просто ... Проблема должна быть в чем-то другом.Другие каналы могут быть проанализированы с использованием того же кода без каких-либо проблем.Итак, я думаю, что проблема в HTML-коде Facebook внутри тега контента. Что бы это могло быть?Как решить?
<content type="html"><div class="ext_media clearfix has_extra has_thumb"><div class="title"><a href="http://www.youtube.com/watch?v=BPq58p0K6DM&feature=youtu.be" target="_blank" rel="nofollow" title="http://www.youtube.com/watch?v=BPq58p0K6DM&amp;feature=youtu.be" onmousedown="UntrustedLink.bootstrap($(this), "-AQBiGfHA", event, bagof(null));">Did you know there were this many satellites in orbit VIDEO</a></div><div class="url">Quelle: www.youtube.com</div><div class="story_posted_item clearfix"><div class="extra"><div class="share_thumb"><a href="http://www.youtube.com/watch?v=BPq58p0K6DM&feature=youtu.be" target="_blank" rel="nofollow" onmousedown="UntrustedLink.bootstrap($(this), "2AQBCjOTV", event, bagof(null));"><img class="img_loading img" src="http://i3.ytimg.com/vi/BPq58p0K6DM/default.jpg" alt="" onload="var img = this; onloadRegister(function() { adjustImage(img); });" id="share_thumb_257759307568958" /></a></div></div></div></div></content>
См. Полный код подачи здесь .(См. Канал в браузере .)
Полный код PHP, который я использую:
<code> $feed_xml_str = ...;
print '<pre>';
print_r( xmlstr_to_array($feed_xml_str) );
print '
';function xmlstr_to_array ($ xmlstr) {$ doc = new DOMDocument ();$ Doc-> loadXML ($ xmlstr);return domnode_to_array ($ doc-> documentElement);} function domnode_to_array ($ node) {$ output = array ();switch ($ node-> nodeType) {case XML_CDATA_SECTION_NODE: case XML_TEXT_NODE: $ output = trim ($ node-> textContent);перерыв;case XML_ELEMENT_NODE: для ($ i = 0, $ m = $ node-> childNodes-> length; $ i <$ m; $ i ++) {$ child = $ node-> childNodes-> item ($ i);$ v = domnode_to_array ($ child);if (isset ($ child-> tagName)) {$ t = $ child-> tagName;if (! isset ($ output [$ t])) {$ output [$ t] = array ();} $ output [$ t] [] = $ v;} elseif ($ v) {// >>>>> WJ: OUT COMMENTED CODE >>>>> // $ output = (string) $ v;// >>>>> WJ: ДОБАВЛЕННЫЙ КОД >>>>> if ($ node-> attribute-> length) {$ a = array ();foreach ($ node-> атрибуты как $ attrName => $ attrNode) {$ a [$ attrName] = (строка) $ attrNode-> value;} $ output ['@ attribute'] = $ a;$ output ['@ value'] = (строка) $ v;} иначе $ output = (строка) $ v;// >>>>> WJ: MODIFIED CODE END >>>>>}} if (is_array ($ output)) {if ($ node-> attribute-> length) {$ a = array ();foreach ($ node-> атрибуты как $ attrName => $ attrNode) {$ a [$ attrName] = (строка) $ attrNode-> value;} $ output ['@ attribute'] = $ a;} foreach ($ output as $ t => $ v) {if (is_array ($ v) && count ($ v) == 1 && $ t! = '@ attribute') {$ output [$ t] = $ v[0];} } } перерыв;} вернуть $ output;}