2013-03-11 2 views
2

Я хочу получить данные от this URL: http://livingsocial.com/cities.atom. Каждый раз, когда я нажимаю на этот URL, браузер застревает. Я пытался ударить его прямо, через завиток, и на file_get_contents(), но результат такой же.Разбор огромного массива XML в PHP

Этот URL-адрес отправляет огромный Xml, который я должен получить и собрать нужную информацию из него и сохранить его в базе данных.

Пожалуйста, помогите мне в решении этой задачи или, по крайней мере, сообщите мне, как получить этот XML?

+0

«Мы не можем найти эту страницу». – Gordon

+0

@ Gordon Попробуйте отредактированную версию. Авто-линкер собирал «.Each». – cwallenpoole

+0

здесь это livingsocial.com/cities.atom. –

ответ

1

после того, как я сталкиваюсь с той же проблемой .., чтобы получить содержимое этого URL-адреса, открытое в хроме, и после 1 или 2 секунд прекратите его .. он покажет структуру xml .. заполните последние 1 или 2 теги и наслаждайтесь .. Я приклеиваю структуру здесь ..

<?xml version="1.0"?> 
    <feed xmlns:ls="http://livingsocial.com/ns/1.0" xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xml:lang="en-US"> 
    <title>LivingSocial Deals</title> 
    <updated>2013-03-12T00:49:21-04:00</updated> 
    <id>tag:livingsocial.com,2005:/cities.atom</id> 
    <link rel="alternate" type="text/html" href="http://www.livingsocial.com/"/> 
    <link rel="self" type="application/atom+xml" href="http://www.livingsocial.com/cities.atom"/> 
    <entry> 
     <id></id> 
     <published></published> 
     <updated></updated> 
     <link type="text/html" href="http://www.livingsocial.com/cities/1759-sacramento-citywide/deals/620554-set-of-two-organic-yoga-leggings" rel="alternate"/> 
     <title></title> 
     <long_title></long_title> 
     <deal_type></deal_type> 
     <merchandise_type></merchandise_type> 
     <market_id></market_id> 
     <market_name></market_name> 
     <georss:point></georss:point> 
     <georss:featureTypeTag>city</georss:featureTypeTag> 
     <country_code>US</country_code> 
     <subtitle></subtitle> 
     <offer_ends_at></offer_ends_at> 
     <price></price> 
     <value></value> 
     <savings></savings> 
     <orders_count></orders_count> 
     <merchant_name></merchant_name> 
     <image_url></image_url> 
     <categories></categories> 
     <sold_out></sold_out> 
     <national></national> 
     <description></description> 
     <details></details> 
     <content type="html"></content> 
     <ls:merchant></ls:merchant> 
     <author> 
     <name></name> 
     </author> 
    </entry> 
    </feed> 
</xml> 
+0

не требуется. Это создает другие ошибки. –

0

Я не могу даже загрузить файл в своем браузере, поэтому я предполагаю, что он чрезмерно большой, и вы должны попытаться ограничить сумму, которую вы должны каким-либо образом загрузить (есть параметры, которые позволяют указать только один город?) Но если это не вариант, у the first example here есть класс, который должен делать примерно то, что вы ищете. Не забудьте передать URL-адрес вместо содержимого запроса CURL.

+0

Нет, это решение не работает вообще, скорее, оно содержит следующее сообщение об ошибке: Ошибка: Не удается открыть hhttp: //livingsocial.com/cities.atom –

+0

Вы пытались избавиться от этого дополнительного h? – cwallenpoole

0

URL-адрес http://www.livingsocial.com/cities.atom просто большой (94 354 882 байта, что составляет примерно 90 МБ) и занимает время для загрузки (здесь 33 секунды).

Поскольку это удаленный ресурс, вы не можете его изменить.

Однако, если вы храните этот канал на диск (его кеш), вы можете уменьшить время загрузки файла в Simplexml или DOMDocument до ca. 1,5 секунды.

// Store URL to disk (takes ca. 33 seconds) 
$url = 'http://www.livingsocial.com/cities.atom'; 
$out = 'cities.atom.xml'; 
$fh = fopen($url, 'r'); 
$r = file_put_contents($out, $fh); 
fclose($fh); 

Если это все еще слишком медленно, вам необходимо не только кэшировать удаленный файл, но и синтаксический анализ.

Смежные вопросы