PowerShell и ЖЖ: функция «syncitems» и данные от нее, ч.3

Feb 27, 2023 18:58

Ранее в этой серии постов:
...
24. PowerShell и ЖЖ: функция «syncitems» и данные от нее, ч.1
25. PowerShell и ЖЖ: функция «syncitems» и данные от нее, ч.2
26. PowerShell: возврат массива из функции

Окружение: операционная система «Windows 10», программа-оболочка «PowerShell» версии 7.

В этом посте я продолжу анализ данных, полученных от удалённой функции «syncitems» программы-сервера ЖЖ («Живого Журнала»). Как получить эти данные, я подробно описал в предыдущих постах. Напомню, эти данные являются записями об обновлении журнала (блога) пользователя «vbgtut».

Получаю данные из текстового файла, в котором я их сохранил после получения из тела HTTP(S)-ответа программы-сервера ЖЖ, после чего преобразую их в хеш-таблицу с параметрами, а хеш-таблицу - в таблицу вида, с которым удобно работать в окне программы-оболочки «PowerShell» (функции toHashTable и toActionsTable подробно описаны в предыдущих постах):

$fromCache = Get-Content -Path "C:\Users\Илья\Desktop\syncItems vbgtut.txt" -Raw
$params = toHashTable $fromCache
$table = toActionsTable $params

Напомню, в таблице $table содержится 193 строки, каждая из которых является записью об обновлении журнала пользователя «vbgtut»:

PS C:\> $table.Length
193
PS C:\> $table | Select-Object -First 5 | Format-Table

num item itemT itemN action time
--- ---- ----- ----- ------ ----
95 L-78 L 78 update 2011-08-26 15:38:36
193 C-148 C 148 update 2023-02-04 14:45:59
115 C-34 C 34 update 2012-02-10 09:40:07
72 L-60 L 60 create 2011-06-03 19:45:37
167 L-135 L 135 create 2013-11-16 13:20:49

Количество постов (записей) журнала из профиля пользователя

На данный момент в профиле пользователя «vbgtut» есть информация о том, что в его журнале содержится всего 147 постов (записей). Пока что это число не сходится с тем, что в нашей таблице содержится 193 строки. Из блока кода выше видно, что в таблице содержатся записи о создании и обновлении постов, а также записи, касающиеся появления новых комментариев. Очевидно, что разницу между 147 и 193 составляют записи про комментарии.

Записи об обновлении журнала, касающиеся постов, помечаются в графе «item» (и в графе «itemT») латинской буквой «L» (от английского слова «log», которое по-русски означает «журнал», то есть подразумеваются посты журнала), а записи, касающиеся комментариев, помечаются в тех же графах латинской буквой «C» (от английского слова «comment»).

Подсчитаем число строк таблицы, касающихся постов и отдельно - касающихся комментариев:

PS C:\> ($table | Where-Object { $_.itemT -eq "L" } | Measure-Object).Count
147
PS C:\> ($table | Where-Object { $_.itemT -eq "C" } | Measure-Object).Count
46

Как видно из блока кода выше, моё предположение подтвердилось: 193 строки таблицы состоят из 147 строк, касающихся постов, и 46 строк, касающихся комментариев. При подсчете я использовал командлеты «Where-Object» (отбор строк таблицы по указанному условию) и «Measure-Object» (подсчет отобранных командлетом «Where-Object» строк таблицы).

Получение таблицы с записями только про посты

Меня пока что в основном интересуют посты, поэтому я создал новую таблицу $tableL из старой $table. В таблице $tableL содержатся только записи об обновлениях журнала, касающиеся постов:

PS C:\> $tableL = $table | Where-Object { $_.itemT -eq "L" }
PS C:\> $tableL.Length
147

Получение идентификаторов всех постов в журнале

Собственно, идентификаторы постов содержатся в графе «itemN» полученной таблицы. Получить массив этих идентификаторов несложно:

PS C:\> $tableL.itemN

В результате этой команды массив будет выведен в окно программы-оболочки. Но, напомню, по умолчанию элементы массива выводятся в столбик, что неудобно, так как их довольно много - 147 штук. Команду в блоке кода выше будем использовать, когда нам понадобится массив идентификаторов постов для обработки в скрипте. А вывод в окно программы-оболочки я подкорректировал следующим образом:

PS C:\> "" + ($tableL.itemN | Sort-Object)
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

Для сортировки идентификаторов в порядке возрастания я использовал командлет «Sort-Object». Для вывода в окно программы-оболочки массива значений не в столбик, а в строку, я складываю массив с пустой строкой.

Из блока кода выше становится понятно, что идентификаторы постов получаются с помощью простой нумерации постов, начиная с единицы. При этом можно заметить, что в показанном списке отсутствуют идентификаторы с номерами 1 и 63, из-за чего нумерация в итоге оказалась смещена вперед на два пункта. Поэтому идентификаторы предпоследнего и последнего (самого свежего) постов в журнале равны 148 и 149, а не 146 и 147, как должно было быть, если бы номера 1 и 63 не оказались пропущенными.

По поводу пропущенных номеров 1 и 63 моё предположение такое: вероятно, посты с этими номерами когда-то были созданы, но потом в какой-то момент они были удалены автором журнала «vbgtut». Автор этого журнала - я, но я не помню, удалял ли я какие-то изначально созданные посты, так как это было лет десять назад.

Тесты: манипуляции с постом и комментарием, анализ изменений в данных

Будет интересно провести тесты, показывающие, какие записи об обновлениях журнала возвращает удалённая функция «syncitems» программы-сервера ЖЖ после каждого из следующих действий: создание поста, изменение поста, создание комментария к этому посту, изменение комментария к этому посту, удаление комментария к этому посту, удаление поста.

После теста на создание и удаление поста, описанного в предыдущем абзаце, можно создать еще один новый пост, после чего будет видно, появится ли «прореха» в нумерации (в идентификаторах) постов, как в случае с номерами 1 и 63, описанными выше.

Продолжение следует...

Инструмент, Образование, Сайтостроение, Программирование, Английский язык, ЖЖ

Previous post Next post
Up