<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Мониторинг стены ВКонтакта]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13883</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13883&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Мониторинг стены ВКонтакта».]]></description>
		<lastBuildDate>Sun, 24 Jun 2018 22:55:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: Мониторинг стены ВКонтакта]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=126418#p126418</link>
			<description><![CDATA[<p>Скрипт предназначен для отслеживания постов и комментариев в ВК-сообществе/профиле. После запуска логинится один раз (нужно для работы execute-процедуры, которая в зависимости от настроек, получает за один запрос изменения о до 2500 последних постов со стены), скачивает указанное количество постов и в последующем докачивает в них комментарии в случае изменений. Комментарии могут докачиваться не именно с добавленного и ниже, а на указанное количество комментариев выше него — на случай, если несколько комментов со стены были удалены и их позиция сместилась.<br />Таким образом, один вызов для получения общей картины об изменениях на стене, и при их наличии — точное обращение к добавленным комментариям.</p><p>В прикреплении скрипт можно скачать вместе с CSS-стилями, нужными для страниц. Для наглядности работают некоторые Tooltip.</p><div class="codebox"><pre><code>;*******************************************************************************
; WallMonitor.ahk
;*******************************************************************************
#Persistent
#MaxMem 200
SetBatchLines -1
#SingleInstance Force
HTTP := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)

; ========================= НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ =========================
email := &quot;ВАШ_ИМЭЙЛ_НА_ВК&quot;
password := &quot;ВАШ_ПАРОЛЬ_НА_ВК&quot;
OwnerId := -29534144      ; айди сообщества, которое мониторим
Pause := 20               ; пауза В СЕКУНДАХ между проверками (за слишком частые обращения блокируют)
PstIters := 1             ; До 25-ти. Количество итераций при получении инфы о постах и комментах,
                          ; увеличивать на один только если отслеживаемых постов больше 100
PstCount := 2             ; Сколько последних постов со стены отслеживать
                          ; До 2500, в зависмости от итерации, которую
                          ; с каждой сотней постов надо увеличивать на единицу. 

CmtMinus := 3             ; На сколько комментариев отступать назад при их докачке
                          ; (на случай удаления на сервере)
Dest_Path = %A_ScriptDir% ; путь к целевой папке (куда сохранять результат)
; ========================= КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ =========================

SetTimer, gogo, % Pause*1000
Return

gogo:

If not (LoginMode == 1)  ;при первом запуске логиниться однократно:
{
   gosub login
   LoginMode = 1
}

;--------------------------------------------
;ПОСТ:
;--------------------------------------------
HTTP.Open(&quot;POST&quot;, &quot;https://vk.com/dev?act=a_run_method&amp;al=1&amp;hash=&quot; PostHash &quot;&amp;method=execute&amp;param_code=var%20owner_id%3D%22&quot; OwnerId &quot;%22%3Bvar%20offset%3D0%3Bvar%20ITERS%3D&quot; PstIters &quot;%3Bvar%20COUNT%3D&quot; PstCount &quot;%3Bvar%20posts%3D%5B%5D%3Bvar%20req_params%3D%7B%22owner_id%22%3Aowner_id%2C%22count%22%3ACOUNT%2C%22offset%22%3Aoffset%2C%22v%22%3A%225.78%22%7D%3Bvar%20i%3D0%3Bwhile(i%20%3C%20ITERS)%7Breq_params.offset%3Di*COUNT%2BITERS*COUNT*offset%3Bvar%20items%3DAPI.wall.get(req_params).items%3Bif%20(items.length%20%3D%3D%200)%20%7Breturn%20posts%3B%7Dvar%20ids%3Ditems%40.id%3Bvar%20tmp%3D%7B%7D%3Btmp.ids%3Dids%3Btmp.comments%3Ditems%40.comments%40.count%3Bposts.push(tmp)%3Bi%3Di%2B1%3B%7Dreturn%20posts%3B&amp;param_v=5.78&quot;, true)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP.Send()
HTTP.WaitForResponse()
Wall_Info_List := HTTP.ResponseText

If NOT InStr(Wall_Info_List, &quot;&quot;&quot;ids&quot;&quot;:[&quot;)  ;если прежний хэш не действует — перелогиниться:
{
   sleep, 5000
   gosub login
   fileappend  login в %a_now%`n, %Dest_Path%\_login.txt, UTF-8
   Return
}

;Обработка вывода execute-процедуры
Wall_Info_List := RegExReplace(Wall_Info_List, &quot;s)(&quot;&quot;\w+&quot;&quot;:\[)&quot;, &quot;`n$1&quot;)
Wall_Info_List := RegExReplace(Wall_Info_List, &quot;s)[\][^`n]*`n|\]|\}]&quot;, &quot;`n&quot;)

Cont := Wall_Info_List, arrA := [], arrC := [] 
Loop, parse, Cont, `n, `r 
{ 
   str := A_LoopField 
   Loop, parse, str, [`,] 
   if A_LoopField != 
   { 
      if InStr(str, &quot;ids&quot;) 
      arrA[A_Index] := A_LoopField, LastA := A_Index 
      if InStr(str, &quot;comments&quot;) 
      arrC[A_Index] := A_LoopField, LastC := A_Index 
   } 
   if InStr(str, &quot;comments&quot;) 
   { 
      num ++ 
      Loop, % LastA 
      if A_Index &gt; 1 
      Wall_Info_List_Out .= arrA[A_Index] &quot;-&quot; arrC[A_Index] &quot;`n&quot; 
      if (LastA != LastC)    ;ПРОВЕРКА 
      Msgbox, 0x1030, , Ошибка в блоке %num%`, строка ~ %A_Index% исходных данных.`n`nКоличество чисел не совпало. 
      arrA := [], arrC := [], LastA :=LastC := str :=&quot;&quot; 
   } 
} 

