Показать полную графическую версию : [решено] Powershell_поиск одинаковых значений массива
solonenko
14-02-2020, 12:38
Добрый день.
Через сервис рассылки отправляются текстовые уведомления о заказе. они доставляется/(не доставлены/просмотрены/...) в каналы: sms/viber/vk
Имеется .txt файл, содержащий уникальные mid отправленного информационного сообщения.
Для проверки статуса читаю файл, беру оттуда mid, отправляю в foreach и методом Invoke-RestMethod делаю запрос на получения статуса имеющихся mid
Пример ответа сервера по каждой строке:
PS C:\WINDOWS\system32> $a
log : {@{_id=5e46429b2a955d000be61afa; status=query; when=2020-02-13T07:00:05.978Z}}
mid : 17a4b6b5-0bb9-4557-916f-f0775839d474
lastStatusUpdate : 2020-02-13T07:03:14.499Z
status : delivered
code : 7
channel : sms
type : primary
code может принимать 5 значений, channel может принимать 3. Итого 15 разных вариантов
Начал считать с цикле (проверка по 2-м условиям) но явно это не рационально для всех комбинаций
Как вариант - вижу отправить $a.channel+ " " +$a.status в текстовый файл и там посчитать совпадения, но тоже как-то "костыльно"
Как правильно подсчитать количество полученных ответов в комбинации code+channel, чтобы было примерно так:
channel code count
sms 7 2
sms 6 4
viber 7 10
.................
DJ Mogarych
14-02-2020, 12:55
code может принимать 5 значений, channel может принимать 3. Итого 15 разных вариантов »
Вы бы выложили побольше вариантов, а то получается, что надо их самому рисовать, это неинтересно.
solonenko
14-02-2020, 13:11
Вы бы выложили побольше вариантов, а то получается, что надо их самому рисовать, это неинтересно. »
ТАБЛИЦА СООТВЕТСТВИЯ СТАТУСОВ
Код Название статуса Описание статуса
10 interact Взаимодействие пользователя с сообщением (нажата кнопка, отправлено ответное сообщение). Возможен только для акцептированных контактов.
9 seen Сообщение прочитано
7 delivered Сообщение доставлено
6 undelivered Сообщение не удалось доставить
5 expired Время ожидания доставки сообщения истекло
возможные значения параметра channel: sms/viber/vk
т.о.
для sms-возможны статусы 7,6,5
для viber/vk - возможны все 5 статусов
Итого 13 комбинаций. Перебирать if/elseif мне думается сложно и запутанно, да еще и счетчики каждой итерации...
DJ Mogarych
14-02-2020, 13:20
Я имел в виду этих вариантов, чтобы было что импортировать:
log : {@{_id=5e46429b2a955d000be61afa; status=query; when=2020-02-13T07:00:05.978Z}}
mid : 17a4b6b5-0bb9-4557-916f-f0775839d474
lastStatusUpdate : 2020-02-13T07:03:14.499Z
status : delivered
code : 7
channel : sms
type : primary
Лучше всего - оригинальные файлы, из которых вы берёте данные.
solonenko
14-02-2020, 13:49
Лучше всего - оригинальные файлы, из которых вы берёте данные. »
Это не файлы, а ответ сервера.
log : {@{_id=5e466d132a955d000be83ac1; status=delivered; when=2020-02-14T06:31:14.471Z}, @{_id=5e466d132a955d000be83ac0; status=query; when=2020-02-14T06:30:14.719Z}}
mid : 4e7eea88-315e-4bc8-bd9b-8db5237a03b2
lastStatusUpdate : 2020-02-14T09:43:06.966Z
status : seen
code : 9
channel : viber
type : accepted
log : {@{_id=5e466d132a955d000be83ac5; status=query; when=2020-02-14T06:30:16.358Z}}
mid : 1bb94f6b-34d2-4d70-99a4-8d89d8cfc83c
lastStatusUpdate : 2020-02-14T06:30:20.965Z
status : delivered
code : 7
channel : viber
type : primary
log : {@{_id=5e466d132a955d000be83aca; status=seen; when=2020-02-14T06:30:46.689Z}, @{_id=5e466d132a955d000be83ac9; status=delivered; when=2020-02-14T06:30:35.487Z}, @{_id=5e466d132a955d000be83ac8; status=query; when=2020-02-14T06:30:16.061Z}}
mid : 609e839b-3605-402f-aaca-9772fc3e5dbc
lastStatusUpdate : 2020-02-14T06:31:02.371Z
status : interact
code : 10
channel : viber
type : accepted
log : {@{_id=5e466d132a955d000be83ad0; status=query; when=2020-02-14T06:50:17.859Z}}
mid : cb656a30-de70-4cd5-8be7-cc76e07d9b03
lastStatusUpdate : 2020-02-14T06:50:19.876Z
status : delivered
code : 7
channel : sms
type : primary
log : {@{_id=5e466d132a955d000be83ad7; status=seen}, @{_id=5e466d132a955d000be83ad6; status=delivered; when=2020-02-14T06:50:26.680Z}, @{_id=5e466d132a955d000be83ad5; status=query; when=2020-02-14T06:50:16.434Z}}
mid : fa1c05b6-ff99-4b14-b78d-2e2ee0b22114
lastStatusUpdate : 2020-02-14T07:13:49.026Z
status : interact
code : 10
channel : vk
type : primary
log : {@{_id=5e466d132a955d000be83add; status=query; when=2020-02-14T06:50:28.940Z}}
mid : 9a6a25fc-42ed-4d5f-923e-c3ed0a7f1dfb
lastStatusUpdate : 2020-02-14T06:50:32.923Z
status : delivered
code : 7
channel : sms
type : primary
log : {@{_id=5e466d132a955d000be83ae2; status=seen; when=2020-02-14T06:31:11.350Z}, @{_id=5e466d132a955d000be83ae1; status=delivered; when=2020-02-14T06:30:19.407Z}, @{_id=5e466d132a955d000be83ae0; status=query; when=2020-02-14T06:30:16.549Z}}
mid : 03c9745c-e3b1-499a-907c-f6f02a214bfe
lastStatusUpdate : 2020-02-14T06:31:22.884Z
status : interact
code : 10
channel : viber
type : accepted
log : {@{_id=5e466d132a955d000be83ae8; status=query; when=2020-02-14T06:50:17.760Z}}
mid : 83d42465-139d-41fa-9358-3808c83c807f
lastStatusUpdate : 2020-02-14T06:50:21.883Z
status : delivered
code : 7
channel : sms
type : primary
log : {@{_id=5e466d132a955d000be83aee; status=query; when=2020-02-14T06:35:18.089Z}}
mid : ae6d2b8e-baa0-4a86-a736-bc7102e5e652
lastStatusUpdate : 2020-02-14T06:35:22.334Z
status : delivered
code : 7
channel : sms
type : primary
log : {@{_id=5e466d132a955d000be83af4; status=delivered; when=2020-02-14T06:50:23.293Z}, @{_id=5e466d132a955d000be83af3; status=query; when=2020-02-14T06:50:16.989Z}}
mid : 327f532f-abd0-42f5-9753-c192c1120b8e
lastStatusUpdate : 2020-02-14T06:50:36.575Z
status : seen
code : 9
channel : vk
type : primary
log : {@{_id=5e466d132a955d000be83afa; status=query; when=2020-02-14T06:30:18.710Z}}
mid : 6248ed00-1943-4f3d-9c65-d302c2875afc
lastStatusUpdate : 2020-02-14T06:30:42.822Z
status : undelivered
code : 6
channel : sms
type : primary
log : {@{_id=5e466d132a955d000be83aff; status=seen; when=2020-02-14T06:31:59.272Z}, @{_id=5e466d132a955d000be83afe; status=delivered; when=2020-02-14T06:31:30.791Z}, @{_id=5e466d132a955d000be83afd; status=query; when=2020-02-14T06:30:17.075Z}}
mid : 79533b7c-4eb1-481d-9203-ada703a4513d
lastStatusUpdate : 2020-02-14T06:32:03.919Z
status : interact
code : 10
channel : viber
type : accepted
Я беру txt-файл(лог отправки), в нем каждый mid отправляю на проверку статуса - получаю ответ.
Задача: сделать статистику по каналам доставки и статусу
DJ Mogarych
14-02-2020, 14:43
А сервер это возвращает как простой текст?
solonenko
14-02-2020, 15:02
А сервер это возвращает как простой текст? »
$a= Invoke-RestMethod -Uri "https://sd.flomni.com/status/?data=+$($find[0])" -ContentType "application/json; charset=utf-8" -Headers $headers_voice -Method Get
PS C:\WINDOWS\system32> $a
log : {@{_id=5e466d132a955d000be83aff; status=seen; when=2020-02-14T06:31:59.272Z}, @{_id=5e466d132a955d000be83afe; status=delivered; when=2020-02-14T06:31:30.791Z}, @{_id=5e466d132a955d000be83afd; status=query; when=2020-02-14T06:30:17.075Z}}
mid : 79533b7c-4eb1-481d-9203-ada703a4513d
lastStatusUpdate : 2020-02-14T06:32:03.919Z
status : interact
code : 10
channel : viber
type : accepted
PS C:\WINDOWS\system32> $a.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
Есть txt файл с mid. Беру его, извлекаю mid-даю запрос-получаю ответ сервера в виде массива.
В файле допустим 100 mid. Хочу посчитать, сколько из них доставлены, в какие каналы и какой статус последний.
DJ Mogarych
14-02-2020, 16:01
Формируете массив из ответов сервера на каждый mid, а потом что-то вроде
$array |group channel,code -NoElement
Count Name
----- ----
1 viber, 9
1 viber, 7
3 viber, 10
4 sms, 7
1 vk, 10
1 vk, 9
1 sms, 6
solonenko
14-02-2020, 16:44
Формируете массив из ответов сервера на каждый mid, а потом что-то вроде »
Знаний не много этой области, уточните пожалуйста.
Получается до foreach я создаю пустой массив. Затем в цикле каждый ответ, в моем случае $a, добавляю в массив. После окончания цикла вывожу $array. Верно понимаю решение?
DJ Mogarych
14-02-2020, 18:55
Есть txt файл с mid. Беру его, извлекаю mid-даю запрос-получаю ответ сервера в виде массива.
В файле допустим 100 mid. »
Для файла вы пишете $array = foreach ($строка in $файл) {чего-то там}, который запрашивает сервер и формирует массив, где будут все результаты. Дальше вы уже группируете.
solonenko
17-02-2020, 10:25
DJ Mogarych,
Спасибо, все получилось
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.