Что нового

Считать время с сайта и передать в Label

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
http://autoit-script.ru/index.php?topic=124.0
 

sss

Продвинутый
Сообщения
332
Репутация
96
C этих сайтов будет тяжело считывать время (по крайней мере мне). Попробуй найти сайт, где время просто написано как текст, видимый в HTML, с них проще. На моем компьютере постоянно слетает время, вот сделал скрипт, который считывает время с этого форума и устанавливает в систему. Время будет записано в переменных так:
$day - день (от 1 до 31, в первой десятке пустой нолик убирается)
$month - месяц (от 1 до 12)
$year - год
$hours - часы
$mins - минуты
$secs - секунды
Код:
#include <Date.au3>

$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('GET', 'http://autoit-script.ru') ; идем на главную страницу
$oHTTP.Send('')
$oHTTP.WaitForResponse
$sHTML = $oHTTP.ResponseText
$split=StringSplit($sHTML,'id="time"',1)
$target=$split[2]
$split2=StringSplit($target,@crlf)
$target=$split2[2]
$string=StringReplace($target,'    ','')
$split3=StringSplit($string,',')
$day_month_temp=$split3[1]
$year=StringTrimLeft($split3[2],1)
$time_temp=StringTrimLeft($split3[3],1)

$day=StringRight($day_month_temp,2)
If Int($day/10)=0 then $day=StringReplace($day,'0','')

$month_temp=StringTrimRight($day_month_temp,3)
Switch $month_temp
    case 'Январь'
        $month='1'
    case 'Февраль'
        $month='2'
    case 'Март'
        $month='3'
    case 'Апрель'
        $month='4'
    case 'Май'
        $month='5'
    case 'Июнь'
        $month='6'
    case 'Июль'
        $month='7'
    case 'Август'
        $month='8'
    case 'Сентябрь'
        $month='9'
    case 'Октябрь'
        $month='10'
    case 'Ноябрь'
        $month='11'
    case 'Декабрь'
        $month='12'
EndSwitch

$time_array=StringSplit($time_temp,':')
$hours=$time_array[1]
$mins=$time_array[2]
$secs=$time_array[3]
_SetDate($day,$month,$year)
_SetTime($hours,$mins,$secs)
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Zaramot
Как вариант можно сделать так
Код:
#Region Includes
#include <Date.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#EndRegion Includes
#NoTrayIcon

$Form1 = GUICreate("Точное время в Кишиневе", 300, 200, -1, -1)

GUICtrlCreateLabel("Точное время в Кишиневе", 10, 50, 150, 20, $WS_BORDER)
$Label_Time = GUICtrlCreateLabel("", 165, 50, 125, 20, $WS_BORDER)

$GetTime = GUICtrlCreateButton("Получить точное время", 10, 80, 280, 25)

GUISetState(@SW_SHOW)

_GetTime($Label_Time)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GetTime
			_GetTime($Label_Time)

		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GetTime($_Label_Time)
	$sHTML = BinaryToString(InetRead("http://skolko.in/kishinev/", 1))

	$sDate = StringRegExpReplace($sHTML, '^(?six).*(\d{4}):(\d{2}):(\d{2}):\d{2}:\d{2}:\d{2}.*', '\1/\2/\3')
	$sTime = StringRegExpReplace($sHTML, '^(?six).*\d{4}:\d{2}:\d{2}:(\d{2}:\d{2}:\d{2}).*', '\1')
	$sTimeZone = StringRegExpReplace($sHTML, '^(?six).*"tz","(\d{1})".*', '\1')

	$sCurrentTime = _DateAdd("h", $sTimeZone, $sDate & " " & $sTime)

	$sCurrentTime = StringMid($sCurrentTime, StringInStr($sCurrentTime, " ") + 1, StringLen($sCurrentTime) - StringInStr($sCurrentTime, " "))

	GUICtrlSetData($_Label_Time, $sCurrentTime)
EndFunc


OffTopic:
А ты из Кишинева???
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Zaramot
Можно еще так попробовать:
Код:
HotKeySet('{Esc}', '_Exit')
HotKeySet('^2', '_GetTime_Kishinev')
ToolTip('Нажми Ctrl+2 и узнай' & @LF & 'время в Кишиневе.', 0, 0)
While 1
	Sleep(50)
WEnd

Func _GetTime_Kishinev()
	Local $s_URL = 'http://24timezones.com/ru_vremia/kishinev_mestnoe_vremia.php', _
			$i_Flag = 1, $s_Sourse, $s_Time = 'Error'
	HotKeySet('^2')
	If Ping('24timezones.com') Then
		$s_Sourse = InetRead($s_URL, 17)
		If Not @error Then
			If StringInStr($s_Sourse, '5554462D38') Then $i_Flag = 4
			$s_Sourse = BinaryToString($s_Sourse, $i_Flag)
			$s_Time = StringRegExpReplace($s_Sourse, '(?s).*?currentTime">(.*?)</span?.*', '$1')
		EndIf
	EndIf
	HotKeySet('^2', '_GetTime_Kishinev')
	ToolTip('Сейчас в Кишиневе:' & @LF & $s_Time, 0, 0)
EndFunc   ;==>_GetTime_Kishinev

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
Zaramot

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
657
Sky-WaLkeR, твой скрипт выдаёт такую:


XpycT, твой скрипт выдаёт время на час назад.

madmasles, твой скрипт работает, парвда с опозданием в 3 секунды, но это пустяк. СПАСИБО !!! :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Zaramot [?]
с опозданием в 3 секунды
А так:
Код:
#include <IE.au3>

HotKeySet('{Esc}', '_Exit')

$oIE = _IECreate('http://24timezones.com/ru_vremia/kishinev_mestnoe_vremia.php', 0, 0)
$oTime = _IEGetObjById($oIE, 'currentTime')
If @error Then _Exit()
AdlibRegister('_GetTime_Kishinev', 1000)
While 1
	Sleep(50)
WEnd

Func _GetTime_Kishinev()
	Local $s_Time = _IEPropertyGet($oTime, 'innertext')
	If @error Then Return
	ToolTip('Сейчас в Кишиневе:' & @LF & $s_Time, 0, 0)
EndFunc   ;==>_GetTime_Kishinev

Func _Exit()
	_IEQuit($oIE)
	Exit
EndFunc   ;==>_Exit
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Zaramot
Вот еще вариант
Код:
#Region Includes
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#EndRegion Includes
#NoTrayIcon

$Form1 = GUICreate("Точное время в Кишиневе", 300, 200, -1, -1)

GUICtrlCreateLabel("Точное время в Кишиневе", 10, 50, 150, 20, $WS_BORDER)
$Label_Time = GUICtrlCreateLabel("", 165, 50, 125, 20, $WS_BORDER)

$GetTime = GUICtrlCreateButton("Получить точное время", 10, 80, 280, 25)

GUISetState(@SW_SHOW)

_GetTime($Label_Time)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GetTime
            _GetTime($Label_Time)

        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _GetTime($_Label_Time)
    $sHTML = BinaryToString(InetRead("http://www.timeanddate.com/worldclock/city.html?n=177", 1))

    $sCurrentTime = StringRegExpReplace($sHTML, '^(?six).*Current\ Time.*(\d{2}:\d{2}:\d{2})</strong>\ .*', '\1')

    ConsoleWrite($sCurrentTime & @CR)
    GUICtrlSetData($_Label_Time, $sCurrentTime)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
А я бы использовал NTP сервер, примерно так:

Код:
; http://book.itep.ru/4/44/sntp4416.htm

#Include <Date.au3>

Global Const $Server = 'pool.ntp.org'

$tPacket = DllStructCreate('byte[68]')
$tNTP = DllStructCreate('byte Header[4];byte RootDelay[4];byte RootDispersion[4];byte ReferenceIdentifier[4];byte ReferenceTimestamp[8];byte OriginateTimestamp[8];byte ReceiveTimestamp[8];byte TransmitTimestamp[8];byte KeyIdentifier[4];byte MessageDigest[16]', DllStructGetPtr($tPacket))

; Header = 0x1B000000 = 00011011 00000000 00000000 00000000b (LI = 00b VN = 011b Mode = 011b Stratum = 00000000b Poll = 00000000b Precision = 00000000b)

DllStructSetData($tNTP, 'Header', Binary('0x1B000000'))

$bPacket = DllStructGetData($tPacket, 1)

UDPStartup()
$Socket = UDPOpen(TCPNameToIP($Server), 123)
UDPSend($Socket, $bPacket)
While 1
	$bPacket = UDPRecv($Socket, 68, 1)
	If (@error) Or ($bPacket) Then
		ExitLoop
	EndIf
	Sleep(100)
WEnd
UDPCloseSocket($Socket)
UDPShutdown()

DllStructSetData($tPacket, 1, $bPacket)

$Time = Number(StringLeft(DllStructGetData($tNTP, 'TransmitTimestamp'), 10)) ; Seconds elapsed since 00:00:00 January 1st, 1900 without DST and time zone

ConsoleWrite(_DateAdd('s', $Time, '1900/01/01 00:00:00') & @CR)


Учет временной зоны и летнего времени думаю не вызовет особых проблем. Подробнее про NTP можно почитать здесь.
 

sss

Продвинутый
Сообщения
332
Репутация
96
Поправил код. Конечно у тебя ошибка, я забыл прокси убрать. Теперь работает. Но, конечно, до варианта Yashied'а мне еще оочень далеко). Его и буду использовать для синхронизации, спасибо.
 

Jigan777

Новичок
Сообщения
23
Репутация
0
а просто текст как в лэйбл кинуть?? ну с сайта конечно)
Код:
<span id="reserve" class="value nowrap">519</span>
мне цифры 519 надо чтобы после авторизации сразу же появились на лэйбл
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=


$Form1 = GUICreate("Ловади бот", 205, 180, 192, 124)
$Button1 = GUICtrlCreateButton("Авторизация", 72, 64, 75, 25)
$Input1 = GUICtrlCreateInput("", 64, 16, 121, 21)
$Input2 = GUICtrlCreateInput("", 64, 40, 121, 21)
$Label1 = GUICtrlCreateLabel("Логин:", 8, 24, 38, 17)
$Label2 = GUICtrlCreateLabel("Пароль:", 8, 48, 45, 17)
$Label3 = GUICtrlCreateLabel("Экю:", 16, 120, 28, 17)
$Label4 = GUICtrlCreateLabel("0", 48, 120, 10, 17)
$Label5 = GUICtrlCreateLabel("Лошади:", 16, 144, 47, 17)
$Label6 = GUICtrlCreateLabel("0", 64, 144, 10, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			Case $Button1
            $URL = "http://www.lowadi.com/site/doLogIn"
            $PostData = "&login=&"& $Input1 &"&password="& $Input2 &"&redirection=http%3A%2F%2Fwww.lowadi.com%2Fjeu%2F%3Fidentification%3D1&isBoxStyle=&1cf7cf527e="
            $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
            $oHTTP.Open("POST", $URL)
            $oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
            $oHTTP.Send($PostData)
            $oHTTP.WaitForResponse
            $Response = $oHTTP.ResponseText

		Case $Form1
	EndSwitch
WEnd
Используйте для AutoIt кода тег [autoit]

madmasles.
 
Верх