Wall_Info_List_Out1 := Wall_Info_List_Out

If (FirstMode == 1)  ;при первом запуске пропустить
{
   Loop, parse, Wall_Info_List_Out_Prev, `n, `r
      Wall_Info_List_Out := RegExReplace(Wall_Info_List_Out, &quot;m`a)^\n|^\Q&quot; A_LoopField &quot;\E$&quot;)
   Wall_Info_List_Out_Uniq := Wall_Info_List_Out

   tooltip Обновление в постах: `n%Wall_Info_List_Out_Uniq%
   sleep 1500

   if (Wall_Info_List_Out_Uniq = &quot;&quot;)  ;если перемен пуста
      Return
}

FirstMode = 1

if (Wall_Info_List_Out_Uniq = &quot;&quot;)  ;если перемен пуста
   Wall_Info_List_Out_Uniq := Wall_Info_List_Out1

Wall_Info_List_Out_Uniq := RegExReplace(Wall_Info_List_Out_Uniq, &quot;\R+\s*&quot;, &quot;`n&quot;) ;удал пуст строки
Wall_Info_List_Out_Uniq := RegExReplace(Wall_Info_List_Out_Uniq, &quot;\R$&quot;, &quot;&quot;) ;удал последн пуст

Wall_Info_List_Out =
Loop, parse, Wall_Info_List_Out_Uniq, `n, `r
{

   RegExMatch(A_LoopField, &quot;s)(\d+)-(\d+)&quot;, match)
   PostId := match1
   CmtCount := match2

   If NOT PostId~=&quot;\d&quot;
     Continue

   pfile = %Dest_Path%\%OwnerId%_%PostId%.html
   if (NOT FileExist(pfile))
   {
      HTTP.Open(&quot;GET&quot;, &quot;https://vk.com/wkview.php?act=show&amp;al=1&amp;w=wall&quot; OwnerId &quot;_&quot; PostId &quot;&amp;offset=999999&quot;, true)
      HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
      HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
      HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
      HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
      HTTP.Send()
      HTTP.WaitForResponse()
      ResponseText := HTTP.ResponseText

      Gosub, PstProc
      Gosub, NewTitle
      Gosub, htmlcode

      fileappend, %htmlcode%%ResponseText%`n`n`n`n, %Dest_Path%\%OwnerId%_%PostId%.html, UTF-8
      FileCreate = 1
      CmtCountInFile := 0
   }
   Else
   {
      FileCreate = 0
      FileRead, Post_File, %pfile%
      StrReplace(Post_File, &quot;&lt;div id=&quot;&quot;post-&quot;,, CmtCountInFile) ;подсчёт комментов в файле
   }
   ResponseText =

   if StrLen(CmtCount) &gt; 0
   {
      loop % CmtCount
      {
         if (FileCreate == 0)
         {
            cn := A_Index - 1 + CmtCountInFile - CmtMinus
            tooltip файл сущ----`nВсего коментов: %CmtCount%/%cn%`nPostId: %PostId%
            sleep 900
            If InStr(cn, &quot;-&quot;)
               Continue
            if (cn = CmtCount)
               break
            if cn &gt; CmtCount
               break
         }
         if (FileCreate == 1)
         {
            cn := A_Index - 1
            tooltip файл НЕ сущ----`nВсего коментов: %CmtCount%/%cn%`nPostId: %PostId%
         }

         ;--------------------------------------------
         ;ОПРЕДЕЛЕННЫЙ КОММ ПОСТА
         ;--------------------------------------------
         HTTP.Open(&quot;POST&quot;, &quot;https://vk.com/al_wall.php&quot;, true)
         ;HTTP.SetRequestHeader(&quot;Cookie&quot;, &quot;remixlang=0&quot;)   ; имена на русском
         HTTP.SetRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;)
         HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
         HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
         HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
         HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
         HTTP.Send(&quot;act=get_replies&amp;al=1&amp;count=1&amp;from=wkview&amp;offset=&quot; cn &quot;&amp;post=&quot; OwnerId &quot;_&quot; PostId &quot;&amp;rev=0&quot;)
         HTTP.WaitForResponse()
         ResponseText := HTTP.ResponseText

         RegExMatch(ResponseText, &quot;s)class=&quot;&quot;post_link&quot;&quot; href=&quot;&quot;[^&quot;&quot;]*(_\d+\?reply=\d+&quot;&quot;)&quot;, match)
         Cmt_Id := match1

         If InStr(Post_File, Cmt_Id)
            Continue

         ResponseText := RegExReplace(ResponseText, &quot;s)^.*?(&lt;div.*?)&lt;!&gt;&lt;!json&gt;.*?$&quot;, &quot;$1&quot;)
         Gosub, CmtProc

         fileappend, %ResponseText%, %Dest_Path%\%OwnerId%_%PostId%.html, UTF-8

         ResponseText =
         match =
         match1 =
         mattch =
         mattch1 =
         NewTitle =
         tSTRING =
         DateTime =
         arrA =
         str =
         Cont =
         Cmt_Id =
         Wall_Info_List =
         Wall_Info_List_Out_Uniq =
         ;Post_File =
         ;!!PostId
         ;!!CmtCount
         cn =
      }
   }
}
Wall_Info_List_Out_Prev := Wall_Info_List_Out1
FileCreate = 0
Return

NewTitle:
   ;захватить не более 100 символов в секции, с границей получаемого текста вне угловых скобок
   RegExMatch(ResponseText, &quot;&lt;div class=&quot;&quot;wall_post_text&quot;&quot;&gt;(?!&lt;/div&gt;)((.(?!&lt;/div&gt;)){0,350}.)(?=.*&lt;/div&gt;)&quot;, match)
   NewTitle := RegExReplace(match1, &quot;&lt;[^&gt;]*$&quot;)
   NewTitle := RegExReplace(NewTitle, &quot;&lt;[^&gt;]*&gt;&quot;, &quot; &quot;)
   NewTitle := RegExReplace(NewTitle, &quot;  &quot;, &quot; &quot;)
   NewTitle := UnHTM(NewTitle)
return

PstProc:
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div id=&quot;&quot;wl_replies_header&quot;&quot;.+?&lt;/div&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s).*?&lt;!bool&gt;&lt;!&gt;(&lt;div.*?&lt;/div&gt;)&lt;!&gt;&lt;!json&gt;.*&quot;, &quot;$1&quot;)

ResponseText := RegExReplace(ResponseText, &quot;s)&lt;a([^&gt;]*)base&amp;quot;:&amp;quot;([^&gt;]*)(&amp;quot;,&amp;quot;[^&gt;]*\[&amp;quot;)([^}]*)(&amp;quot;[^&gt;]*)&gt;&quot;, &quot;&lt;a$1base&amp;huot;:&amp;huot;$2$3$4$5 href=&quot;&quot;$2$4.jpg&quot;&quot;&gt;&lt;img class=&quot;&quot;my&quot;&quot; src=&quot;&quot;$2$4.jpg&quot;&quot;&gt;&lt;/a&gt;`n`n`n&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)(&lt;a[^&gt;]* )(style=&quot;&quot;[^&gt;]*&gt;&lt;img class=&quot;&quot;my&quot;&quot;)&quot;, &quot;$1X$2&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)(&lt;div[^&gt;]* )(style=&quot;&quot;[^&gt;]*&gt;&lt;a[^&gt;]*&gt;&lt;img class=&quot;&quot;my&quot;&quot;)&quot;, &quot;$1X$2&quot;)

