<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Пример скачивания поста с Фейсбука с развёрнутыми комментариями]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14182&amp;type=atom" />
	<updated>2018-09-20T22:41:48Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14182</id>
		<entry>
			<title type="html"><![CDATA[AHK: Пример скачивания поста с Фейсбука с развёрнутыми комментариями]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=128794#p128794" />
			<content type="html"><![CDATA[<p>Пример скачивания поста с Фейсбука с развёрнутыми комментариями:<br /></p><div class="codebox"><pre><code>
#MaxMem 200
SetBatchLines -1
#SingleInstance Force
HTTP := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)

login := &quot;*********&quot;  ;ЛОГИН (М. Б. НОМЕР ТЕЛЕФОНА В ФОРМАТЕ +12345678910)
password := &quot;*********&quot;   ;ПАРОЛЬ
email := login
owner_id := 810732232462076  ;АЙДИ ПРОФИЛЯ
post_num := 907883219413643  ;АЙДИ СТРАНИЦЫ

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

n := 0
loop
{
   sleep 400
   URL := &quot;https://mobile.facebook.com/story.php?story_fbid=&quot; post_num &quot;&amp;id=&quot; owner_id &quot;&amp;p=&quot; n
   gosub, HTTP

   all := ResponseText &quot;`n&quot; all

   If NOT InStr(ResponseText, &quot;Просмотр предыдущих комментариев&quot;)
      break
   If A_Index = 1
      n+=10
   else
      n+=10
}

Gosub, htmlcode
gosub, ProcPost
subLnkPlus = 

all := all

loop
{
   If RegExMatch(all, &quot;s)(&lt;div[^&gt;]*&gt;&lt;div[^&gt;]*id=&quot;&quot;comment_replies_more[^&gt;]*&gt;.*?href=&quot;&quot;)([^&quot;&quot;]*)(&quot;&quot;[^&gt;]*&gt;)([^&lt;]* отве[А-ЯЁа-яё]+[^&lt;]*)(&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;)&quot;, matchh)
   subLnk := matchh2

   If NOT InStr(matchh, &quot;id=&quot;&quot;comment_replies_more&quot;)
      break

loop
{
   sleep, 400
   If A_Index = 1
      URL := subLnk
   if (NOT subLnkPlus = &quot;&quot;)
   {
      URL = https://mobile.facebook.com%subLnkPlus%
      subLnkPlus = 
   }
   gosub, HTTP

   all2 := ResponseText &quot;`n&quot; all2

   ;подсчёт реального количества ответов:
   StrReplace(all2, &quot;&lt;/abbr&gt;&quot;,, SubCmtsRealCount)
   If (SubCmtsRealCount = 1)
      all2 =

   RegExMatch(ResponseText, &quot;s)&lt;a href=&quot;&quot;([^&quot;&quot;]*)&quot;&quot;[^&gt;]*&gt;(&lt;span[^&gt;]*&gt;)?Посмотреть предыдущие ответы&lt;&quot;, match)
   subLnkPlus := match1
   loop, 20
      StringReplace subLnkPlus, subLnkPlus, &amp;amp`;, &amp;, All
   match1 =

   If NOT InStr(ResponseText, &quot;&gt;Посмотреть предыдущие ответы&lt;&quot;)
      break

   If( subLnkPlus = &quot;&quot; )
      break
}

gosub, ProcPostOtv
all2 := all2
matchh4 := RegExReplace(matchh4, &quot;s)Смотреть вс(е|ё)\s&quot;, &quot;&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;div[^&gt;]*&gt;|&lt;/?span[^&gt;]*&gt;| (class|id)=&quot;&quot;[^&quot;&quot;]*&quot;&quot;)&quot;, &quot;&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;/div[^&gt;]*&gt;)+&quot;, &quot;&lt;br&gt;&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;br&gt;)+&quot;, &quot;&lt;br&gt;&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;br&gt;&lt;h3&gt;|&lt;h3&gt;)&quot;, &quot;`n&lt;h3&gt;&quot;)

If (SubCmtsRealCount = 1)
   StringReplace all, all, %matchh%, `n`n&lt;blockquote id=&quot;otv&quot;&gt;&lt;s&gt;&lt;span&gt;&lt;a href=&quot;%matchh2%&quot;&gt;%matchh4%&lt;/a&gt;&lt;/span&gt;&lt;/s&gt;&lt;/blockquote&gt;`n`n, All
Else
{
   matchh4 := RegExReplace(matchh4, &quot;s)^.*? 1 ответ$&quot;, &quot;1 ответ&quot;)
   StringReplace all, all, %matchh%, `n`n&lt;blockquote id=&quot;otv&quot;&gt;&lt;a href=&quot;%matchh2%&quot;&gt;&lt;u&gt;%matchh4%:&lt;/u&gt;&lt;/a&gt;`n%all2%&lt;/blockquote&gt;`n`n, All
}

matchh=
matchh1=
matchh2=
matchh3=
matchh4=
matchh5=
matchhh=
matchhh1=
all2=
}
fileappend, %all%, %a_scriptdir%\pst%post_num%.html, UTF-8
ExitApp

ProcPost:
all := RegExReplace(all, &quot;s)&lt;a [^&gt;]*&gt;(&lt;img [^&gt;]*&gt;)?&amp;nbsp;Еще комментарии…&lt;/a&gt;.*?&lt;a [^&gt;]*&gt;(&lt;img [^&gt;]*&gt;)?&amp;nbsp;Просмотр предыдущих комментариев…&lt;/a&gt;&quot;, &quot;&quot;)
all := RegExReplace(all, &quot;s)^.*?&lt;head&gt;&quot;, htmlcode)
all := RegExReplace(all, &quot;s)&lt;form method=&quot;&quot;post&quot;&quot;((?!&lt;form|&lt;/abbr).)*&lt;/form&gt;&quot;, &quot;&quot;) ;!!SIC
all := RegExReplace(all, &quot;s)&lt;a [^&gt;]*&gt;(Отреагировать|Ответить|Пожаловаться|Нравится|Отправить в сообщении|Отметить на фото)&lt;/a&gt;([^·]*)&lt;span [^&gt;]*&gt; · &lt;/span&gt;&quot;, &quot;$2&quot;)
all := RegExReplace(all, &quot;s)(&lt;span class=&quot;&quot;word_break&quot;&quot;&gt;&lt;/span&gt;|&lt;wbr /&gt;|font-size:0;?|&lt;a [^&gt;]*&gt;На главную страницу&lt;/a&gt;)&quot;, &quot;&quot;)
all := RegExReplace(all, &quot;s)&lt;span [^&gt;]*&gt; · &lt;/span&gt;(.*?)&lt;span [^&gt;]*&gt;(Друзья|Доступно всем)&lt;/span&gt;&quot;, &quot;$1&quot;)
loop, 20
  all := RegExReplace(all, &quot;s)(=&quot;&quot;[^&quot;&quot;]*&amp;)amp;([^&quot;&quot;]*&quot;&quot;)&quot;, &quot;$1$2&quot;)
StringReplace, all, all, &gt;отредактировано&lt;/a&gt;, &gt;/&lt;/a&gt;, All
StringReplace, all, all, href=&quot;/, href=&quot;https://mobile.facebook.com/, All
all := RegExReplace(all, &quot;s)href=&quot;&quot;https://mobile.facebook.com/home.php?[^&quot;&quot;]*&quot;&quot;&quot;, &quot;href=&quot;&quot;../_index.html#&quot; post_num &quot;&quot;&quot;&quot;)
StringReplace, all, all, line-height:, Xline-height:, All
StringReplace, all, all, aria-label=&quot;, title=&quot;, All
all := RegExReplace(all, &quot;s)&amp;#x(\w+);&quot;, &quot;\u$1&quot;)
all := JavaEscapedToHtml(all)
all := RegExReplace(all, &quot;s)&lt;table [^&gt;]*&gt;&lt;tbody&gt;((?!&lt;table|&lt;/table|&lt;/div|&lt;/abbr).)*(Нравится|Отреагировать|Комментарий|Поделиться|Пожаловаться)((?!&lt;table|&lt;/table|&lt;/div|&lt;/abbr).)*&lt;/tbody&gt;&lt;/table&gt;&quot;, &quot;&quot;) ;!!SIC
all := RegExReplace(all, &quot;s)(&lt;a [^&gt;]* target=&quot;&quot;_blank&quot;&quot;[^&gt;]*&gt;)(&lt;div[^&gt;]*&gt;&lt;table[^&gt;]*&gt;&lt;tbody&gt;)&quot;, &quot;$2$1&quot;)
all := RegExReplace(all, &quot;s)(href=&quot;&quot;https://lm.facebook.com/[^&quot;&quot;]*)&amp;h=[^&quot;&quot;]*&quot;&quot;&quot;, &quot;$1&quot;&quot;&quot;)
return

ProcPostOtv:
all2 := RegExReplace(all2, &quot;s)&lt;a [^&gt;]*&gt;(&lt;span[^&gt;]*&gt;)?Посмотреть следующие ответы(&lt;/span&gt;)?&lt;/a&gt;.*?&lt;a [^&gt;]*&gt;(&lt;span[^&gt;]*&gt;)?Посмотреть предыдущие ответы(&lt;/span&gt;)?&lt;/a&gt;&quot;, &quot;&quot;) ;!!
all2 := RegExReplace(all2, &quot;s)^.*?&lt;/abbr&gt;.*?(&lt;div.*&lt;/abbr&gt;.*?)&lt;div.*$&quot;, &quot;$1&quot;) ;!!SIC!!
all2 := RegExReplace(all2, &quot;s)&lt;a [^&gt;]*&gt;(Отреагировать|Ответить|Пожаловаться|Нравится)&lt;/a&gt;([^·]*)&lt;span [^&gt;]*&gt; · &lt;/span&gt;&quot;, &quot;$2&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;span class=&quot;&quot;word_break&quot;&quot;&gt;&lt;/span&gt;|&lt;wbr /&gt;|font-size:0;?)&quot;, &quot;&quot;)
loop, 20
  all2 := RegExReplace(all2, &quot;s)(=&quot;&quot;[^&quot;&quot;]*&amp;)amp;([^&quot;&quot;]*&quot;&quot;)&quot;, &quot;$1$2&quot;)
StringReplace, all2, all2, &gt;отредактировано&lt;/a&gt;, &gt;/&lt;/a&gt;, All
StringReplace, all2, all2, href=&quot;/, href=&quot;https://mobile.facebook.com/, All
StringReplace, all2, all2, line-height:, Xline-height:, All
StringReplace, all2, all2, aria-label=&quot;, title=&quot;, All
all2 := RegExReplace(all2, &quot;s)&amp;#x(\w+);&quot;, &quot;\u$1&quot;)
all2 := JavaEscapedToHtml(all2)
;all2 := RegExReplace(all2, &quot;s)(&lt;div class=&quot;&quot;[^&quot;&quot;]*&quot;&quot; id=&quot;&quot;)&quot;, &quot;`n$1&quot;)
all2 := RegExReplace(all2, &quot;s)(&lt;a [^&gt;]* target=&quot;&quot;_blank&quot;&quot;[^&gt;]*&gt;)(&lt;div[^&gt;]*&gt;&lt;table[^&gt;]*&gt;&lt;tbody&gt;)&quot;, &quot;$2$1&quot;)
all2 := RegExReplace(all2, &quot;s)(href=&quot;&quot;https://lm.facebook.com/[^&quot;&quot;]*)&amp;h=[^&quot;&quot;]*&quot;&quot;&quot;, &quot;$1&quot;&quot;&quot;)
return

login:
SplashImage,, y-2 x60 w40 h14 M C11 ZH0 ZW0 ZX1 ZY1 B1 CTffffff CW3B5998 FM8 FS6 WM600 WS400,, login
;--------------------------------------------
;Авторизация:
;--------------------------------------------
HTTP.Open(&quot;POST&quot;, &quot;https://mobile.facebook.com/login.php&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(&quot;email=&quot; email &quot;&amp;pass=&quot; password &quot;&amp;login=&quot; login)
HTTP.WaitForResponse()
ResponseText := HTTP.ResponseText
ResponseText =
;--------------------------------------------
SplashImage, OFF
Return

;преобразование юникодных кодов в символы
JavaEscapedToHtml(s) {
    i := 1
    while j := RegExMatch(s, &quot;\\u[A-Fa-f0-9]{1,4}&quot;, m, i)
        e .= SubStr(s, i, j-i) Chr(&quot;0x&quot; SubStr(m, 3)), i := j + StrLen(m)
    return e . SubStr(s, i)
}

HTTP:
   HTTP.Open(&quot;GET&quot;, URL, 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()
   HTTP.WaitForResponse()
   ResponseText := HTTP.ResponseText
return

htmlcode:
htmlcode=
(
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html&gt;&lt;META http-equiv=Content-Type content=&quot;text/html; charset=utf-8&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../style.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;style.css&quot;&gt;

&lt;style&gt;
body {vertical-align:baseline;line-height:125`%;margin-bottom:6`% !important;}
.d #viewport, #viewport {margin:0 auto;max-width:600px;width:600px;}
s {vertical-align: middle; color:#FF0000;} s span { color:#222222;} 
abbr { font-size:14px !important; color:#999 !important; border:0 !important;}
div h3, #otv  { margin-top:7px !important;margin-bottom:3px !important;}
h3 a { font-size:18px !important; color:#3B5998 !important;}
h3 a:hover { color:#fff !important; background-color: #3B5998 !important;}
p {font-weight:normal !important; color:#242C3B !important; background-color: #fff !important;}
img {border:0 !important; padding-right:2px !important;}
blockquote {border:0 !important; color:#242C3B !important; font-size:85`% !important; clear: both !important; 
margin:.83em 10px 0px 10px !important; border-left: 1px solid #808796 !important;padding-left: 15px !important;}
blockquote a h3 { font-size:85`% !important;}
blockquote table, blockquote tbody, blockquote tr, blockquote td {font-size:100`% !important; }
blockquote table a {color:blue !important;}
blockquote table a:hover {color:#ffffff !important;}
#otv a {text-decoration:none;border-bottom: dotted 1px;}
#otv u {font-family: monospace; cursor:default; color:red !important; font-weight:normal !important;}
&lt;/style&gt;

&lt;head&gt;
)
Return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2018-09-20T22:41:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=128794#p128794</id>
		</entry>
</feed>
