аватар question@mail.ru · 01.01.1970 03:00

Как получить комментарии пользователя, оставленные в конкретном сообществе в vk

Как получить все комментарии конкретного пользователя, оставленные на стене под постами в конкретном сообществе в vk?

Я рассмотрел все методы, существующие в vk api и пока не нашел способа выполнить данную задачу.

В качестве исходных данных в этой задаче даны id пользователя и id сообщества.

Вот пример того, как я это пытался реализовать:

for i in range(200):    url = ""https://api.vk.com/method/wall.get?owner_id=%s&offset=%s&count=1"" % (self.text1.toPlainText(), i)    response = requests.get(url).text    parsed_string = json.loads(response)    url1=""https://api.vk.com/method/wall.getComments?owner_id=%s&post_id=%s&count=100"" %(self.text1.toPlainText(), parsed_string['response'][1]['items']['id'])    response1 = requests.get(url1).text    parsed_string1 = json.loads(response1)    for j in range(1, len(parsed_string1['response'])):        if parsed_string1['response'][j]['items']['from_id']==self.text2.toPlainText():            item1 = QTableWidgetItem(parsed_string1['response'][j]['items']['text'])            item2 = QTableWidgetItem(str(datetime.datetime.fromtimestamp(parsed_string1['response'][j]['items']['date'])))            self.tablewidget.setItem(i-1, 0, item1)            self.tablewidget.setItem(i-1, 1, item2)

Но в таком случае происходят слишком частые запросы к серверу, да и этот вариант слишком муторный. Подскажите, пожалуйста, в каком направлении мне двигаться и какие у вас есть мысли по этой теме.

аватар answer@mail.ru · 01.01.1970 03:00

VK API позволяет получить комментарии только для определенного объекта за один запрос. Например, можно получить список комментариев к конкретному посту на стене с помощью метода wall.getComments. Из этого списка нужно будет отобрать комментарии нужного пользователя.

Чтобы получить комментарии сразу к нескольким постам можно воспользоваться хранимыми процедурами, либо методом . Метод execute в качестве параметра принимает код хранимой процедуры и выполняет его. ВКонтакте поддерживает хранимые процедуры с возможностью до 25 обращений к бд внутри одной процедуры. Таким образом мы можем получить за раз комментарии сразу к нескольким постам.

Как написать процедуру


Для этого можно воспользовать функционалом, который предоставляет ВК. Первым делом Вам понадобится приложение для доступа к API. Создать его можно - кнопка Создать приложение. После создания зайдите в редактирование приложения, перейдите в раздел Хранимые процедуры и нажмите Добавить новую процедуру.

Теперь нужно написать саму процедуру. Следующая процедура будет возвращать комментарии конкретного пользователя к 10 постам:

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;}retu userComments;

Как вызвать хранимую процедуру


Вызвать можем 2мя способами:

  • Через созданное ранее приложение. Это возможно только с помощью токена данного приложения.
  • Через метод execute. Подойдет токен любого VK приложения.

Соответственно для получения списка комментраиев Вам нужно обратиться:

  • В первом случае к https://api.vk.com/method/execute.getCommentsFromPosts, передав соответствующие параметры.
  • Во втором к https://api.vk.com/method/execute, передав в качетве параметра code содержимое хранимой процедуры.

Последние

Похожие