ResponseText := RegExReplace(ResponseText, &quot;s) href=&quot;&quot;(/away[^&quot;&quot;]*)&quot;&quot;([^&gt;]* title=)&quot;&quot;(https?:[^&quot;&quot;]*)&quot;&quot;&quot;, &quot; href=&quot;&quot;$3&quot;&quot;$2&quot;&quot;$3&quot;&quot;&quot;) ;!!
ResponseText := RegExReplace(ResponseText, &quot;s)aria-label=&quot;, &quot;title=&quot;) ;!!
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div class=&quot;&quot;ui_actions_menu_icons&quot;&quot;.*?&lt;/a&gt;&lt;/div&gt;|&lt;div class=&quot;&quot;ui_actions_menu _ui_menu&quot;&quot;.*?&lt;/a&gt;&lt;/div&gt;|&lt;div id=&quot;&quot;wl_reply_form_wrap&quot;&quot; class=&quot;&quot;wl_reply_form_wrap&quot;&quot;&gt;&lt;div class=&quot;&quot;wl_post_reply_form_forbidden&quot;&quot;&gt;.*?&lt;/div&gt;&lt;/div&gt;|&lt;button class=&quot;&quot;flat_button.*?&lt;/button&gt;|&lt;span class=&quot;&quot;blind_label&quot;&quot;[^&gt;]*&gt;Показать список оценивших&lt;/span&gt;|&lt;span class=&quot;&quot;blind_label&quot;&quot;&gt;Нравится&lt;/span&gt;|\s+&lt;span class=&quot;&quot;post_like_link _link&quot;&quot;&gt;Нравится&lt;/span&gt;\R&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;br&gt;&lt;a class=&quot;&quot;wall_\w+_more&quot;&quot; X?onclick=&quot;&quot;hide\(this, domPS\(this\)\); show\(domNS\(this\)\);&quot;&quot;&gt;Показать полностью…&lt;/a&gt;&lt;span style=&quot;&quot;display: none&quot;&quot;&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div[^&gt;]*&gt;&lt;div[^&gt;]*&gt;Автор ограничил возможность комментирования&lt;/div&gt;&lt;/div&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;m`a)^\s+&lt;button class=&quot;&quot;flat_button.*?&gt;Вы подписаны&lt;/.*?&lt;/button&gt;$&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div id=&quot;&quot;wl_replies_header_toggler&quot;&quot;.*?$&quot;, &quot;&lt;/div&gt;&lt;/div&gt;`r`n&lt;/div&gt;&lt;/div&gt;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)https://sun\d+-\d+\.userapi\.com/(https://sun\d+-\d+\.userapi\.com/)&quot;, &quot;$1&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s) (onmouse[a-z]+=|onclick=|data-from-id=)&quot;&quot;[^&quot;&quot;]*&quot;&quot;&quot;, &quot; &quot;) ;!!
ResponseText := RegExReplace(ResponseText, &quot;s)=&quot;&quot;/&quot;, &quot;=&quot;&quot;https://vk.com/&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div id=&quot;&quot;wl_post_actions_wrap&quot;&quot;.*\Z&quot;, &quot;&lt;/div&gt;&lt;hr&gt;&quot;)
return

CmtProc:
ResponseText := RegExReplace(ResponseText, &quot;s) href=&quot;&quot;(/away[^&quot;&quot;]*)&quot;&quot;([^&gt;]* title=)&quot;&quot;(https?:[^&quot;&quot;]*)&quot;&quot;&quot;, &quot; href=&quot;&quot;$3&quot;&quot;$2&quot;&quot;$3&quot;&quot;&quot;) ;!!

ResponseText := RegExReplace(ResponseText, &quot;s)&lt;a([^&gt;]*)base&amp;quot;:&amp;quot;([^&gt;]*)(&amp;quot;,&amp;quot;[^&gt;]*\[&amp;quot;)([^}]*)(&amp;quot;[^&gt;]*)&gt;&quot;, &quot;&lt;a$1base&amp;huot;:&amp;huot;$2$3$4$5 href=&quot;&quot;$2$4.jpg&quot;&quot;&gt;&lt;img class=&quot;&quot;my&quot;&quot; src=&quot;&quot;$2$4.jpg&quot;&quot;&gt;&lt;/a&gt;`n`n`n&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)(&lt;a[^&gt;]* )(style=&quot;&quot;[^&gt;]*&gt;&lt;img class=&quot;&quot;my&quot;&quot;)&quot;, &quot;$1X$2&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)(&lt;div[^&gt;]* )(style=&quot;&quot;[^&gt;]*&gt;&lt;a[^&gt;]*&gt;&lt;img class=&quot;&quot;my&quot;&quot;)&quot;, &quot;$1X$2&quot;)

