Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение комментариев поста на VK методом execute (VK API) (https://javascript.ru/forum/misc/72795-poluchenie-kommentariev-posta-na-vk-metodom-execute-vk-api.html)

hdma 26.02.2018 16:44

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

// [url]https://ru.stackoverflow.com/questions/604524/[/url]
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 комментариев, требует явного указания идентификатора поста:


// [url]https://ru.stackoverflow.com/questions/780304/[/url]
// 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;


Часовой пояс GMT +3, время: 11:06.