Здравствуйте. Оба следующих кода возвращают комментарии к одному посту со стены. Разница в том, что первый однократно возвращает 100 комментариев к посту, а второй — до 2500. Вопрос заключается в переносе этой 25-кратной итерации в первый код, так как с первым кодом можно также извлекать комментарии отдельного пользователя по его айди и кроме того — обращаться к посту без указания его айди — по номеру, тогда как второму коду в аргументах требуется точный айди поста.
КОД №1:
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; // НА ОБРАБОТКЕ 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;
КОД №2:
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};
думаю, что-то вроде кода ниже должно сработать
Попутные замечания
стоит поправить стиль: в js обычно используется camelCase в именах переменных, а не python_style. У вас смешаны оба стиля (хотя питоновский стиль преобладает)
для сравнения значений в js лучше использовать ===
, а не ==
возможно, стоит tries_count
сделать так же входным параметром (Args.tries_count
): это позволит варьировать количество скачиваемых комментов
стоило бы не тупо слать 25 запросов, а проверять ответ, и получив пустой ответ прекращать нагружать сеть
Сильно менять код под своё видение я не стал, чтоб внесённые изменения были виднее/очевиднее, к тому же я не в контексте вашего проекта; если захотите - поменяете сами. тут есть что улучшить...
var owner_id = Args.owner_id;
var user_id = Args.user_id;
var offset = Args.offset;
var post_count = Args.post_count;
var comments_count = Args.comments_count;
if (post_count == null)
post_count = 1; // НА ОБРАБОТКЕ 1 ПОСТ
// Получаем список постов
var posts = API.wall.get({
"owner_id": owner_id,
"offset": offset,
"count" : 100,
});
var postIndex = 0;
var userComments = {};
while(postIndex < posts.items.length && postIndex < post_count)
{
var post_id = posts.items[postIndex].id;
var tries_count = 25;
var try_nmb = 0;
var comments = [];
while (comments.length < comments_count && try_nmb < tries_count)
{
comments = comments + API.wall.getComments({
"owner_id": owner_id,
"post_id": post_id,
"offset": offset+100*try_nmb,
"count": 100,
"need_likes":1})["items"];
try_nmb = try_nmb + 1;
}
var commentIndex = 0;
while(commentIndex < comments.length)
{
if (user_id == null || comments[commentIndex].from_id == user_id)
userComments.push(comments[commentIndex]);
commentIndex = commentIndex + 1;
}
postIndex = postIndex + 1;
}
return userComments;
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите почему не работает, у меня на странице 2 id со значением к примеру testСледующий код меняет только первое значение блока, почему, как...
На данный вопрос уже ответили:
У меня недавно появилась проблема, сайт некоторые элементы стал загружать после того как уже загрузилась страницаНапример, я захожу на яндекс...
Вопрос - есть определенные роуты, определенные с помощью стандартного метода роутинга AngularВ CanActivate я указываю свой guard