ResponseText := RegExReplace(ResponseText, &quot;s)aria-label=&quot;, &quot;title=&quot;) ;!!
ResponseText := RegExReplace(ResponseText, &quot;s)data-from-id=&quot;&quot;(\d+)&quot;&quot;&gt;&quot;, &quot;data-from-id=&quot;&quot;$1&quot;&quot;&gt;id$1|&quot;)

;ResponseText := RegExReplace(ResponseText, &quot;s) rid=&quot;&quot;(\d+)(&quot;&quot;[^&gt;]*&gt;)&quot;, &quot; rid=&quot;&quot;$1$2to$1|&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;/a&gt; (ответил.?) &lt;a href=&quot;&quot;([^&quot;&quot;]*)&quot;&quot;[^&gt;]*&#039;(-?\d+_\d+)&#039;, event\)&quot;&quot; rid=&quot;&quot;(\d+)&quot;&quot;[^&gt;]*&gt;&quot;, &quot;&lt;/a&gt; &lt;a class=&quot;&quot;reply_to&quot;&quot; href=&quot;&quot;#post$3&quot;&quot;&gt;$1&lt;/a&gt; &lt;a class=&quot;&quot;reply_to&quot;&quot; href=&quot;&quot;$2&quot;&quot;&gt;to$4|&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s) &lt;div class=&quot;&quot;reply_link_wrap&quot;&quot;&gt; &lt;a[^&gt;]*&gt;Ответить&lt;/a&gt;\R&lt;/div&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;br&gt;&lt;a class=&quot;&quot;wall_\w+_more&quot;&quot; X?onclick=&quot;&quot;hide\(this, domPS\(this\)\); show\(domNS\(this\)\);&quot;&quot;&gt;Показать полностью…&lt;/a&gt;&lt;span style=&quot;&quot;display: none&quot;&quot;&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;span class=&quot;&quot;blind_label&quot;&quot;[^&gt;]*&gt;Показать список оценивших&lt;/span&gt;\s?|\s?&lt;span class=&quot;&quot;blind_label&quot;&quot;[^&gt;]*&gt;Нравится&lt;/span&gt;&quot;, &quot;&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)https://sun\d+-\d+\.userapi\.com/(https://sun\d+-\d+\.userapi\.com/)&quot;, &quot;$1&quot;)

;ПРАВКА &quot;минут назад&quot; и &quot;только что&quot;
If RegexMatch(ResponseText, &quot;s)\s?time=&quot;&quot;(\d+)&quot;&quot;&gt;(только.+?|.+?назад)&lt;/span&gt;&quot;, mattch)
{
   DateTime := FormatSeconds(mattch1)
   ResponseText := RegExReplace(ResponseText, &quot;s)\s?time=&quot;&quot;(\d+)&quot;&quot;&gt;(.+?)&lt;/span&gt;&quot;, &quot; time=&quot;&quot;&quot; mattch1 &quot;&quot;&quot;&gt;&quot; DateTime &quot;&lt;/span&gt;&quot;)
}

;ПРАВКА &quot;сегодня в&quot;
If RegexMatch(ResponseText, &quot;s)&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;сегодня в\s&quot;, mattch)
{
   FormatTime, DateTime,, LongDate
   StringReplace, DateTime, DateTime, %A_Space%г., `,, All
   ResponseText := RegExReplace(ResponseText, &quot;s)&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;сегодня в&quot;, &quot;&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;&quot; DateTime)
}

;ПРАВКА &quot;вчера в&quot;
If RegexMatch(ResponseText, &quot;s)&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;вчера в\s&quot;, mattch)
{
   FormatTime, DateTime,, LongDate
   StringReplace, DateTime, DateTime, %A_Space%г., `,, All
   ResponseText := RegExReplace(ResponseText, &quot;s)&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;вчера в&quot;, &quot;&lt;span class=&quot;&quot;rel_date&quot;&quot;&gt;[&quot; DateTime &quot;] вчера в&quot;)
}

