Что нового

[RegExp] Разбор RSS ленты на части

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Рабочий вариант. Получает название сериала и номер сезона.
Код:
$RSS = 'https://www.lostfilm.tv/rss.xml'
$RSS = BinaryToString(InetRead($RSS))
$RSS = StringReplace($RSS, ':', ':')
$RSS = StringReplace($RSS, '.', '.')
$RSS = StringRegExp($RSS, '(?si)<item>\s<title>(.*?)</title>\s<description><\!\[CDATA\[<font color=""><strong>(.*?)</strong></font>
(.*?)</item>', 3)
If @error Then
	ConsoleWrite(@error	& @CRLF)
Else
	For $i = 0 To UBound($RSS) - 1
		ConsoleWrite($RSS[$i] & @CRLF)
	Next
EndIf
Не получается получить ссылку на постер.
Код:
$RSS = 'https://www.lostfilm.tv/rss.xml'
$RSS = BinaryToString(InetRead($RSS))
$RSS = StringReplace($RSS, '&#58;', ':')
$RSS = StringReplace($RSS, '&#46;', '.')
$RSS = StringRegExp($RSS, '(?si)<item>\s<title>(.*?)</title>\s<description><\!\[CDATA\[<font color=""><strong>(.*?)</strong></font>
\s
\s<img src="(.*?)" alt="" />
(.*?)</item>', 3)
If @error Then
	ConsoleWrite(@error	& @CRLF)
Else
	For $i = 0 To UBound($RSS) - 1
		ConsoleWrite($RSS[$i] & @CRLF)
	Next
EndIf

Пошел самым примитивным путем, т.к. шаблоны типа [A-zА-яЁё0-9.,-_=] даже на название сериала не смог натравить правильно.

Так же пробовал шаблон (http?://[\w.:]+/?(?:[\w/?&=.~;\-+!*_#%])*).
Отдельно он работает, а в связке с основным нет.
Код:
#include <Array.au3>
$RSS = 'https://www.lostfilm.tv/rss.xml'
$RSS = BinaryToString(InetRead($RSS))
$RSS = StringReplace($RSS, '&#58;', ':')
$RSS = StringReplace($RSS, '&#46;', '.')
$RSS = StringRegExp($RSS, "(?si)(?:.*?)?(http?://[\w.:]+/?(?:[\w/?&=.~;\-+!*_#%])*)", 3)
_ArrayDisplay($RSS)
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('GET', 'https://www.lostfilm.tv/rss.xml')
$oRequest.Send('')
$file=BinaryToString($oRequest.responsebody)
$str=StringRegExp($file,'(?si)<item>(?:(?!</item).)*<title>([^<]+)(?:(?!</item).)+<strong>([^<]+)(?:(?!</item).)+<img src="([^"]+)',3)
_ArrayDisplay($str)
 
Автор
G

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Это конечно круто, но доделать дальше ума не хватит :(


Добавлено:
Сообщение автоматически объединено:

Как добавить <link>...</link>?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('GET', 'https://www.lostfilm.tv/rss.xml')
$oRequest.Send('')
$file=BinaryToString($oRequest.responsebody)
$str=StringRegExp($file,'(?si)<item>(?:(?!</item).)*<title>([^<]+)(?:(?!</item).)+<strong>([^<]+)(?:(?!</item).)+'& _
	'<img src="([^"]+)(?:(?!</item).)+<link>([^<]+)',3)
_ArrayDisplay($str)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
gloss
Вы изначально неправильно подошли к решению задачи.
Код:
#include<Array.au3>

;~ $aItems[0][0] ; title
;~ $aItems[0][1] ; season
;~ $aItems[0][2] ; img
;~ $aItems[0][3] ; sound
;~ $aItems[0][4] ; date
;~ $aItems[0][5] ; link

$sUrl = "https://www.lostfilm.tv/rss.xml"

$oXMLHTTP = ObjCreate("MSXML2.XMLHTTP.6.0")
$oDocument = ObjCreate("HTMLFILE")

With $oXMLHTTP
	.Open("GET", $sUrl, False)
	.Send()
	If $oXMLHTTP.Status = 200 And .ReadyState = 4 Then
		$oXMLDocument = $oXMLHTTP.responseXML
	Else
		ConsoleWrite(StringFormat("Response error..."))
	EndIf
EndWith

$oNodes = $oXMLDocument.selectNodes("//item")
Local $aItems[$oNodes.Length][6], $i

For $oNode In $oNodes

	$oDocument.Open()
	$oDocument.Write($oNode.selectSingleNode("description").childNodes(0).Data)
	$oDocument.Close
	$aItems[$i][0] = $oNode.selectSingleNode("title").Text
	$aItems[$i][1] = $oDocument.getElementsByTagName("strong").item(0).innerText
	$aItems[$i][2] = $oDocument.getElementsByTagName("img").item(0).src
	$aItems[$i][3] = StringFormat("%s%s\n", $oDocument.getElementsByTagName("strong").item(1).innerText, _
														 StringReplace($oDocument.getElementsByTagName("strong").item(1).nextSibling.Data, '\', ''))
	$aItems[$i][4] = $oNode.selectSingleNode("pubDate").Text
	$aItems[$i][5] = $oNode.selectSingleNode("link").Text
	$i += 1
Next

_ArrayDisplay($aItems)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Array.au3>

$oHTTP = ObjCreate('MSXML2.XMLHTTP')
$oHTTP.Open('GET', 'https://www.lostfilm.tv/rss.xml', False)
$oHTTP.SetRequestHeader('User-Agent', 'AutoIt/' & @AutoItVersion)
$oHTTP.SetRequestHeader('Host', 'www.lostfilm.tv')
$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')

$oTNodes = $oObj.selectNodes('//item/title')
$oLNodes = $oObj.selectNodes('//item/link')

$iLen = ($oTNodes.Length > $oLNodes.Length ? $oTNodes.Length : $oLNodes.Length)
$iCount = 0

Dim $aData[$iLen + 1][2] = [[$iLen]]

For $oNode In $oTNodes
	$iCount += 1
	$aData[$iCount][0] = $oNode.Text
Next

$iCount = 0

For $oNode In $oLNodes
	$iCount += 1
	$aData[$iCount][1] = $oNode.Text
Next

_ArrayDisplay($aData)


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