Вы можете использовать функцию для увеличения идентификаторов для объединения на базовый URL.Сайт блокируется / блокируется, если вы запрашиваете слишком быстро / возможно слишком много раз.Посмотрите документацию для каких-либо советов по этому поводу.
Я покажу, как вы можете получить все.Я включаю тестовый пример для 1–5 запросов (раскомментируйте, чтобы получить полное количество запросов. Примечание. Я даю вам строку для настройки, которая позволяет добавлять с задержкой каждые x запросов, чтобы попытаться избежать троттлинга / блокировки.Вероятно, до того, как это произойдет, число будет достаточно низким.
Позже вы можете переместить это в класс для хранения объекта xmlhttp и предоставить ему такие методы, как getItems. Пример здесь .
Option Explicit
Public Sub WriteOutBattleInfo()
Const BASE_URL As String = " https://www.etheremon.com/api/monster/get_data?monster_ids="
Const END_COUNT As Long = 48000
Const BATCH_SIZE As Long = 99
Dim numberOfRequests As Long, i As Long, j As Long, ids As String
Dim headers(), r As Long, json As Object, key As Variant, ws As Worksheet, battleStats As Object
Set ws = ThisWorkbook.Worksheets("Sheet1")
headers = Array("Monster #", "Name", "Total Level", "Perfection", "Catch Number", "HP", "PA", "PD", "SA", "SD", "SPD")
numberOfRequests = Application.WorksheetFunction.RoundDown(END_COUNT / BATCH_SIZE, 0)
ids = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99"
Dim results()
ReDim results(1 To END_COUNT, 1 To 11)
r = 1
With CreateObject("MSXML2.XMLHTTP")
For i = 1 To 5 'numberOfRequests + 1
If i Mod 10 = 0 Then Application.Wait Now + TimeSerial(0, 0, 1)
If i > 1 Then ids = IncrementIds(ids, BATCH_SIZE, END_COUNT)
.Open "GET", BASE_URL & ids, False
.send
Set json = JsonConverter.ParseJson(.responseText)("data")
For Each key In json.keys
results(r, 1) = key
results(r, 2) = json(key)("class_name")
results(r, 3) = json(key)("total_level")
results(r, 4) = json(key)("perfect_rate")
results(r, 5) = json(key)("create_index")
Set battleStats = json(key)("total_battle_stats")
For j = 1 To battleStats.Count
results(r, j + 5) = battleStats.item(j)
Next j
r = r + 1
Next
Next
End With
ws.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
ws.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End Sub
Public Function IncrementIds(ByVal ids As String, ByVal BATCH_SIZE As Long, ByVal END_COUNT) As String
Dim i As Long, arrayIds() As String
arrayIds = Split(ids, ",")
For i = LBound(arrayIds) To UBound(arrayIds)
If CLng(arrayIds(i)) + BATCH_SIZE <= END_COUNT Then
arrayIds(i) = arrayIds(i) + BATCH_SIZE
Else
ReDim Preserve arrayIds(0 To i - 1)
Exit For
End If
Next
IncrementIds = Join(arrayIds, ",")
End Function