ResponseText := RegExReplace(ResponseText, &quot;s) (onmouse[a-z]+=|onclick=|data-from-id=)&quot;&quot;[^&quot;&quot;]*&quot;&quot;&quot;, &quot; &quot;) ;!!
ResponseText := RegExReplace(ResponseText, &quot;s)=&quot;&quot;/&quot;, &quot;=&quot;&quot;https://vk.com/&quot;)
ResponseText := RegExReplace(ResponseText, &quot;s)&lt;div class=&quot;&quot;like_wrap .*?&lt;/div&gt; &lt;div class=&quot;&quot;reply_date&quot;&quot;&gt;&quot;, &quot; &lt;div class=&quot;&quot;reply_date&quot;&quot;&gt;&quot;)
return

login:
SplashImage,, y-2 x200 w40 h14 M C11 ZH0 ZW0 ZX1 ZY1 B0 CT000000 CWffff00 FM8 FS6 WM600 WS400,, login
;--------------------------------------------
;Авторизация:
;--------------------------------------------
;email := &quot;*****************&quot;
;password := &quot;*****************&quot;
;HTTP := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)
HTTP.Open(&quot;GET&quot;, &quot;https://vk.com/&quot;, true)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP.Send()
HTTP.WaitForResponse()
RegexMatch(HTTP.ResponseText, &quot;s)name=&quot;&quot;ip_h&quot;&quot; value=&quot;&quot;(.+?)&quot;&quot;.+?name=&quot;&quot;lg_h&quot;&quot; value=&quot;&quot;(.+?)&quot;&quot;&quot;, match)
PostData := &quot;act=login&amp;role=al_frame&amp;expire=&amp;recaptcha=&amp;captcha_sid=&amp;captcha_key=&amp;_origin=https`%3A`%2F`%2Fvk.com&amp;ip_h=&quot; match1 &quot;&amp;lg_h=&quot; match2 &quot;&amp;email=&quot; email &quot;&amp;pass=&quot; password

HTTP.Open(&quot;POST&quot;, &quot;https://login.vk.com/?act=login&quot;, true)
HTTP.SetRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP.Send(PostData)
HTTP.WaitForResponse()

sleep, 1000

;третья — для получения хэша:
HTTP.Open(&quot;GET&quot;, &quot;https://vk.com/dev/execute&quot;, true)
HTTP.SetRequestHeader(&quot;User-Agent&quot;, &quot;Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko)&quot;)
HTTP.SetRequestHeader(&quot;Pragma&quot;, &quot;no-cache&quot;)
HTTP.SetRequestHeader(&quot;Cache-Control&quot;, &quot;no-cache, no-store&quot;)
HTTP.SetRequestHeader(&quot;If-Modified-Since&quot;, &quot;Sat, 1 Jan 2000 00:00:00 GMT&quot;)
HTTP.Send()
HTTP.WaitForResponse()
RegexMatch(HTTP.ResponseText, &quot;s)Dev.methodRun\(&#039;([^&#039;]*)&#039;&quot;, match)
StringReplace, match1, match1, :, `%3A, All
PostHash := match1
ResponseText =
;--------------------------------------------
SplashImage, OFF
Return

