Что нового

Script Выгрузка списка игроков с сайта

TiranCool

Новичок
Сообщения
79
Репутация
0
Версия 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
 
Верх