Как получить больше 100 постов из сообщества через vk api?

Рейтинг: 1Ответов: 1Опубликовано: 14.03.2023

Никак не получается получить больше 100 постов (а именно 2000) из группы в вк из-за ограничения метода. Уже хотела просто 20 раз одну и ту же функцию выполнить с offset=100, а потом мёржить, но это слишком костыльно. Цикл никак не получается написать, execute тоже. Вот мой код, который собирает 100 постов:

group_id = '-175798749'
y = requests.get('https://api.vk.com/method/wall.get', params={
    'access_token':token,
    'v':5.131,
    'owner_id': group_id, 
    'offset': 0,
    'count': 2000}).json()
data = y
json_str = json.dumps(data)
resp = json.loads(json_str)
print(resp)
print(resp['response'])
data_items = str(resp['response'])
df = pd.DataFrame(y['response']['items'])

Ответы

▲ 0Принят

К сожалению, VK не позволит получить больше, чем 100 через один запрос VK API. Но, для решения данной задачи, существуют VKScript (aka execute). Через него можно делать до 25 запросов к API в рамках одного запроса. То есть это не будет затрагивать лимиты запросов токена.

Вот так можно реализовать хранимую процедуру для решения вашей задачи:

var responses = [],
    i = 0;
while (i < 20) {
  responses = responses + API.wall.get({
    "owner_id": Args.owner_id,
    "offset": i * 100,
    "count": 100
  }).items;
  i = i + 1;
}
return responses;

И, тогда, код на python будет выглядеть так:

code = """
var responses = [],
    i = 0;
while (i < 20) {
  responses = responses + API.wall.get({
    "owner_id": Args.owner_id,
    "offset": i * 100,
    "count": 100
  }).items;
  i = i + 1;
}
return responses;
"""

group_id = '-175798749'
y = requests.get('https://api.vk.com/method/execute', params={
    'access_token': token,
    'code': code
    'v': 5.131,
    'owner_id': group_id}).json()
...