htmlcode:
htmlcode=
(
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ru&quot; lang=&quot;ru&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot; /&gt;
&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;title&gt;%NewTitle%&lt;/title&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\common.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\fonts-cnt.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\page.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\post.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\ui-common.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\uncommon.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\wall.css&quot;&gt;&lt;/link&gt;
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;css\wide-dd.css&quot;&gt;&lt;/link&gt;
&lt;Xbase href=&quot;https://vk.com/&quot;&gt;
&lt;/head&gt;
&lt;body style=&quot;background-color:#ffffff!important;&quot;&gt;

&lt;div class=&quot;wall_wrap clear_fix&quot;&gt;
  &lt;div class=&quot;big_wall&quot;&gt;
    &lt;div class=&quot;wall_module&quot;&gt;`n`n`n`n
)
Return

FormatSeconds(TimeInSec)
{
   TimeInSec := TimeInSec, UTCOffset_sec :=&quot;&quot;, DateTime := 19700101   ; первое января 1970 года 
   DateTime += TimeInSec, sec
   UTCOffset_sec -= A_NowUTC, sec ; учитываем часовой пояс 
   DateTime += UTCOffset_sec, sec 
   FormatTime, DateTime1, %DateTime%, LongDate
   FormatTime, DateTime2, %DateTime%, H:mm ;:ss
   StringReplace, DateTime1, DateTime1, %A_Space%г., , All
   DateTime = %DateTime1%`, %DateTime2%
   return DateTime
}

UnHTM(HTM) { ; Remove HTML formatting / Convert to ordinary text     by SKAN 19-Nov-2009
   Static HT     ; Forum Topic: www.autohotkey.com/forum/topic51342.html
   IfEqual,HT,,   SetEnv,HT, % &quot;&amp;aacuteá&amp;acircâ&amp;acute´&amp;aeligæ&amp;agraveà&amp;amp&amp;aringå&amp;atildeã&amp;au&quot;
 . &quot;mlä&amp;bdquo„&amp;brvbar¦&amp;bull•&amp;ccedilç&amp;cedil¸&amp;cent¢&amp;circˆ&amp;copy©&amp;curren¤&amp;dagger†&amp;dagger‡&amp;deg&quot;
 . &quot;°&amp;divide÷&amp;eacuteé&amp;ecircê&amp;egraveè&amp;ethð&amp;eumlë&amp;euro€&amp;fnofƒ&amp;frac12½&amp;frac14¼&amp;frac34¾&amp;gt&gt;&amp;h&quot;
 . &quot;ellip…&amp;iacuteí&amp;icircî&amp;iexcl¡&amp;igraveì&amp;iquest¿&amp;iumlï&amp;laquo«&amp;ldquo“&amp;lsaquo‹&amp;lsquo‘&amp;lt&lt;&amp;m&quot;
 . &quot;acr¯&amp;mdash—&amp;microµ&amp;middot·&amp;nbsp &amp;ndash–&amp;not¬&amp;ntildeñ&amp;oacuteó&amp;ocircô&amp;oeligœ&amp;ograveò&amp;or&quot;
 . &quot;dfª&amp;ordmº&amp;oslashø&amp;otildeõ&amp;oumlö&amp;para¶&amp;permil‰&amp;plusmn±&amp;pound£&amp;quot&quot;&quot;&amp;raquo»&amp;rdquo”&amp;reg&quot;
 . &quot;®&amp;rsaquo›&amp;rsquo’&amp;sbquo‚&amp;scaronš&amp;sect§&amp;shy&amp;sup1¹&amp;sup2²&amp;sup3³&amp;szligß&amp;thornþ&amp;tilde˜&amp;tim&quot;
 . &quot;es×&amp;trade™&amp;uacuteú&amp;ucircû&amp;ugraveù&amp;uml¨&amp;uumlü&amp;yacuteý&amp;yen¥&amp;yumlÿ&quot;

   HTM := RegExReplace( HTM,&quot;&amp;amp;(\w+;)&quot;, &quot;&amp;$1&quot; )   ;!! для обработки &amp;amp;lt; 
   HTM := RegExReplace( HTM,&quot;&amp;amp;(#\d+;)&quot;, &quot;&amp;$1&quot; )  ;!! для обработки &amp;amp;#60;

   TXT := RegExReplace( HTM,&quot;&lt;[^&gt;]+&gt;&quot;, &quot; &quot; )               ; Remove all tags between  &quot;&lt;&quot; and &quot;&gt;&quot;
   Loop, Parse, TXT, &amp;`;                              ; Create a list of special characters
      L := &quot;&amp;&quot; A_LoopField &quot;;&quot;, R .= (!(A_Index&amp;1)) ? ( (!InStr(R,L,1)) ? L:&quot;&quot; ) : &quot;&quot;
   StringTrimRight, R, R, 1
   Loop, Parse, R , `;                                ; Parse Special Characters
      If F := InStr( HT, A_LoopField )                  ; Lookup HT Data
         StringReplace, TXT,TXT, %A_LoopField%`;, % SubStr( HT,F+StrLen(A_LoopField), 1 ), All
   Else If ( SubStr( A_LoopField,2,1)=&quot;#&quot; )
      StringReplace, TXT, TXT, %A_LoopField%`;, % Chr(SubStr(A_LoopField,3)), All

   TXT := RegExReplace(TXT, &quot; +&quot;, &quot; &quot;)       ;!! множественные пробелы на один
   TXT := RegExReplace(TXT, &quot;m)(*UCP)(?&lt;=\s|^)&quot;&quot;(?=\w)&quot;, &quot;«&quot;)      ;!! кавычки
   TXT := RegExReplace(TXT, &quot;m)(*UCP)(?&lt;=[^\s&quot;&quot;])&quot;&quot;(?=\W|$)&quot;, &quot;»&quot;) ;!! кавычки

;!! кавычки
loop, 10
{
      TXT := RegExReplace(TXT, &quot;«([^«»]*)«([^«»]*)»&quot;, &quot;«$1«$2»&quot;)
      TXT := RegExReplace(TXT, &quot; &quot;&quot;([\s?\)\]\}\,\.\:\;\!\?…&quot;&quot;&#039;])&quot;, &quot;n~b~s~p&quot;&quot;$1&quot;)
      TXT := RegExReplace(TXT, &quot;((^|[\s]|&amp;nbsp;)([\(\[\{&quot;&quot;]|\d+)*)([&quot;&quot;])(\S([^&quot;&quot;]*?|.*?\x20[&quot;&quot;]\x20.*?)\S|[^&quot;&quot;\s])[&quot;&quot;]((\d+|[\)\]\}\,\.\:\;\!\?…&quot;&quot;])*($|[\s]|&amp;nbsp;))&quot;, &quot;$1«$5»$7&quot;)
      TXT := RegExReplace(TXT, &quot;n~b~s~p&quot;, &quot; &quot;)
      TXT := RegExReplace(TXT, &quot;«([^«»]*)«([^«»]*)»&quot;, &quot;«$1„$2“&quot;)
}

   Return RegExReplace( TXT, &quot;(^\s*|\s*$)&quot;)            ; Remove leading/trailing white spaces
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DD)]]></author>
			<pubDate>Sun, 24 Jun 2018 22:55:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=126418#p126418</guid>
		</item>
	</channel>
</rss>
