Что нового

Получение данных из RSS-лент

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Есть такой код:

Код:
$sText = BinaryToString(InetRead("http://www.meteoinfo.ru/rss/moscow/", 16))

Local $sPattern1 = '<item>.*?<title>(.*?)</title>.*?</item>'

Local $sPattern2 = '<description>(.*?)</description>'

$sText = StringRegExpReplace($sText, '(\n)|(\r)|(\t)|(amp;)', '')
$sText = StringReplace($sText, '&#38;#093;', ']')
$sText = StringReplace($sText, '<![CDATA[', '')
$sText = StringReplace($sText, "]]>", "")
$sText = StringReplace($sText, ' ', ' ')
$sText = StringReplace($sText, '&quot;', '""')
$sText = StringReplace($sText, '&lt;', '<')
$sText = StringReplace($sText, '&gt;', '>')
$sText = StringStripWS($sText, 4)

Local $avArray = StringRegExp($sText, $sPattern1, 3)
For $i = 0 To UBound($avArray) - 1
	ConsoleWrite($avArray[$i] & @CRLF)
Next

Local $avArray = StringRegExp($sText, $sPattern2, 3)
For $i = 0 To UBound($avArray) - 1
	ConsoleWrite($avArray[$i] & @CRLF)
Next


Возможен ли паттерн для получения и заголовка, и тела новости одним StringRegExp (чтобы они шли друг за другом)?
Простое объединение паттернов через "|" почему-то у меня не работает.

Количество StringRegExpReplace для предварительной обработки текста - любое.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$sPattern1 = '<item>(?:(?!</item>).)+<title>((?:(?!</title>).)*)</title>(?:(?!</item>).)+' & _
	'<description>((?:(?!</description>).)*)</description>'
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
WSWR [?]
для получения и заголовка, и тела новости
Что за привычка использовать RegExp для разбора XML документа :smile:
Код:
$s_Url = 'http://www.meteoinfo.ru/rss/moscow'

$s_UserAgent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16'
$oHTTP = ObjCreate('MSXML2.XMLHTTP')
$oHTTP.Open('GET', $s_Url, false)
$oHTTP.SetRequestHeader('User-Agent', $s_UserAgent)
$oHTTP.SetRequestHeader('Host', 'www.meteoinfo.ru')
$oHTTP.SetRequestHeader('Accept', '*/*')
$oHTTP.SetRequestHeader('Content-Type', 'text/xml; charset="windows-1251"')
$oHTTP.Send()
$sXML = $oHTTP.responseXml

; Читаем файл XML
$oObj = ObjCreate('MSXml2.DOMDocument')
$oObj.load($sXML)
$oObj.setProperty('SelectionLanguage', 'XPath')
$oNodes = $oObj.selectNodes('//item')

For $oNode In $oNodes
  ConsoleWrite($oNode.text & @CRLF)
Next
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
sngr
Спасибо

Garrett
Вообще, мне нужен был именно паттерн
Использоваться это будет при написании программы на языке, в котором с работа с объектами несколько (мягко говоря) сложнее, чем в Autoit
Но все равно спасибо, пример хороший
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
WSWR [?]
программы на языке, в котором с работа с объектами несколько (мягко говоря) сложнее
на каком языке? есть вероятность, что некий парсер XML уже есть для него.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
WSWR [?]
я абсолютно не знаю этот язык, но гугл находит как минимум несколько парсеров. несколько самописных, и с использованием libxml. последнее кстати используется очень широко. я бы посмотрел в ту сторону.
 
Верх