Vk api получить все посты группы

На днях стояла задача посчитать количество пользователей сайта vk.com, поделившихся определенным постом (т.е. количество репостов). Для этого существует приложение «Вирусоанализатор», но в процессе использования выяснилось, что оно не считает большое количество репостов (от 100 и более). Ползунок доходит почти до конца и на этом останавливается. А т.к. уже был объявлен конкурс на наибольшее количество репостов на определенную запись, то нужна была альтернатива. Которой не оказалось…

Поэтому пришлось обращаться к API Вконтакте и искать как реализовать данную задачу. Сразу скажу, что не пришлось создавать standalone-приложения для этой цели. Все получилось реализовать при помощи методов, не требующих access_token. Ниже представлен список методов API, используемых в данной задаче:

  • likes.getList — получение списка пользователей, который нажали «Мне нравится» или «поделились» постом
  • users.get — получение информации о пользователях по их uid или коротким именам
  • wall.get — получение новостей со страницы пользователя.

Из плюсов данного расчета можно выделить только то, что не нужно создавать приложение для этой цели.

Бот ВКонтакте на Python #1 | Парсинг ВКонтакте


Из минусов (если изучить эти API методы): неудобный поиск нашего репоста у пользователя. Вконтакте разрешает получить методом wall.get максимум 100 новостей. Разумеется данный метод поддерживает параметр offset (смещение по новостям), но все же я ограничился определенным количеством новостей для обработки (500 штук).

Некоторые возникшие проблемы:

Итак, нам нужно было данные о тех пользователях и их постах, которые поделились нашим репостом. Для получения этого списка используется метод API likes.getList, у которого есть параметр filter, принимающий два возможных значения:

  • likes — пользователи, которые нажали «Мне нравится»
  • copies — пользователи, которые поделились постом. Именно это и нужно.
Еще по теме:  Вконтакте вот это смешно

Но когда уже что-то было готово, выявилось, что данные, полученные при помощи API не сходятся с реальными.

Например, пользователь который «поделился» не доставался методом likes.getList?filter=copies, но находился в списке, которым просто «понравилась» запись. К тому попался еще один пользователей с ситуацией с точностью до наоборот.

Поэтому для более верных результатов пришло обрабатывать весь список (пользователи, нажавшие «Мне нравится» и «Поделиться»).

Ниже приведен класс, написанный на PHP для поиска количества репостов:

