Вывод записей со стены сообщества Вконтакте на PHP
25

Вывод записей со стены сообщества Вконтакте на PHP

Вчера вечером, один человек попросил вывести записи со стены сообщества вконтакте на его сайт, который написан на языке программирования PHP. Проблема заключалась в том, что его морозил исполнитель, который то кормил завтраками, то не хотел делать, а то просто просил данные от его страницы вконтакте. Так вот я просто и популярно распишу до мелочей, как вывести записи сообщества vk на своем сайте с помощью php, причем бесплатно!

 

По сути можно вывести не только новости, но и всё что угодно и не обязательно в группе. Но для этого уже читайте официальную документацию VK API.

 

Итак поехали, немного о том, что мы с вами в данной статье будем делать:

  1. Создадим Standalone-приложение и возьмем его token
  2. Сформируем ссылку-запрос для получения данных в json формате используя VK API
  3. Напишем небольшой скрипт на php и в нем выведем информацию, обработав правильно запрос с информацией

Вот собственно и всё по нашему плану, теперь перейдем к реализации. А начнем мы по порядку с самого первого пункта.

 

1. Создадим Standalone-приложение и получим его токен:

Для создания приложения можете в управление приложениями, в меню вы найдете пункт "Управление" - туда то вам и надо.

 

Если у вас нет такого пункта, не отчаивайтесь. Вы можете включить его показ в настройках аккаунта вк, либо можете перейти просто по ссылке: Управление приложениями вк.

 

Нажимаем кнопочку "Создать приложение" и на следующей странице вводим название приложения и выбираем тип "Standalone-приложение", нажимаем кнопку "Подключить приложение". 

Создание Standalone-приложения вконтакте

Идем дальше, нам нужно получить наш token этого приложения, который мы будем использовать в нашем запросе для получения информации через VK API. Для этого перейдем в редактирование приложения и откроем вкладку "Настройки". На ней нам нужно взять "Сервисный ключ доступа" - это и есть наш токен, для запроса.

Получаем токен Standalone-приложения вк

С первой задачей мы справились, можем двигаться дальше.

 

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 для вывода новостей VK

На этом всё, код можете допилить под себя и доделать вывод тех элементов, какие вам нужны. Спасибо за внимание, если остались какие-то вопросы или дополнения, пишите их в комментариях разберем, дополним...

Запись опубликована В категории: PHP

Shnapik

Вебмастер с опытом ищет приют! Возьмите меня, а то меня рвут!

