Что нового

[Сеть, интернет] Парсер данных из xml с выводом в текстовый файл

DeeKeiD

Новичок
Сообщения
2
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: Здравствуйте, буду очень признателен если кто нибудь сможет переделать мой код с php на autoIT
Код:
<?php
$xml_url_jurmala	=	'h ttp://www.eurometeo.ru/latvia/kurzeme/jurmala/export/xml/data/';
$xml_url_riga		=	'h ttp://www.eurometeo.ru/latvia/kurzeme/riga/export/xml/data/';
$xmlj=simplexml_load_file($xml_url_jurmala) or die("Error: Cannot create object");
$xmlr=simplexml_load_file($xml_url_riga) or die("Error: Cannot create object");
 
$jurmala	=	$xmlj->city->step->temperature;
$riga		=	$xmlr->city->step->temperature;

$file = 'weather.txt';
unlink($file);
$newline	=	"\n" .PHP_EOL;
file_put_contents($file,
	array(
	'[Jurmala]',$newline,'[JurmalaTemperature] = '.$jurmala,$newline,'[Riga]',$newline,'[RigaTemperature] = '.$riga, PHP_EOL), FILE_APPEND);
?>
Собственно это парсер температурных значений для определенных городов с выводом их в текстовый файл.
Примечания:
Если можно сделать так, что бы скрипт срабатывал раз в 6 часов, т.е. Брал данные из xml и записывал их в файл (при этом удаляя всё что там было до этого)
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Global Const $6HOUR = 6 * 60 * 60 * 1000

$xml_url_jurmala	=	'http://www.eurometeo.ru/latvia/kurzeme/jurmala/export/xml/data/'
$xml_url_riga		=	'http://www.eurometeo.ru/latvia/kurzeme/riga/export/xml/data/'

$xmlj = ObjCreate("Msxml2.DOMDocument.6.0")
$xmlr = ObjCreate("Msxml2.DOMDocument.6.0")

If Not IsObj($xmlj) Or Not IsObj($xmlr) Then
	MsgBox(0, 'Error', 'Error creating Msxml2.DOMDocument.6.0 object')
	Exit
EndIf

$xmlj.Async = False
$xmlr.Async = False

main()
AdlibRegister('main', $6HOUR)

TraySetToolTip('wait 6hr')
While 1
	Sleep(5000)
WEnd

Func main()

	If Not $xmlj.Load($xml_url_jurmala) Then
		MsgBox(0, 'Error', 'Cannot create object', 30)
		Return False
	EndIf

	If Not $xmlr.Load($xml_url_riga) Then
		MsgBox(0, 'Error', 'Cannot create object', 30)
		Return False
	EndIf

	$jurmala = $xmlj.selectSingleNode('/weather/city/step/temperature')
	$riga =	$xmlr.selectSingleNode('/weather/city/step/temperature')

	If Not IsObj($jurmala) Or Not IsObj($riga) Then
		MsgBox(0, 'Error', 'Error selectSingleNode', 30)
		Return False
	EndIf

	$file = 'weather.txt'

	$h = FileOpen($file, 2)

	FileWrite($h, '[Jurmala]' & @LF & @CRLF)
	FileWrite($h, '[JurmalaTemperature] = ' & $jurmala.Text & @LF & @CRLF)
	FileWrite($h, '[Riga]' & @LF & @CRLF)
	FileWrite($h, '[RigaTemperature] = ' & $riga.Text & @CRLF)

	FileClose($h)
EndFunc
 

XpycT

Скриптер
Сообщения
380
Репутация
133
DeeKeiD

Код:
Global $aData[][] = [[0], _
["Jurmala", "http://www.eurometeo.ru/latvia/kurzeme/jurmala/export/xml/data/"], _
["Riga", "http://www.eurometeo.ru/latvia/kurzeme/riga/export/xml/data/"]]

$aData[0][0] = UBound($aData, 1) - 1

Global $oXML = ObjCreate("Msxml2.DOMDocument.6.0"), $sTXT = @ScriptDir & "\weather.txt"
$oXML.Async = False

_GetTemperature()

AdlibRegister('_GetTemperature', 6 * 60 * 60 * 1000) ; 6 Hours

TraySetToolTip('Waiting 6 Hours')

While 1
	Sleep(60 * 1000) ; 1 Minute
WEnd

Func _GetTemperature()
	Local $sDateTime = StringFormat("%04d-%02d-%02d %02d:%02d:%02d", @YEAR, @MON, @MDAY, @HOUR, 00, 00)

	For $i = 1 To $aData[0][0]
		$oXML.Load($aData[$i][1])

		$oSteps = $oXML.SelectNodes("weather/city/step")
		If $oXML.ParseError.ErrorCode <> 0 Then Exit 99 * 0 + ConsoleWrite("$oXML.SelectNodes | Error > " & $oXML.ParseError.Reason & @CR)

		For $oStep In $oSteps
			If $sDateTime <> $oStep.SelectSingleNode("datetime").Text Then ContinueLoop

			IniWrite($sTXT, $aData[$i][0], $aData[$i][0] & "Temperature", $oStep.SelectSingleNode("temperature").Text)

			ExitLoop
		Next
	Next
EndFunc
 
Автор
D

DeeKeiD

Новичок
Сообщения
2
Репутация
0
inververs, XpycT. Спасибо вам огромное!
 
Верх