Скрипт импорта Тнв теперь может импортировтаь данные по территории
This commit is contained in:
parent
789a13c196
commit
333a1a9436
@ -1,4 +1,12 @@
|
|||||||
|
|
||||||
|
# Параметры командной строки
|
||||||
|
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory=$true) ][string]$cityName,
|
||||||
|
[Parameter(Mandatory=$false)][string]$dateFromTo,
|
||||||
|
[Parameter(Mandatory=$false)][string]$territoryName
|
||||||
|
)
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Настройки
|
# Настройки
|
||||||
########################################################################
|
########################################################################
|
||||||
@ -17,7 +25,7 @@
|
|||||||
$PassWord = 'password'
|
$PassWord = 'password'
|
||||||
|
|
||||||
# адрес ресурса
|
# адрес ресурса
|
||||||
$url = 'http://www.pogoda.ru.net/monitor.php'
|
$url = 'http://www.pogodaiklimat.ru/monitor.php'
|
||||||
|
|
||||||
# регулярное выражение, для нахождения url адреса заданного города
|
# регулярное выражение, для нахождения url адреса заданного города
|
||||||
# <a href="monitor.php?id=35229">Хабаровск</a>
|
# <a href="monitor.php?id=35229">Хабаровск</a>
|
||||||
@ -48,44 +56,6 @@
|
|||||||
# Функции
|
# Функции
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
# Проверяет заданы ли параметры настройки скрипта
|
|
||||||
Function CheckParameters($url, $ServerAddress, $ServerPort, $Login, $PassWord)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if ($url -eq '')
|
|
||||||
{
|
|
||||||
throw new-object Exception('Адрес сайта мониторинга погоды не задан.')
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($ServerAddress -eq '')
|
|
||||||
{
|
|
||||||
throw new-object Exception('Адрес сервера ЛЭРС УЧЕТ не задан.')
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($ServerPort -eq $null) -or ($ServerPort -eq 0) -or ($ServerPort -eq ''))
|
|
||||||
{
|
|
||||||
throw new-object Exception('Порт сервера ЛЭРС УЧЕТ не задан.')
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($Login -eq '')
|
|
||||||
{
|
|
||||||
throw new-object Exception('Имя входа в ЛЭРС УЧЕТ не задано.')
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($PassWord -eq '')
|
|
||||||
{
|
|
||||||
throw new-object Exception('Пароль для входа в ЛЭРС УЧЕТ не задан.')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
throw new-object Exception('Параметры скрипта не настроены. ', $Error[0].Exception)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
##################################################################
|
|
||||||
|
|
||||||
# возвращает содержимое html страницы по адресу url ввиде строки
|
# возвращает содержимое html страницы по адресу url ввиде строки
|
||||||
Function Get-WwwString([string]$url, [string]$Encoding = "windows-1251")
|
Function Get-WwwString([string]$url, [string]$Encoding = "windows-1251")
|
||||||
{
|
{
|
||||||
@ -106,33 +76,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
##################################################################
|
#>
|
||||||
|
|
||||||
# возращает описание исключений
|
|
||||||
Function GetFullExceptionMessage([Exception]$exc)
|
|
||||||
{
|
|
||||||
if($exc -eq $null)
|
|
||||||
{
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
$msg = $exc.Message
|
|
||||||
|
|
||||||
if ($exc.InnerException -ne $null)
|
|
||||||
{
|
|
||||||
$mes = GetFullExceptionMessage $exc.InnerException
|
|
||||||
$msg = $msg + ' ' + $mes
|
|
||||||
}
|
|
||||||
|
|
||||||
return $msg
|
|
||||||
}
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
|
################################################################
|
||||||
# возвращает url адрес на страницу заданного города
|
# возвращает url адрес на страницу заданного города
|
||||||
# $reply - содержимое html страницы ввиде строки
|
# $reply - содержимое html страницы ввиде строки
|
||||||
# $gorod - имя города
|
# $gorod - имя города
|
||||||
# $url - адрес страницы мониторинга погоды
|
# $url - адрес страницы мониторинга погоды
|
||||||
|
################################################################
|
||||||
Function Get-CityUrl($reply, $gorod, $url)
|
Function Get-CityUrl($reply, $gorod, $url)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -160,12 +113,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
|
################################################################
|
||||||
# возвращает хеш-таблицу среднесуточной температуры наружного воздуха за указанный период времени
|
# возвращает хеш-таблицу среднесуточной температуры наружного воздуха за указанный период времени
|
||||||
# dateFrom - дата начало периода
|
# dateFrom - дата начало периода
|
||||||
# dateTo - дата окончания периода
|
# dateTo - дата окончания периода
|
||||||
# link - url города
|
# link - url города
|
||||||
|
################################################################
|
||||||
Function Get-CityTemperature($dateFrom, $dateTo, $link)
|
Function Get-CityTemperature($dateFrom, $dateTo, $link)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -204,6 +158,7 @@
|
|||||||
# ссылка на страницу за указанный месяц и год
|
# ссылка на страницу за указанный месяц и год
|
||||||
$ref = $link + '&month=' + $dateFrom.Month + '&year=' + $dateFrom.Year
|
$ref = $link + '&month=' + $dateFrom.Month + '&year=' + $dateFrom.Year
|
||||||
|
|
||||||
|
Write-Host $ref
|
||||||
# загружаем html страницу заданного месяца и года
|
# загружаем html страницу заданного месяца и года
|
||||||
$html = Get-WwwString $ref
|
$html = Get-WwwString $ref
|
||||||
}
|
}
|
||||||
@ -236,66 +191,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
# возвращает входные параметры
|
|
||||||
Function Arguments($inArgs)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
# проверяем количество параметров
|
|
||||||
|
|
||||||
if($inArgs.Length -eq 0)
|
|
||||||
{
|
|
||||||
throw new-object Exception('Отсутствуют параметры командной строки.')
|
|
||||||
}
|
|
||||||
|
|
||||||
# возвращает введенное имя города
|
|
||||||
$gorod = $inArgs[0]
|
|
||||||
$gorod
|
|
||||||
|
|
||||||
[DateTime]$dateTo = [System.DateTime]::Today.AddDays(-1)
|
|
||||||
[DateTime]$dateFrom = $dateTo
|
|
||||||
|
|
||||||
|
|
||||||
if($inArgs.Length -eq 2)
|
################################################################
|
||||||
{
|
# Функция подключается к серверу и возвращает объект сервера
|
||||||
$DateTimeStr = $inArgs[1]
|
################################################################
|
||||||
$DateTimeStr = $DateTimeStr.Split('-', [System.StringSplitOptions]::RemoveEmptyEntries)
|
|
||||||
|
|
||||||
if($DateTimeStr.Length -ne 2)
|
|
||||||
{
|
|
||||||
throw new-object Exception('Период времени задан неверно.')
|
|
||||||
}
|
|
||||||
|
|
||||||
# дата начало периода
|
|
||||||
if (![DateTime]::TryParse($DateTimeStr[0], [ref]$dateFrom))
|
|
||||||
{
|
|
||||||
throw new-object Exception('Дата начала периода задана в неверном формате. Формат даты: dd.mm.yyyy')
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# дата конца периода
|
|
||||||
if (![DateTime]::TryParse($DateTimeStr[1], [ref]$dateTo))
|
|
||||||
{
|
|
||||||
throw new-object Exception('Дата окончания периода задана в неверном формате. Формат даты: dd.mm.yyyy')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# возвращаем дату начало/конца
|
|
||||||
$dateFrom
|
|
||||||
$dateTo
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
throw new-object Exception('Ошибка разбора параметров коммандной строки. ', $Error[0].Exception)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
# Функция подключается к серверу автоматизации и возвращает объект сервера
|
|
||||||
Function ConnectToServer()
|
Function ConnectToServer()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -318,12 +218,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
|
||||||
|
|
||||||
|
################################################################
|
||||||
# функция сохраняет данные о температуре на сервере ЛЭРС УЧЕТ
|
# функция сохраняет данные о температуре на сервере ЛЭРС УЧЕТ
|
||||||
# $server - сервер автоматизации
|
# $server - сервер автоматизации
|
||||||
# $tempTable - таблица среднесуточных температур
|
# $tempTable - таблица среднесуточных температур
|
||||||
Function SaveTemperatureToServer ($server, $tempTable)
|
################################################################
|
||||||
|
Function SaveTemperatureToServer ($server, $territory, $tempTable)
|
||||||
{
|
{
|
||||||
Write-Host 'Cохраняем данные на сервере ЛЭРС УЧЕТ'
|
Write-Host 'Cохраняем данные на сервере ЛЭРС УЧЕТ'
|
||||||
try
|
try
|
||||||
@ -344,7 +245,8 @@
|
|||||||
|
|
||||||
$value = [Convert]::ToSingle($value.Replace(".",$separator))
|
$value = [Convert]::ToSingle($value.Replace(".",$separator))
|
||||||
|
|
||||||
$record = New-Object Lers.Data.OutdoorTemperatureRecord($dt)
|
$record = New-Object Lers.Data.OutdoorTemperatureRecord($dt, $territory)
|
||||||
|
|
||||||
$record.Value = $value
|
$record.Value = $value
|
||||||
|
|
||||||
$temperature[$i] = $record
|
$temperature[$i] = $record
|
||||||
@ -359,12 +261,146 @@
|
|||||||
{
|
{
|
||||||
throw new-object Exception('Не удалось сохранить данные среднесуточной температуры на сервере ЛЭРС учет. ', $Error[0].Exception)
|
throw new-object Exception('Не удалось сохранить данные среднесуточной температуры на сервере ЛЭРС учет. ', $Error[0].Exception)
|
||||||
}
|
}
|
||||||
|
}#>
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Возвращает территорию, в котороую будет сохраняться температура
|
||||||
|
#################################################
|
||||||
|
Function GetTerritory($server)
|
||||||
|
{
|
||||||
|
if ($territoryName -eq "")
|
||||||
|
{
|
||||||
|
$server.Territories.DefaultTerritory
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$territoryList = $server.Territories.GetList()
|
||||||
|
|
||||||
|
foreach ($territory in $territoryList)
|
||||||
|
{
|
||||||
|
if ($territory.Name -eq $territoryName)
|
||||||
|
{
|
||||||
|
$territory
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new-object Exception("На сервере не найдена территория $territoryName")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Возвращает входные параметры
|
||||||
|
#################################################
|
||||||
|
Function GetFromToDate($inArgs)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
[DateTime]$dateTo = [System.DateTime]::Today.AddDays(-1)
|
||||||
|
[DateTime]$dateFrom = $dateTo
|
||||||
|
|
||||||
|
if ($dateFromTo -ne "")
|
||||||
|
{
|
||||||
|
$dateFromTo = $dateFromTo.Split('-', [System.StringSplitOptions]::RemoveEmptyEntries)
|
||||||
|
|
||||||
|
if($dateFromTo.Length -ne 2)
|
||||||
|
{
|
||||||
|
throw new-object Exception('Период времени задан неверно.')
|
||||||
|
}
|
||||||
|
|
||||||
|
# дата начало периода
|
||||||
|
if (![DateTime]::TryParse($dateFromTo[0], [ref]$dateFrom))
|
||||||
|
{
|
||||||
|
throw new-object Exception('Дата начала периода задана в неверном формате. Формат даты: dd.mm.yyyy')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# дата конца периода
|
||||||
|
if (![DateTime]::TryParse($dateFromTo[1], [ref]$dateTo))
|
||||||
|
{
|
||||||
|
throw new-object Exception('Дата окончания периода задана в неверном формате. Формат даты: dd.mm.yyyy')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# возвращаем дату начало/конца
|
||||||
|
$dateFrom
|
||||||
|
$dateTo
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
throw new-object Exception('Ошибка разбора параметров коммандной строки. ', $Error[0].Exception)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# Проверяет заданы ли параметры настройки скрипта
|
||||||
|
#################################################
|
||||||
|
Function CheckParameters($url, $ServerAddress, $ServerPort, $Login, $PassWord)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ($url -eq '')
|
||||||
|
{
|
||||||
|
throw new-object Exception('Адрес сайта мониторинга погоды не задан.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ServerAddress -eq '')
|
||||||
|
{
|
||||||
|
throw new-object Exception('Адрес сервера ЛЭРС УЧЕТ не задан.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($ServerPort -eq $null) -or ($ServerPort -eq 0) -or ($ServerPort -eq ''))
|
||||||
|
{
|
||||||
|
throw new-object Exception('Порт сервера ЛЭРС УЧЕТ не задан.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($Login -eq '')
|
||||||
|
{
|
||||||
|
throw new-object Exception('Имя входа в ЛЭРС УЧЕТ не задано.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($PassWord -eq '')
|
||||||
|
{
|
||||||
|
throw new-object Exception('Пароль для входа в ЛЭРС УЧЕТ не задан.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
throw new-object Exception('Параметры скрипта не настроены. ', $Error[0].Exception)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# возращает описание исключений
|
||||||
|
#################################################
|
||||||
|
Function GetFullExceptionMessage([Exception]$exc)
|
||||||
|
{
|
||||||
|
if($exc -eq $null)
|
||||||
|
{
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg = $exc.Message
|
||||||
|
|
||||||
|
if ($exc.InnerException -ne $null)
|
||||||
|
{
|
||||||
|
$mes = GetFullExceptionMessage $exc.InnerException
|
||||||
|
$msg = $msg + ' ' + $mes
|
||||||
|
}
|
||||||
|
|
||||||
|
return $msg
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
# Точка входа
|
# Точка входа
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Write-Host 'Запуск импорта данных среднесуточной температуры с сайта мониторинга погоды.'
|
Write-Host 'Запуск импорта данных среднесуточной температуры с сайта мониторинга погоды.'
|
||||||
@ -372,8 +408,10 @@
|
|||||||
# проверяем параметры настройки скрипта
|
# проверяем параметры настройки скрипта
|
||||||
CheckParameters $url $ServerAddress $ServerPort $Login $PassWord
|
CheckParameters $url $ServerAddress $ServerPort $Login $PassWord
|
||||||
|
|
||||||
#param[0] = город, param[1] = дата_начала, param[2] = дата_окончания
|
|
||||||
[object[]]$param = Arguments $Args
|
#param[0] = город, param[1] = дата_начала, param[2] = дата_окончания, param[3] = территория
|
||||||
|
[object[]]$param = GetFromToDate
|
||||||
|
|
||||||
|
|
||||||
Write-host 'Загружаем ресурс ' $url
|
Write-host 'Загружаем ресурс ' $url
|
||||||
|
|
||||||
@ -381,18 +419,23 @@
|
|||||||
$reply = Get-WwwString $url
|
$reply = Get-WwwString $url
|
||||||
|
|
||||||
# получаем ссылку на страницу, указанного города
|
# получаем ссылку на страницу, указанного города
|
||||||
$link = Get-CityUrl $reply $param[0] $url
|
$link = Get-CityUrl $reply $cityName $url
|
||||||
|
|
||||||
# загружаем таблицу с температурами наружного воздуха
|
# загружаем таблицу с температурами наружного воздуха
|
||||||
$tempTable = Get-CityTemperature $param[1] $param[2] $link
|
Write-Host $param[0]
|
||||||
|
Write-Host $param[1]
|
||||||
|
Write-host $link
|
||||||
|
$tempTable = Get-CityTemperature $param[0] $param[1] $link
|
||||||
|
|
||||||
write-host 'Получены среднесуточные температуры.'
|
write-host 'Получены среднесуточные температуры.'
|
||||||
|
|
||||||
# подключаемся к серверу ЛЭРС
|
# подключаемся к серверу ЛЭРС
|
||||||
$server = ConnectToServer
|
$server = ConnectToServer
|
||||||
|
|
||||||
|
$territory = GetTerritory $server
|
||||||
|
|
||||||
# сохраняем температуру на сервере
|
# сохраняем температуру на сервере
|
||||||
SaveTemperatureToServer $server $tempTable
|
SaveTemperatureToServer $server $territory $tempTable
|
||||||
|
|
||||||
Write-Host 'Импорт температур успешно завершен.'
|
Write-Host 'Импорт температур успешно завершен.'
|
||||||
}
|
}
|
||||||
@ -401,5 +444,3 @@
|
|||||||
write-host 'Ошибка импорта температур. ' (GetFullExceptionMessage $Error[0].Exception)
|
write-host 'Ошибка импорта температур. ' (GetFullExceptionMessage $Error[0].Exception)
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
########################################################################
|
|
Loading…
x
Reference in New Issue
Block a user