25 комментариев

  1. как это конкретно воткнуть в PHP страницу сайта?
    ...
    все выше скопировал на свой сайт и нуль на выходе, пустая страница.

    • Извиняюсь, код поехал при сохранении. Поправил его весь, теперь должен работать. Также не забудьте сменить токен на свой, как его получить описано также в статье.

  2. Отличный код. Работает. Только в строке for ($i = 0; $i < count($wall); $i++) {
    < нужно заменить на стрелку <
    Может подскажите как вывести как вывести одну картинку или видео из поста

    • Спасибо, поправил код еще раз. Видимо с того раза еще не угледел, когда WP мне подправил все знаки в коде...

       

      Вот документация официальная по данному методу: wall.get

       

      Возможно подойдет вот это: $wall[$i]->photo

      Либо вот это: $wall[$i']->attachments

      А возможно и нет, нужно тестировать, в документации есть поля всякие, там уже нужно подгонять все это под себя. Если не справитесь, дайте знать в комментариях, сделаю токен еще раз и протестирую сам все. Результат скину конечно же сюда.

  3. Фото не выводит =(

    разобрался. + немного переделал Ваш код. =)

    Спасибо.

  4. приятная статья тем, что кратко и содержательно. А как думаете каким способом можно получить все до единой записи сообщества? использовать несколько проходов и использовать offset ?

    • Честно даже не знаю, не пробовал даже такое. У вконтакте лимит на 100 записей для получения, больше просто не даст получить. Может конечно offset и сработает, но не файт. Конструкция может примерно такая будет:

      for ($offset=1; $offset < count($array); $offset++) { 
           echo $array[$offset]; 
      }
  5. Здравствуйте. Как получит audio url, со стены в контакте?

    • Здравствуйте, по примеру выше мы получаем все данные. Нам нужно вычленить массив attachments, и уже в нем вытащить параметр audio. Скину пример чуть позже, заодно протестирую на работоспособность.

      • Вот так примерно это можно получить все, в дополнение к материалу статьи, однако VK заблокировал аудиозаписи в сторонних приложениях и получить ссылки на аудио не получится, получится получить ссылку на их заглушку, но по аналогии можно получить и фото и другие материалы из attachments:

        $attachments = $wall[$i]->attachments;
        foreach($attachments as $attachments){
        	echo $attachments->audio->url."<br>";
        }
          • Именно, про это я и говорил. ВК не дает вытянуть музыку теперь, её можно слушать только в официальных приложениях и на сайте Вконтакте.

  6. Пришлось конечно подправить целую кучу нюансов, но в основном код работает. Спасибо.

  7. Здравствуйте.как методом получить не одну фотку а все 7 фоток в записи?

    <?php
    $records_json=file_get_contents("https://api.vk.com/method/wall.getById?posts=-89869543_17797&extended=0&v=5.60");
    $records=json_decode($records_json, true);
     
    foreach($records['response'] as $record) {
    echo "".$record['text']."";
     
    // if (isset($record['attachment']['photo']['src_big']))
     
    echo "";
     
    echo "";
    }
    ?>
  8. Не понимаю куда нужно добавлять это

    attachments[0]->photo->photo_130."'>
    copy_history[0]->attachments[0]->photo->photo_130."'>
     
    attachments[0]->doc->photo_130."'>
    copy_history[0]->attachments[0]->doc->photo_130."'>
     
    attachments[0]->video->photo_130."'>
    copy_history[0]->attachments[0]->video->photo_130."'>

    В коде статьи куда вставить ?
    Не получается вывести ни аудио ни фото ни видео, только текст записей.
    Вообще ни один параметр из attachments не могу вывести...

    Покажите пожалуйста, что и куда добавить нужно.

    Вывел фото и картинки видео добавив 2 строчки.
    После кода

    https://vk.com/wall-{$group_id}_{$wall[$i]->id}

    Добавить

    attachments[0]->photo->photo_130."'>
    attachments[0]->video->photo_130."'>

    Но с аудио это не работает даже название трека не отображается, как вывести название музыки и исполнителя ?

    ".$wall[$i]->attachments[0]->audio->title."
    ".$wall[$i]->attachments[0]->audio->artist."

    Не работает!

    Добавить вот этот код

    attachments[0]->photo->photo_130."'>
    attachments[0]->video->photo_130."'>
     
    <img style='vertical-align: top;' src='".$wall[$i]->attachments[0]->photo->photo_130."'>
     
    <img style='vertical-align: top;' src='".$wall[$i]->attachments[0]->video->photo_130."'>

    Как вывести название музыки и исполнителя ?
    И как вывести записи со страницы пользователя, если эта запись репост из сообщества или другого пользователя (репосты) ?

    Код из комментария похоже вообще не нужен...

    Просто нужно добавить:

    attachments[0]->photo->photo_130."'>
    copy_history[0]->attachments[0]->photo->photo_130."'>
     
    attachments[0]->doc->photo_130."'>
    copy_history[0]->attachments[0]->doc->photo_130."'>
     
    attachments[0]->video->photo_130."'>
    copy_history[0]->attachments[0]->video->photo_130."'>

    Сразу после кода:

    https://vk.com/wall-{$group_id}_{$wall[$i]->id}

    Это выводит фото гифку в виде картинок (если нужна анимация вместо doc->photo_130 надо doc->url) и выводит картинку от видео записи + если запись это репост, то тоже самое выводит.

    Но вот с аудио... не понимаю, почему название даже не отображает...

    • Не нужно писать столько комментариев, лучше в одном всё изложить максимально понятно и ясно.

       

      Поясняю...

      Суть кода в комментариях - это пример вывода, это не значит, что именно так делать нужно. Фнутери изначального foreach, можно использовать то что в комментариях, или же приравнять в первом foreach, attachment к переменной единой и воспользоваться вторым foreach из комментария.

       

      Что касается аудио, то у них не получится точно получить ссылку на аудио, с названием и т.п. не пробовал. Сказать точно не могу как именно и можно ли вообще. По идее можно, нужно смотреть API VK.

  9. Доброе утро, а не есть код постраничного вывода полученных данных запроса вк
    заранее спасибо

  10. Если речь идёт о постраничной навигации для получаемых записей. То можно конечно получить записи, посчитать количество, определить на какой странице и далее на следующей показывать те записи, что получены после предыдущей. Стандартная навигация. Это можно сделать с помощью любого класса или скрипта на php. Данная статья не про постраничную навигацию...

  11. Ребят кто смог выводить фото к записи со стены напишите пожалуйста код.

      • Здравствуйте. А меня очень сильно интересует такой вопрос. Можно ли вывести комментарии к постам сообщества, используя подобный пример. Просто в API я нашел только вывод комментариев одного поста.А мне нужно из нескольких (например ста постов)

        • Здравствуйте, про такой метод не слышал в их API, скорее всего это не возможно.

          • Я нашел такой способ через type:reply

            Перейти на сторонний сайт (клик).

            То есть мы получаем вот такую ссылку https://vk.com/wall-57846937?q=type%3Areply

            Где 57846937 ID сообщества

            В итоге на самой странице в вк выводяться комментарии.Там же можно выбрать дату с какой отображать комментарии. Но это все происходит на страницы в вк. А мне нудно все эти комментарии забрать к себе на сайт. Может как то можно это осуществить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *