- Версия AutoIt
- 4.4.6
- Версия
- 32
Добрый день!
Нужна помощь в доработке скрипта, не выгружаются данные игроков, которые вышли из клана за последние сутки/двое/трое (нужна возможность установить за сколько дней собрать данные).
Почему то не выгружает данные с сайта, не могу понять почему
Нужна помощь в доработке скрипта, не выгружаются данные игроков, которые вышли из клана за последние сутки/двое/трое (нужна возможность установить за сколько дней собрать данные).
Почему то не выгружает данные с сайта, не могу понять почему
Код:
#include <Array.au3>
#include <Date.au3>
; =========================== Получение топ 500 кланов
$iPerPage = 100 ; Количество кланов на страницу (максимум 100)
$iPages = 1 ; Количество страниц с кланами
$iOffset = 0 ; Количество кланов для пропуска, если написать 100, то пропустит первые 100 кланов
Dim $aClans[0]
For $i = 1 To $iPages
$sUrl = "https://lesta.ru/clans/wot/leaderboards/#ratingssearch&offset=" & $iOffset & "&limit=" & $iPerPage & "&order=-cr&add=false"
ConsoleWrite($sUrl & @CRLF)
$oHttp = ObjCreate("winhttp.winhttprequest.5.1")
$oHttp.Open("GET", $sUrl, False)
$oHttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")
$oHttp.SetRequestHeader("X-Requested-With", 'XMLHttpRequest')
$oHttp.SetRequestHeader("Accept", 'application/json, text/javascript, */*; q=0.01')
$oHttp.SetRequestHeader("Sec-Fetch-Mode", 'cors')
$oHttp.Send()
;MsgBox(0, $sUrl,"" )
$sHtml = $oHttp.ResponseText
;ConsoleWrite("Page " & $i & " =>>> " & $oHttp.SetRequestHeader & @CRLF)
$a_Clans = StringSplit(StringRegExp($sHtml, '"items": \[(.+)', 3), "}, {", 3)
For $s_Clan In $a_Clans
_ArrayAdd($aClans, StringStripWS(StringRegExp($s_Clan, '"id": ([0-9]+)', 3), 3))
Next
$iOffset += $iPerPage
Next
$aClans = _ArrayUnique($aClans)
ConsoleWrite("Найдено кланов: " & UBound($aClans) & @CRLF)
$hFile = FileOpen(@ScriptDir & '/result.txt', 2)
$sMinDate = _DateAdd('D', -1, _NowCalc()) ; Последние 10 дней
For $sClan In $aClans
$sUrl = "https://lesta.ru/clans/wot/" & $sClan & "/newsfeed/api/events/?date_until=2022-01-01T00%3A00%3A00%2B00%3A00&offset=10800"
;ConsoleWrite("Проверяем " & $sUrl & @CRLF)
$sHtml = BinaryToString(InetRead($sUrl, 8), 16)
$aPlayers = StringRegExp($sHtml, '"subtype":"leave_clan"(.+?)"subtype', 3) ; Массив всех игроков что ливнули из клана
If @error Then ContinueLoop
For $sPlayer In $aPlayers
If _DateDiff('s', $sMinDate, StringRegExp($sPlayer, '"created_at":"(.+?)"', 3)[0]) > 0 Then ; Отсеиваем тех что вышли из кланов давно
$sAccounts = StringRegExp($sPlayer, '"accounts_info":(.+)', 3)[0]
$aPlayerNames = StringRegExp($sAccounts, '"name":"(.+?)"', 3)
$aPlayerUrls = StringRegExp($sAccounts, '"url":"(.+?)"', 3)
For $iPlayerNumber = 0 To UBound($aPlayerNames) -1
; Проверяем список танков игрока
$sPlayerId = StringRegExp($aPlayerUrls[$iPlayerNumber], 'account_id=(\d+)', 3)
If IsArray($sPlayerId) Then
$sPlayerId = $sPlayerId[0]
Else
$sPlayerId = StringRegExp($aPlayerUrls[$iPlayerNumber], 'expanded_player=(\d+)', 3)[0]
EndIf
$oHttp = ObjCreate("winhttp.winhttprequest.5.1")
$oHttp.Open("GET", 'https://lesta.ru/clans/wot/vehicles/account/' & $sPlayerId & '/?offset=0&limit=1000&order=&battle_type=fort_sorties', False)
$oHttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")
$oHttp.SetRequestHeader("X-Requested-With", 'XMLHttpRequest')
$oHttp.SetRequestHeader("Accept", 'application/json, text/javascript, */*; q=0.01')
$oHttp.SetRequestHeader("Sec-Fetch-Mode", 'cors')
$oHttp.Send()
$sTanks = StringRegExp($oHttp.ResponseText, '"items": \[(.*?)\]', 3)[0]
;ConsoleWrite($sTanks & @CRLF)
$sRow = $sPlayerId & '|||' & $aPlayerNames[$iPlayerNumber] & '|||'
;ConsoleWrite($aPlayerNames[$iPlayerNumber] & ' --- > ' & $oHTTP.ResponseText & @CRLF & $sTanks & @CRLF) ; <<< ------------ Массив всех танков игрока
$aTanks = StringSplit($sTanks, "}, {", 3)
$bError = False
For $sTank In $aTanks
$sTank = StringStripWS($sTank, 3)
If $sTank == "" Then
ConsoleWrite("ERROR!!!" & @CRLF)
$bError = True
ExitLoop
EndIf
ConsoleWrite($sTank & @CRLF)
If StringRight($sRow, 3) <> '|||' Then $sRow &= '|||'
$sRow &= StringRegExp($sTank, 'vehicle_id": (\d+)', 3)[0] & "@" & StringRegExp($sTank, 'damage_per_battle": (\d+)', 3)[0]
Next
If Not $bError Then
FileWrite($hFile, $sRow & @CRLF)
;ConsoleWrite($sRow & @CRLF)
EndIf
Next
EndIf
Next
Next