1 (изменено: kangar, 2018-07-25 19:02:03)

Тема: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

Всем привет. Как по-красоте можно сделать парсинг названия, сколько ответов, просмотров и кто оставил последнее сообщение в первой теме на форуме через WinHttp?
Например отсюда: http://forum.script-coding.com/viewforum.php?id=27
Чтобы в 4-х МСГбоксах выводилась инфа, о которой я написал выше.

Post's attachments

Screenshot_2.png 126.59 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

kangar, оформите ссылку тегом "url".

3

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

По WinHttpRequest информации на форуме достаточно, для того, чтобы самому что-то попробовать написать.

4 (изменено: alexii, 2018-07-26 02:09:25)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

OFF: Malcev, я так понимаю, что проблема не в применении WinHttpRequest, а в том, как сделать сам парсинг .

5

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

Сам парсинг можно сделать с помощью регулярных выражений либо через HTMLfile.
Лично я предпочитаю с помощью регулярных выражений, так как быстрее.

6 (изменено: kangar, 2018-07-26 09:42:31)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

Я просмотрел много тем по запросу WinHttpRequest, но из тех тем, в которых на первый взгляд читалась конкретная строка сайта, было непонятно как она это делает.
Сам принцип неясен, и как отобрать среди нескольких классов с одним названием нужный по номеру убывания. Т.е всего 7 например, а нужный 5-й. Как выбрать именно его? 
https://imgur.com/a/pOD2TrS

7 (изменено: alexii, 2018-07-26 10:26:10)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

kangar, нет и не может быть никаких:

kangar пишет:

читалась конкретная строка сайта

Делается запрос к серверу по указанному Url, в ответ получается ответ из текстового содержимого, который анализируется, и полученное содержимое разбирается по определённым правилам.

kangar пишет:

и как отобрать среди нескольких классов с одним названием нужный по номеру убывания. Т.е всего 7 например, а нужный 5-й. Как выбрать именно его?

https://i.imgur.com/9Ola74V.png

Самое надёжное — добраться по иерархии от самого верха. Либо отобрать в коллекцию все div'ы и взять искомый.

8 (изменено: kangar, 2018-07-26 13:13:19)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

alexii Представляю как сделать это на IE, вот только ослик такое себе решение..
На WinHttpRequest я вообще не могу представить как это реализовать. :/

9

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

Ну так воспользуйтесь поиском, kangar. Как было ранее упомянуто, на страницах этого форума довольно много примеров с WinHttpRequest и некоторые даже с примерами парсинга, как с использованием HTMLfile, так и при помощи регулярных выражений.

Освойте вначале одно, затем, следующее и по пути, если будут возникать вопросы - не стесняйтесь задавать. Ваша задача - тривиальна, но лучший для Вас способ разобраться с ней, это не получить готовое решение, а пройти этот короткий путь самостоятельно. Более тем, что для этого всё уже приготовлено.

10 (изменено: kangar, 2018-07-26 13:49:55)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

KusochekDobra Не откажете в паре вопросах?
Код ниже читает не кол-во тем, а текст "темы".

WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", "http://forum.script-coding.com/index.php", false)
WebRequest.Send()
Body := WebRequest.ResponseBody
pArr := ComObjValue(Body)
cBytes := NumGet(pArr+0, A_PtrSize = 8? 24:16, "uint")
pText := NumGet(pArr+0, A_PtrSize = 8? 16:12, "ptr")
var := StrGet(pText, cBytes, "utf-8")
RegExMatch(var, "class=""info-topics"">(.+?)</strong>", phone)
msgbox % phone1

Ниже, мсгбокс выводит "<span> Общение", хотя выбрал я "<span>AutoHotKey</span>" (На скринах)

WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", "http://forum.script-coding.com/index.php", false)
WebRequest.Send()
Body := WebRequest.ResponseBody
pArr := ComObjValue(Body)
cBytes := NumGet(pArr+0, A_PtrSize = 8? 24:16, "uint")
pText := NumGet(pArr+0, A_PtrSize = 8? 16:12, "ptr")
var := StrGet(pText, cBytes, "utf-8")
RegExMatch(var, "class=""hn"">(.+?)</span>", phone)
msgbox % phone1

https://imgur.com/a/TmSa60e
https://imgur.com/a/ZxsEhxo

11

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", "http://forum.script-coding.com/index.php", false)
WebRequest.Send()
Body := WebRequest.ResponseText()
FoundPos := RegExMatch(Body, "<span>AutoHotkey</span>")
RegExMatch(Body, "li class=""info-topics""><strong>(.*?)</strong>", phone, FoundPos)
msgbox % phone1
Windows 10 x64

12

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

kangar пишет:

Ниже, мсгбокс выводит "<span> Общение", хотя выбрал я "<span>AutoHotKey</span>" (На скринах)

Элементов с классом hn в коде страницы 17 штук. Вы указали первый встречающийся, а там текст именно тот, что вы получили. Подскажем, если догадаетесь, как правильно отобразить скриншот на странице, а пока видно только

https://i.imgur.com/j2ViOT1.png

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

teadrinker

http://s5.uploads.ru/t/X9JHM.png

14

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

Надеюсь, это только для примера, но принцип, вижу, вы поняли. Если хотите получить количество тем в разделе AutoHotkey из коллекции, нужно в RegEx определить его более точно:

https://i.imgur.com/GoJoCzD.png

oWhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oWhr.Open("GET", "http://forum.script-coding.com/index.php", false)
oWhr.Send()
html := oWhr.ResponseText
RegExMatch(html, "U)id=""category2"".*<span>AutoHotkey</span>.*<strong>(.*)</strong>", match)
MsgBox, % match1
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15 (изменено: kangar, 2018-07-26 19:01:57)

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

teadrinker
http://sh.uploads.ru/t/2zcS3.png

oWhr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oWhr.Open("GET", "http://site/", false)
oWhr.Send()
html := oWhr.ResponseText
RegExMatch(html, "U)id=""list"".*<strong>(.*)</strong>", match)
RegExMatch(html, "U)id=""list"".*<i>(.*)</i>", matchs)
MsgBox, % match1
MsgBox, % matchs1

Если у меня несколько "list", можно ли их выбирать? Например со второго по счету "list" считать строку?

16

Re: AHK: WinHttpRequest / Поиск информации о последней теме на форуме.

У нас есть несколько созданных тем по регулярным выражениям, можете выбрать любую, или создать свою. Чтобы вопрос был более понятен, нужно привести исходный текст (именно в виде текста, а не скриншотом), и что вы хотите извлечь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg