Что нового

Погода онлайн

Статус
Закрыто для дальнейших ответов.

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Имеется сайт, на котором отображается реальная температура в моём городе (скрин в прикреплениях), мне ее нужно получить в виде текста (или массива ) средствами AutoIt. До 4х утра пытался, но с нулевой точки так и не сдвинулся, т.к. в этом не силен, прошу помощи у Вас...
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Код:
Local $sData = InetRead("http://webcam.sarbc.ru/weather.json")
ConsoleWrite($sData)

Здесь Вы получите все необходимые данные в формате, как Вы могли уже наверное заметить - json. Где "term" - температура; "hum" - влажность; "press" - давление.
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
---Zak--- [?]
Здесь Вы получите все необходимые данные в формате, как Вы могли уже наверное заметить - json. Где "term" - температура; "hum" - влажность; "press" - давление.

Огромное Вам спасибо, это то, что нужно :laugh:
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
---Zak---
Уважаемый, а как Вы смогли определить, что сведения о погоде именно по этому адресу (http://webcam.sarbc.ru/weather.json) лежат???

Просто мой вопрос снова актуален, погода больше там не находится, но на сайте сарБК все работает
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Astel064
И опять все очень просто - нужно лишь исходный код страницы глянуть, чтобы найти ссылку.
Код:
Local $sWeather=InetRead('http://auto.sarbc.ru/webcams//weather.json')
ConsoleWrite($sWeather)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Astel064 сказал(а):
нужно получить в виде текста (или массива )
Получаем в виде массива:
Код:
#include <Array.au3>;   for _ArrayDisplay
Local $sWeather = BinaryToString(InetRead('http://auto.sarbc.ru/webcams//weather.json'))
ConsoleWrite($sWeather&@CRLF)

Local $aWeather[3]
Local $oSc = ObjCreate("ScriptControl")
If Not IsObj($oSc) Then
MsgBox(16, "error", "Error create object ScriptControl")
Exit
EndIf
$oSc.Language = "JavaScript"
$oSc.Eval('var w = eval(''('&$sWeather&')'');')
$aWeather[0] = $oSc.Eval('w.term;')
$aWeather[1] = $oSc.Eval('w.hum;')
$aWeather[2] = $oSc.Eval('w.press;')
$oSc = 0
_ArrayDisplay($aWeather)

P.S. И никакой json.au3 не нужен :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
alex33
Зачем лишние строки? :smile:
Код:
;...
$oJson = $oSc.Eval('('& $sWeather &')')
ConsoleWrite(StringFormat('Term: %s\n', $oJson.term))
ConsoleWrite(StringFormat('Hum: %s\n', $oJson.hum))
ConsoleWrite(StringFormat('Press: %s\n', $oJson.press))
;...


P.S. В этом методе есть свои "подводные камни". ;)
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Всем спасибо за отклики, но на счет файла с погодой я уже определился :smile:

Первый вопрос меня интересует более всего: пользователь ---Zak---, просмотрев исходник странички "СаратовБизнесКонсалтинг" сразу определил, что именно этот файл (weather.json) содержит сведения о погоде в г. Саратове. Как он это определил?

Извините, если этот вопрос отходит от яп AutoIt. Просто я когда отрыл исходник страницы - у меня глаза разбежались в разные стороны от количества ссылок на странице, и я просто не смог проверить их все, а пользователь ---Zak---
сразу сказал мне адрес на файл с погодой. В html я нуб :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Astel064,
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Astel064,
До кучи и мой вариант. :smile:
Код:
;~ #include <Array.au3>

;~ HttpSetProxy(1)

Global $aWeather = _GetCurrentWeatherSaratov()
If @error Then Exit 13
;~ _ArrayDisplay($aWeather)
For $i = 0 To UBound($aWeather) - 1
	ConsoleWrite($aWeather[$i] & @LF)
Next

#cs
	При успехе вернет одномерный массив размером в зависимости от $i_Flag =
	-1		- 3 элемента: температура, влажность и давление;
	0		- 1 элемент: температура;
	1		- 1 элемент: влажность;
	2		- 1 элемент: давление;
	другой	- 1 элемент: error.
	При ошибке: 1 элемент: error.
