你好!有一个关于此答案中提出的解决方案的问题,该解决方案是关于接收在 vk 上的特定社区中留下的用户评论。似乎我在我的应用程序中复制了该过程,将第一篇文章的评论中的配置文件 ID 和随机用户的 ID 替换为此配置文件(更改了他们的位置),但每次都显示错误消息。请看一下:https ://i.stack.imgur.com/cixeP.png
此外,获取社区成员列表的以下代码(来自此处)使用相同的方法失败:
VK.init({
apiId: 6456476 // ID вашего приложения VK
});
var membersGroups = []; // массив участников группы
getMembers(30666517);
// получаем информацию о группе и её участников
function getMembers(group_id) {
VK.Api.call('groups.getById', {group_id: group_id, fields: 'photo_50,members_count', v: '5.27'}, function(r) {
if(r.response) {
$('.group_info')
.html('<img src="' + r.response[0].photo_50 + '"/><br/>'
+ r.response[0].name
+ '<br/>Участников: ' + r.response[0].members_count);
getMembers20k(group_id, r.response[0].members_count); // получаем участников группы и пишем в массив membersGroups
}
});
}
// получаем участников группы, members_count - количество участников
function getMembers20k(group_id, members_count) {
var code = 'var members = API.groups.getMembers({"group_id": ' + group_id + ', "v": "5.27", "sort": "id_asc", "count": "1000", "offset": ' + membersGroups.length + '}).items;' // делаем первый запрос и создаем массив
+ 'var offset = 1000;' // это сдвиг по участникам группы
+ 'while (offset < 25000 && (offset + ' + membersGroups.length + ') < ' + members_count + ')' // пока не получили 20000 и не прошлись по всем участникам
+ '{'
+ 'members = members + "," + API.groups.getMembers({"group_id": ' + group_id + ', "v": "5.27", "sort": "id_asc", "count": "1000", "offset": (' + membersGroups.length + ' + offset)}).items;' // сдвиг участников на offset + мощность массива
+ 'offset = offset + 1000;' // увеличиваем сдвиг на 1000
+ '};'
+ 'return members;'; // вернуть массив members
VK.Api.call("execute", {code: code}, function(data) {
if (data.response) {
membersGroups = membersGroups.concat(JSON.parse("[" + data.response + "]")); // запишем это в массив
$('.member_ids').html('Загрузка: ' + membersGroups.length + '/' + members_count);
if (members_count > membersGroups.length) // если еще не всех участников получили
setTimeout(function() { getMembers20k(group_id, members_count); }, 333); // задержка 0.333 с. после чего запустим еще раз
else // если конец то
alert('Ура тест закончен! В массиве membersGroups теперь ' + membersGroups.length + ' элементов.');
} else {
alert(data.error.error_msg); // в случае ошибки выведем её
}
});
}
你需要使用execute方法
该方法的文档非常清楚,该方法允许每个方法请求最多25 个API请求。 据我了解,您需要收集帖子中的所有评论(如果没有,请写在评论中)。 但是在这里您立即需要设置以下限制 :只有25 个请求,因此我们可以获得25 * 100条评论。(100 条因为对于 1 个对wall.getComments的请求,我们将获得不超过 100 条评论) 下一步是编写一个代码,该代码将从具体帖子。
此代码可以作为参数传递给执行(代码参数),以及与此参数一起传递的参数
post_id
和ower_id
其余部分。第二个选项是在您的应用程序中创建一个过程,并已使用为您的应用程序接收到的令牌调用它,使用参数调用此过程,
owner_id
其余post_id
部分。如何获得超过 2500 条评论?
为此,您只需要使用不同的参数多次调用此代码
offset
(不断增加 2500) python3中的示例:
需要注意的是,community id 应该用减号表示,例如
-1
。还值得一提的是,当多次调用同一个方法时,VK 会阻止对它的访问。