Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Извлечение из сообществ ВК комментариев пользователя

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Есть интересная процедура для execute (ниже воспроизвожу код к этой теме), которая позволяет извлекать из сообществ комментарии определенного пользователя — либо всё сразу, если параметр user_id не был передан. Запускаю с шагом "10" вот так — на некоторых сообществах работает:
 

Код:
 
https://api.vk.com/method/execute.getCommentsFromPosts?owner_id=<OWNER_ID>&user_id=<USER_ID>&offset=0&v=5.71&access_token=<TOKEN>
https://api.vk.com/method/execute.getCommentsFromPosts?owner_id=<OWNER_ID>&user_id=<USER_ID>&offset=10&v=5.71&access_token=<TOKEN>
https://api.vk.com/method/execute.getCommentsFromPosts?owner_id=<OWNER_ID>&user_id=<USER_ID>&offset=20&v=5.71&access_token=<TOKEN>
...

 
Но бывают сообщества, с которых эти команды возвращают ошибку "Too many operations" — по-видимому, из-за большого количества комментариев на них, которые процедурой не обрабатываются (так как берется определенное количество постов, а комментариев к ним слишком много).
 
Вопрос заключается в том, как уменьшить в коде приведенной ниже процедуры — значение постов так, чтобы также не было пропусков между цифровыми шагами? То есть, чтобы процедура брала постов меньше чем она берет сейчас (пусть берётся один пост), но чтобы следующая команда продолжала с комментария, на котором остановилась предыдущая, и таким образом, получался бы последовательный перебор страниц без пропусков?  

Код:
 
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 = 10;
     
    // Получаем список постов
    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;
 

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 13:34 25-02-2018 | Исправлено: D1D1D1D, 13:36 25-02-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
не надоело создавать разные темы по одному и тому же поводу?  
 

Цитата:
То есть, чтобы процедура брала постов меньше чем она берет сейчас (пусть берётся один пост)

ну так укажите другое число
Цитата:
        var comments = API.wall.getComments({  
            "owner_id": owner_id,  
            "post_id": post_id,  
     
            "count" : 100,
        });  


Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 22:41 25-02-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
В другой теме, всё-таки, была другая проблема.
 
Спасибо, потестирую. Получается, другие значения count, в строчках post_count = 10; и втором "count" : 100, — можно не трогать?

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 06:19 26-02-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
Получается, другие значения count

не знаю, что получается у вас, но в API явно сказано что это
https://vk.com/dev/wall.getComments
https://vk.com/dev/wall.get

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 06:25 26-02-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Точно: процедура ищет только среди первых ста комментариев у указанного числа постов (post_count = *;), пропуская сто первый и все последующие коммы и переходя к следующему посту. Это не то, что было нужно.
 
Может есть возможность следующую процедуру, возвращающую 500 записей со стены за раз (путём вызова 5 методов подряд) — приспособить для получения комментариев из одного поста? То есть, в процедуре, приведенной выше — указать обрабатывать 1 пост за раз, но комментарии из него доставать по примеру ниже? —

Код:
 
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;  

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 07:50 26-02-2018 | Исправлено: D1D1D1D, 07:51 26-02-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
приспособить для получения комментариев из одного поста

https://vk.com/dev/wall.getComments

Цитата:
Возвращает список комментариев к записи на стене.

что не так?
 
ps: мне безразличны соц сети, поэтому что там является постом, а что комменатриями я не знаю.

Всего записей: 15024 | Зарегистр. 20-09-2014 | Отправлено: 07:54 26-02-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
Если получать комментарии так — то придется делать множество запросов. Тогда как с вызовом сразу нескольких (до 25-ти) методов внутри execute — понадобится только один запрос. Поэтому хотелось, чтобы первая процедура брала один  пост и последовательно получала подстраницы коммов к нему, не ограничиваясь первой сотней.
 
Пост и комментарии — это примерно как у нас на форуме, — в самом верху основное стартовое сообщение, а внизу комментарии к нему.
 
Добавлено:
Есть ещё такая процедура, получающая 2500 коммов к посту. Может её можно будет объединить с первой процедурой? —  
 

Код:
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};

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 08:02 26-02-2018 | Исправлено: D1D1D1D, 08:05 26-02-2018
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Извлечение из сообществ ВК комментариев пользователя


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru