你好。以下两个代码都从墙上返回同一帖子的评论。不同之处在于第一个返回 100 条评论一次,而第二个返回最多 2500 条。问题是将这个 25 倍迭代移动到第一个代码,因为使用第一个代码也可以提取一个评论单个用户通过他的 id 以及另外 - 在不指定其 id 的情况下访问帖子 - 通过数字,而参数中的第二个代码需要帖子的确切 ID。
代码 #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。你有两种风格混合(虽然pythonic风格盛行)
在js中比较值最好使用
===
而不是==
也许
tries_count
您应该使用相同的输入参数 (Args.tries_count
):这将允许您改变下载评论的数量值得不要愚蠢地发送 25 个请求,而是检查答案,并收到一个空答案,停止加载网络
我没有对代码进行太多更改以适应我的愿景,因此所做的更改更加明显/明显,此外,我不在您的项目范围内;如果您愿意,请自行更改。有改进的余地...