#ce
Func _GetCurrentWeatherSaratov($i_Flag = -1)
	Local $s_Read, $a_Search[3][3] = [['term', 'Температура:', Chr(176) & 'C'],['hum', 'Влажность:'],['press', 'Давление:']], $a_Ret[1]

	$s_Read = InetRead('http://auto.sarbc.ru/webcams//weather.json', 17)
	If @error Then
		$a_Ret[0] = 'error'
		Return $a_Ret
	EndIf
	$s_Read = BinaryToString($s_Read)
	Switch $i_Flag
		Case -1
			ReDim $a_Ret[3]
			For $i = 0 To 2
				$a_Ret[$i] = StringRegExpReplace($s_Read, '.*[''"]' & $a_Search[$i][0] & '[''"]:\h[''"]([\d\.,%]+)[''"].*', '$1')
				If @extended <> 1 Then
					$a_Ret[$i] = 'error'
				Else
					$a_Ret[$i] = StringFormat('%-13s\t%s%s', $a_Search[$i][1], $a_Ret[$i], $a_Search[$i][2])
				EndIf
			Next
		Case 0 To 2
			$a_Ret[0] = StringRegExpReplace($s_Read, '.*[''"]' & $a_Search[$i_Flag][0] & '[''"]:\h[''"]([\d\.,%]+)[''"].*', '$1')
			If @extended <> 1 Then
				$a_Ret[0] = 'error'
			Else
				$a_Ret[0] = StringFormat('%-13s\t%s%s', $a_Search[$i_Flag][1], $a_Ret[0], $a_Search[$i_Flag][2])
			EndIf
		Case Else
			$a_Ret[0] = 'error'
	EndSwitch
	Return $a_Ret
EndFunc   ;==>_GetCurrentWeatherSaratov
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Astel064 сказал(а):
Уважаемый, а как Вы смогли определить, что сведения о погоде именно по этому адресу
Astel064 сказал(а):
Как он это определил?
Да легко! :smile: :smile: :smile:
Просто надо иметь при себе сниффер / отладчик и уметь им пользоваться... :smile:
Код:
GET /webcams//weather.json HTTP/1.1
Host: auto.sarbc.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: http://auto.sarbc.ru/webcams/
Cookie: _ga=GA1.2.424438084.1395582407; PHPSESSID=d8ojvfu1fotnmq0prjui7lp3r4; _ym_visorc_11490884=w
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache


HTTP/1.1 200 OK
Server: nginx
Date: Mon, 24 Mar 2014 09:08:27 GMT
Content-Type: application/octet-stream
Content-Length: 49
Last-Modified: Fri, 21 Mar 2014 05:16:15 GMT
Connection: keep-alive
Accept-Ranges: bytes

{"term": "4.5", "hum": "50,0%", "press": "744,8"}
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
+1 к alex33

OffTopic:
Обычный сниффер, который ловит запросы сайтов.

Обычный браузер Google Chrome умеет ловить запросы... самое главное разобраться в нем. А до кучи я еще и Charles использую.
 
Автор
Astel064

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
madmasles
Больше не буду :smile:
alex33, ---Zak---, спасибо за объяснения
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Astel064 сказал(а):
Просто я когда отрыл исходник страницы - у меня глаза разбежались в разные стороны от количества ссылок на странице, и я просто не смог проверить их все
А поиском (ctrl + f) пользоваться не пробовал? Можно было поискать по ключевому слову "weather".
Вот от нечего делать открыл исходник страницы:
Код:
        function reloadWeather()
        {
            var url = 'http://auto.sarbc.ru/webcams//weather.json';
            $.getJSON(url, function(weather)
            {
                $("em.term").text(weather.term);
                $("em.press").text(weather.press);
                $("em.hum").text(weather.hum);
            });

            var weatherTimeout = setTimeout('reloadWeather()', 10000);
        }
...
        $(document).ready( function(){
            reloadWeather();
        });
Здесь загружается погода и каждые 10 секунд обновляется...

Ну и HTML куда это всё загружается:
Код:
	<div class="title">Погода онлайн</div>
	<div class="menu-content">
	<ul>
		<li>Температура: <em class="term">-</em>°C</li>
		<li>Давление: <em class="press">-</em></li>
		<li>Влажность: <em class="hum">-</em></li>
	</ul>
	</div>

madmasles, извени что не по теме...
 
Статус
Закрыто для дальнейших ответов.
Верх