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

Дублирование фрагмента JS-кода с условием

Метки: [без меток]
2018-03-07 19:17:42 [обр] DizDiz[досье]

Привет! Следующий код представляет собой процедуру для execute (https://vk.com/dev/execute), с помощью которой можно возвращать комментарии к посту ВКонтакта, по его номеру от первого поста в сообществе (то есть, без указания айдишника поста). Также он возвращает только комментарии отдельного пользователя, если его айди указать в user_id. А за счёт извлечения постов по порядковым номерам — во-первых, избавляет от необходимости указывать в аргументах и получать точные ИД-постов заранее, а во-вторых, позволяет отслеживать и накапливать на inoreader.com комментарии со стен чужих сообществ. То есть, достаточно будет на feed43.com создать RSS-ленту с offset=1 в аргументах, потом вторую ленту с offset=2 (и так далее — в меру необходимости), а затем на inoreader.com объединить эти ленты в одну непрерывную и получать примерно получасовые обновления.

Проблема заключается в том, что код возвращает лишь первую сотню комментариев, хотя возможности execute позволяют это число увеличить, в чём и прошу посодействовать. Для этого, как гуманитарию представляется, к фрагменту кода, где получают сто комментариев, надо добавить offset=0, потом запомнить результаты и продублировать фрагмент с получением следующей сотни комментариев, но уже с добавлением offset=100, и так далее. Что будет примерным выражением (потому что вместо ИД поста "8331059" — в коде достаточно указать его номер на стене сообщества) следующих команд:

https://api.vk.com/method/wall.getComments?owner_id=-29534144&post_id=8331059&offset=0&count=100&v=5.35
https://api.vk.com/method/wall.getComments?owner_id=-29534144&post_id=8331059&offset=100&count=100&v=5.35
...

Сам код:

    // 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,
                                   // здесь, возможно, потребуется "offset": 0,
            "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;
Powered by POEM™ Engine Copyright © 2002-2005