Скрипт импорта Тнв теперь может импортировтаь данные по территории

This commit is contained in:
Антон Чичков 2016-08-19 17:58:30 +10:00
parent 789a13c196
commit 333a1a9436

View File

@ -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
} }
########################################################################