Показать код

    ‘; $this->printProgress(‘Получаю список ID пользователей, сделавших репост. ‘); $this->getUsers($this->owner_id, $this->post_id, ‘copies’); $this->printProgress(‘Список ID успешно получен’, false); $copies = $this->users; $this->printProgress(‘Получаю список ID пользователей, сделавших лайк. ‘); $this->getUsers($this->owner_id, $this->post_id, ‘likes’); $this->printProgress(‘Список ID успешно получен’, false); foreach ($this->users as $id) < if (in_array($id, $copies)) continue; $copies[] = $id; >$this->users = $copies; $this->printProgress(‘Уникальных ID пользователей для получения их информации: ‘.count($this->users).»); $this->printProgress(‘Получаю информацию о пользователях по их ID. ‘); $usersWithInfo = $this->getUsersInfo($this->users); $this->printProgress(‘Информация была успешно получена’, false); $this->printProgress(‘Уникальных ID пользователей с информации: ‘.count($usersWithInfo).»); $this->printProgress(‘Подготавливаю массив с информацией о пользователях. ‘); $this->users = $this->remakeUsersArray($usersWithInfo); $this->printProgress(‘Массив успешно сформирован’, false); $this->printProgress(‘Начинаем искать репосты у пользователей. ‘); $k = 1; foreach ($this->users as $id => $data) < $this->printProgress(».$k.’) Обрабатывается пользователь: id’.$id.’ — ‘.$data[‘last_name’].’ ‘.$data[‘first_name’].»); $this->getUsersPosts($id); if ($this->find) < $this->printProgress(‘Определяем количество репостов #’.$this->findPost.’ у пользователя. ‘); $this->getUsers($id, $this->findPost, ‘copies’, 0, true); $status = ‘countReposts > 0) $status .= ‘ style=»font-size: 20px;»‘; $status .= ‘>Количество репостов #’.$this->findPost.’: ‘.$this->countReposts.»; $this->printProgress($status, false); $this->users[$id][‘count_reposts’] = $this->countReposts; //тут можно добавлять $this->user[$id] в сессию > $k++; > $this->printProgress(‘Поиск репостов завершен’, false); > >

Вышеприведенный класс позволяет получить количество репостов с пользовательскими данными. Подобным образом можно считать и лайки (необходимо лишь установить ?filter=likes)

Еще по теме:  Как сделать кликабельное слово в ВК в посте

VK API — Урок photos.get как получить все фотографии из альбома пользователя и группы через php


Данное решение — очень удобный вариант отображения данных при встройке на свой сайт, при проведении различных викторин и конкурсов. К примеру мы это реализовали так

Источник: savepearlharbor.com

Как получить список постов в определенной группе в вк с помощью vk api?

Доброго времени суток!Скажите,как можно получить список ссылок на посты или же сами посты в определенной группе посредством vk api?Заранее спасибо!

  • Вопрос задан более трёх лет назад
  • 2884 просмотра

Решения вопроса 1

Воспользоваться методом wall.get VK API (https://vk.com/dev/wall.get).
На PHP примерно так:

var_dump(wallGet($owner_id, $count)); //должен вывести массив записей сообщества $owner_id, в количестве $count function wallGet($owner_id, $count) < $result = api(‘wall.get’, array( ‘owner_id’ =>-(int)$owner_id, ‘count’ =>(int)$count, )); if ($result !== false) < return $result[‘items’]; >else < return false; >> function api($method, $params) < $params[‘access_token’] = $access_token; $params[‘v’] = $api_version; $url = ‘https://api.vk.com/method/’ . $method; if (!function_exists(‘curl_init’)) < die(‘ERROR: CURL library not found!’); >$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_HTTPHEADER, array( «User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)», «Accept-Language: en-us,en;q=0.5>» )); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $json = curl_exec($ch); $error = curl_error($ch); if ($error) < error_log($error); return false; >curl_close($ch); $response = json_decode($json, true); if (!$response || !isset($response[‘response’])) < error_log($json); return false; >return $response[‘response’]; >

Ответ написан более трёх лет назад

Нравится 1 2 комментария

Источник: qna.habr.com

Получение всех поcтов группы вКонтакте

Проблема: нужно получить информацию о всех постах группы вКонтакте (Python 3 + VK API). Дело в том, что метод wall.get позволяет получит информацию максимум о 100 постах. P.S. Заранее cпаcибо.

Еще по теме:  Что обозначает в ВК

Отслеживать

1,732 1 1 золотой знак 21 21 серебряный знак 41 41 бронзовый знак

задан 9 авг 2016 в 11:47

Вадим Николаев Вадим Николаев

35 5 5 бронзовых знаков

Используйте offset : new.vk.com/dev/wall.get

9 авг 2016 в 12:44

не cовcем понял Ваc , как именно это иcпользовать ?Объяcни , еcли еcть время)

9 авг 2016 в 12:52

Организовать цикл. Собрать первые сто постов, потом ещё сто — и так далее, пока не соберёте все посты.

9 авг 2016 в 12:54

Извини за назойлевоcть , но не помешал бы пример

9 авг 2016 в 13:44

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

def do_vk_request(parameters, method_name, need_token=True): global requests if need_token: url = base_url + method_name + ‘?’ + urllib.parse.urlencode(parameters) + stub else: url = base_url + method_name + ‘?’ + urllib.parse.urlencode(parameters) + ‘https://ru.stackoverflow.com/questions/553558/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2%D1%81%D0%B5%D1%85-%D0%BF%D0%BEc%D1%82%D0%BE%D0%B2-%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B-%D0%B2%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5″ target=»_blank»]ru.stackoverflow.com[/mask_link]

Рейтинг
( Пока оценок нет )
Загрузка ...