Xpoint
   [напомнить пароль]

Получение комментариев к посту ВКонтакта методом execute (VK API)

Метки: [без меток]
2018-02-27 09:42:22 [обр] DizDiz[досье]

Здравствуйте. Имеется ли процедура для execute, с помощью которой можно получать комментарии к посту, чей ID явно не указан? То есть, по номеру поста со стены? К примеру, по этому принципу работает следующий код (из Ответа отсюда), но выяснилось, что он возвращает лишь первую сотню комментариев —

// https://ru.stackoverflow.com/questions/604524/
var owner_id = Args.owner_id;
var user_id = Args.user_id;
var offset = Args.offset;
var post_count = Args.post_count;

if (post_count == null)
    post_count = 1;         // количество обрабатываемых постов

// Получаем список постов
var posts = API.wall.get({
    "owner_id": owner_id,
    "offset": offset,
    "count" : 100,
});

var i = 0;
var userComments = {};

while(i < posts.items.length && i < post_count)
{
    var post_id = posts.items[i].id;
    var comments = API.wall.getComments({
        "owner_id": owner_id,
        "post_id": post_id,

        "count" : 100,
    });

    var j = 0;
    while(j < comments.items.length)
    {
        if (user_id == null || comments.items[j].from_id == user_id)
            userComments.push(comments.items[j]);

        j = j + 1;
    }

    i = i + 1;
}

return userComments;

А вот этот код (отсюда), возвращающий 2500 комментариев, требует явного указания идентификатора поста:

// https://ru.stackoverflow.com/questions/780304/
// count  --> 2500 / по умолчанию --> 10
// offset --> 0, 2500, 5000, 7500 и тд
var owner_id = Args.owner_id;
var post_id = Args.post_id;
var offset = Args.offset;
var count = Args.count;

if(post_id == null || owner_id == null){
    return {"count": 0, "items": []};  // Если параметры не заданы, возвращаем пустой массив
}
if(count == null){
    count = 10; // Значение по умолчанию
}
if(offset == null){
    offset = 0; // Значение по умолчанию
}
var i = 0;
var items = [];
while(i < 25 && count > items.length){
    var cur_count = count - items.length;
    if(cur_count > 100){
        cur_count = 100;
    }
    items = items + API.wall.getComments({"owner_id": owner_id, "post_id": post_id, "offset": offset+100*i, "count": cur_count, "need_likes":1})["items"];
    i = i + 1;
}
return {"count": items.length, "items": items};

Вопрос заключается в совмещении функционала из обоих кодов, чтобы вызывать процедуру можно было с указанием смещения offset, а не с указанием номера поста. Может быть, для этого в первый код (настроенный на обработку одного поста за один раз) достаточно будет добавить последовательный вызов методов со смещением, как в следующем коде, получающем за раз 500 постов? —

var owner_id = Args.owner_id; 
var offset   = Args.offset; 
 
return 
    API.wall.get({ 
        "owner_id" : owner_id, 
        "count"    : 100, 
        "filter"   : "owner", 
        "offset"   : parseInt(offset) + 0 * 100 
    }).items +  
    API.wall.get({ 
        "owner_id" : owner_id, 
        "count"    : 100, 
        "filter"   : "owner", 
        "offset"   : parseInt(offset) + 1 * 100 
    }).items + 
    API.wall.get({ 
        "owner_id" : owner_id, 
        "count"    : 100, 
        "filter"   : "owner", 
        "offset"   : parseInt(offset) + 2 * 100 
    }).items +  
    API.wall.get({ 
        "owner_id" : owner_id, 
        "count"    : 100, 
        "filter"   : "owner", 
        "offset"   : parseInt(offset) + 3 * 100 
    }).items + 
    API.wall.get({ 
        "owner_id" : owner_id, 
        "count"    : 100, 
        "filter"   : "owner", 
        "offset"   : parseInt(offset) + 4 * 100 
    }).items;
Powered by POEM™ Engine Copyright © 2002-2005