Вчера вечером, один человек попросил вывести записи со стены сообщества вконтакте на его сайт, который написан на языке программирования PHP. Проблема заключалась в том, что его морозил исполнитель, который то кормил завтраками, то не хотел делать, а то просто просил данные от его страницы вконтакте. Так вот я просто и популярно распишу до мелочей, как вывести записи сообщества vk на своем сайте с помощью php, причем бесплатно!
По сути можно вывести не только новости, но и всё что угодно и не обязательно в группе. Но для этого уже читайте официальную документацию VK API.
Итак поехали, немного о том, что мы с вами в данной статье будем делать:
- Создадим Standalone-приложение и возьмем его token
- Сформируем ссылку-запрос для получения данных в json формате используя VK API
- Напишем небольшой скрипт на php и в нем выведем информацию, обработав правильно запрос с информацией
Вот собственно и всё по нашему плану, теперь перейдем к реализации. А начнем мы по порядку с самого первого пункта.
1. Создадим Standalone-приложение и получим его токен:
Для создания приложения можете в управление приложениями, в меню вы найдете пункт "Управление" - туда то вам и надо.
Если у вас нет такого пункта, не отчаивайтесь. Вы можете включить его показ в настройках аккаунта вк, либо можете перейти просто по ссылке: Управление приложениями вк.
Нажимаем кнопочку "Создать приложение" и на следующей странице вводим название приложения и выбираем тип "Standalone-приложение", нажимаем кнопку "Подключить приложение".
Идем дальше, нам нужно получить наш token этого приложения, который мы будем использовать в нашем запросе для получения информации через VK API. Для этого перейдем в редактирование приложения и откроем вкладку "Настройки". На ней нам нужно взять "Сервисный ключ доступа" - это и есть наш токен, для запроса.
С первой задачей мы справились, можем двигаться дальше.
2. Сформируем ссылку-запрос для получения данных в json формате используя VK API:
Теперь нам нужно сформировать ссылку-запрос с помощью которого мы будем получать данный, используя VK API. Получать как вы уже поняли, мы будем в json формате, вконтакте стандартно отдает информацию через API с помощью json.
Ниже я привел запрос, который использовал для получения данных, в ходе этого урока мы и будем с ним работать:
https://api.vk.com/api.php?oauth=1&method=wall.get&owner_id=id_группы&count=количество_записей&v=5.67&access_token=токен |
Думаю тут предельно понятно всё, но уточню некоторые моменты:
method - здесь указываем используемый метод, мы в данный момент используем wall.get.
owner_id - Здесь мы указываем ID группы или страницы пользователя вк. Будьте внимательнее, если мы хотим использовать группу (сообщество) и работать с ним, то перед ID должен стоять знак "-" и будет это выглядеть примерно так "-87165069".
count - Количество получаемых данных. Указывайте целое число от 1 до 100. Больше 100 получить не получится, ограничения VK API.
access_token - Токен, который мы получали ранее в ходе 1 пункта. Он и будет давать возможность работать с данными.
v=5.67 - Версия используемого VK API. Можете в целом не менять.
На этом здесь всё, остальную информацию по VK API можете найти на сайте вк, в разделе для разработчиков. А тем временем идем дальше...
3. Напишем небольшой скрипт на php и в нем выведем информацию, обработав правильно запрос с информацией:
Данные при получении по такой вот ссылке (из пункта 2), мы получаем в формате json, так уж сложилось, что VK API отдает всю инфу в таком типе... Нам же нужно преобразовать всё в массив, для дальнейшей обработки и значения этого массива вывести.
Ниже вы можете увидеть скрипт, которые я написал, каждого значение-настройка вынесены в самый верх файла, для удобства. Каждая строка подписана и думаю у вас не возникнет проблем с данным кодом.
// ID нашего сообщества или страницы вконтакте $wall_id="-86529522"; // Удаляем минус у ID групп, что мы используем выше (понадобится для ссылки). $group_id = preg_replace("/-/i", "", $wall_id); // Количество записей, которое нам нужно получить. $count = "3"; // Токен $token = "2e73ed992e73ed992e73ed99da2e2e80f322e732e73ed997700261c9465df4bf4a1eeff"; // Получаем информацию, подставив все данные выше. $api = file_get_contents("https://api.vk.com/api.php?oauth=1&method=wall.get&owner_id={$wall_id}&count={$count}&v=5.58&access_token={$token}"); // Преобразуем JSON-строку в массив $wall = json_decode($api); //var_dump($wall); // Получаем массив $wall = $wall->response->items; // Обрабатываем данные массива с помощью for и выводим нужные значения for ($i = 0; $i < count($wall); $i++) { echo " <b>".($i + 1)."</b>. <i>".$wall[$i]->text."</i><br /> ".date("Y-m-d H:i:s", $wall[$i]->date)."<br /> https://vk.com/wall-{$group_id}_{$wall[$i]->id} "; } |
Немного информации по этому коду:
$wall[$i]->date - Получение даты, где date - название поля, которое нам нужно получить. С остальными все стандартно, меняем название поля из массива на нужное и получаем значение. На странице с информацией по wall.get VK API - можете найти названия полей и пример детального кода.
Вот собственно и всё. Для наглядного примера я взял группу VK FEST, так как в моей нет никаких записей с текстом, а вывести он сможет только дату и ссылку на пост (про картинки и прочие медиа я не говорю).
На этом всё, код можете допилить под себя и доделать вывод тех элементов, какие вам нужны. Спасибо за внимание, если остались какие-то вопросы или дополнения, пишите их в комментариях разберем, дополним...
как это конкретно воткнуть в PHP страницу сайта?
...
все выше скопировал на свой сайт и нуль на выходе, пустая страница.
Извиняюсь, код поехал при сохранении. Поправил его весь, теперь должен работать. Также не забудьте сменить токен на свой, как его получить описано также в статье.
Отличный код. Работает. Только в строке for ($i = 0; $i < count($wall); $i++) {
< нужно заменить на стрелку <
Может подскажите как вывести как вывести одну картинку или видео из поста
Спасибо, поправил код еще раз. Видимо с того раза еще не угледел, когда WP мне подправил все знаки в коде...
Вот документация официальная по данному методу: wall.get
Возможно подойдет вот это:
$wall[$i]->photo
Либо вот это:
$wall[$i']->attachments
А возможно и нет, нужно тестировать, в документации есть поля всякие, там уже нужно подгонять все это под себя. Если не справитесь, дайте знать в комментариях, сделаю токен еще раз и протестирую сам все. Результат скину конечно же сюда.
Фото не выводит =(
разобрался. + немного переделал Ваш код. =)
Спасибо.
Всегда бы так:)
приятная статья тем, что кратко и содержательно. А как думаете каким способом можно получить все до единой записи сообщества? использовать несколько проходов и использовать offset ?
Честно даже не знаю, не пробовал даже такое. У вконтакте лимит на 100 записей для получения, больше просто не даст получить. Может конечно offset и сработает, но не файт. Конструкция может примерно такая будет:
Здравствуйте. Как получит audio url, со стены в контакте?
Здравствуйте, по примеру выше мы получаем все данные. Нам нужно вычленить массив attachments, и уже в нем вытащить параметр audio. Скину пример чуть позже, заодно протестирую на работоспособность.
Вот так примерно это можно получить все, в дополнение к материалу статьи, однако VK заблокировал аудиозаписи в сторонних приложениях и получить ссылки на аудио не получится, получится получить ссылку на их заглушку, но по аналогии можно получить и фото и другие материалы из attachments:
https://vk.com/mp3/audio_api_unavailable.mp3
Именно, про это я и говорил. ВК не дает вытянуть музыку теперь, её можно слушать только в официальных приложениях и на сайте Вконтакте.
Пришлось конечно подправить целую кучу нюансов, но в основном код работает. Спасибо.
Пожалуйста, рад помочь был:)
Здравствуйте.как методом получить не одну фотку а все 7 фоток в записи?
Не понимаю куда нужно добавлять это
В коде статьи куда вставить ?
Не получается вывести ни аудио ни фото ни видео, только текст записей.
Вообще ни один параметр из attachments не могу вывести...
Покажите пожалуйста, что и куда добавить нужно.
Вывел фото и картинки видео добавив 2 строчки.
После кода
Добавить
Но с аудио это не работает даже название трека не отображается, как вывести название музыки и исполнителя ?
Не работает!
Добавить вот этот код
Как вывести название музыки и исполнителя ?
И как вывести записи со страницы пользователя, если эта запись репост из сообщества или другого пользователя (репосты) ?
Код из комментария похоже вообще не нужен...
Просто нужно добавить:
Сразу после кода:
Это выводит фото гифку в виде картинок (если нужна анимация вместо doc->photo_130 надо doc->url) и выводит картинку от видео записи + если запись это репост, то тоже самое выводит.
Но вот с аудио... не понимаю, почему название даже не отображает...
Не нужно писать столько комментариев, лучше в одном всё изложить максимально понятно и ясно.
Поясняю...
Суть кода в комментариях - это пример вывода, это не значит, что именно так делать нужно. Фнутери изначального foreach, можно использовать то что в комментариях, или же приравнять в первом foreach, attachment к переменной единой и воспользоваться вторым foreach из комментария.
Что касается аудио, то у них не получится точно получить ссылку на аудио, с названием и т.п. не пробовал. Сказать точно не могу как именно и можно ли вообще. По идее можно, нужно смотреть API VK.
Доброе утро, а не есть код постраничного вывода полученных данных запроса вк
заранее спасибо
Если речь идёт о постраничной навигации для получаемых записей. То можно конечно получить записи, посчитать количество, определить на какой странице и далее на следующей показывать те записи, что получены после предыдущей. Стандартная навигация. Это можно сделать с помощью любого класса или скрипта на php. Данная статья не про постраничную навигацию...
Ребят кто смог выводить фото к записи со стены напишите пожалуйста код.
Привемеров в комментариях достаточно я думаю...
Здравствуйте. А меня очень сильно интересует такой вопрос. Можно ли вывести комментарии к постам сообщества, используя подобный пример. Просто в API я нашел только вывод комментариев одного поста.А мне нужно из нескольких (например ста постов)
Здравствуйте, про такой метод не слышал в их API, скорее всего это не возможно.
Я нашел такой способ через type:reply
Перейти на сторонний сайт (клик).
То есть мы получаем вот такую ссылку https://vk.com/wall-57846937?q=type%3Areply
Где 57846937 ID сообщества
В итоге на самой странице в вк выводяться комментарии.Там же можно выбрать дату с какой отображать комментарии. Но это все происходит на страницы в вк. А мне нудно все эти комментарии забрать к себе на сайт. Может как то можно это осуществить
Добрый день, прочитал статью, но многого не понял... как в html сформировать запрос, который будет передавать нам json данные и как присоединить к этому всему php обработчик? в моём случае, предпологается вывод последней записи на стене сообщества в блок на сайте, тоесть контент должен заполнить определённый блок, а именно ( <div class="vknews"></div> ). как это сделать?
p.s. блоку задан css стиль :
.vknews{
background-color: red;
margin: 20px auto;
width: 1000px;
height: 340px;
})
Немного мутно описана ваша идея. В целом можно подгружать последнюю запись из вк, формировать готовый html код и отправлять его клиенту. То есть в php скрипте сайта, получаем данные и заполняем ими переменную, далее передаем в формате json...