Получение комментариев поста на 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, время: 07:17. |