Php скрипт автопостинга вконтакте

Граббер и автопостинг Вконтакте на PHP

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

Задачи которые выполняет скрипт

У вас есть сообщество в ВК и вам необходимо его наполнять контентом, но делать руками этого не хочется. Вы выбираете несколько тематических сообществ, настраиваете скрипт и ваше сообщество начинает наполняться контентом в автоматическом режиме.

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

Что умеет скрипт граббера и автопостинга

В выбранный промежуток времени проверять список указанных сообществ на наличие новых постов, копировать текст, фото, видео и другую информацию в ваше сообщество. Копирование вложений происходит с помощью перезагрузки через ваш сервер, на котором на изображения накладывается водяной знак – watermark (актуально в старой версии скрипта), после чего запись размещается в вашем сообществе.

Настройки граббера Вконтакте

Настройки граббера/парсера не вызовут у вас сложностей, достаточно делать все по инструкции которая размещена ниже.

  1. Регистрируем новый хостинг с поддержкой PHP7 и MySQL. Буду благодарен если зарегистрируетесь по моей реферальной ссылке: https://www.reg.ru/?rlink=reflink-42469
  2. Делегируем домен на хостинг
  3. Скачиваем архив со скриптом https://yakovtsov.ru/files/vkgrab.zip
  4. Распаковываем архив у себя на хостинге
  5. Создаем новую базу данных и заливаем в нее файл бэкапа – vkgrab.sql
  6. Открываем файл bot.php и вносим в него следующие настройки:

6.1. Настраиваем подключение к базе данных. Указываем имя пользователя, пароль и имя базы данных

6.2. Получаем сервисный ключ доступа. Для этого переходим по ссылке https://vk.com/apps?act=manage , нажимаем “Создать приложение” и заполняем данные: название, платформа = сайт, адрес сайта, базовый домен и нажимаем “подключить сайт”.

Переходим в настройки и копируем сервисный ключ доступа

Вставляем сервисный ключ доступа в переменную $vk_service_key

6.3. Получаем токен для работы с API Вконтакте. Переходим по адресу предварительно подставив свои данные (номер телефона и пароль):

https://api.vk.com/oauth/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=НОМЕР-ТЕЛЕФОНА&password=МОЙ-ПАРОЛЬ

Если у вас двухфакторная авторизация, то переходим по ссылке redirect_uri

Вводим код доступа и нажимаем “Отправить код”

Из адресной строки копируем все что после &access_token= и до &user_id=

Вставляем токен в переменную $vk_user_token

6.4. Вставляем ID вашего сообщества в переменную $vk_public_id. Чтобы узнать ID вашего сообщества – откройте ваше сообщество и перейдите в раздел “Статистика”. В адресной строке все что после stats?gid= и есть ID вашего сообщества;

Читайте также:  Table display in java

6.5. Вставляем ID пользователя в переменную $vk_user_id (с помощью которого был получен токен и который является администратором сообщества куда будет происходить постинг). Чтобы узнать ID пользователя, перейдите в раздел “Музыка”. Все что после audios и есть ID пользователя.

6.6. Добавляем список сообществ для парсинга. Домены сообществ добавляем через запятую в кавычках как показано в примере.

Узнать домен можно открыв страницу сообщества. Все что после https://vk.com/… и есть домен сообщества.

6.7. Сохраняем файл bot.php

7. Открываем адрес https://site.ru/vkgrab/bot.php, после чего в вашем сообществе должна появиться новая запись.

8. Добавить свой водяной знак можно заменив файл wm.png

9. Настроить публикацию поста можно на 171 строке в файле bot.php

На этом настройка скрипта завершена. Теперь при обращении к скрипту в вашем сообществе будет появляться новая запись.

Настройки автопостинга Вконтакте

После того как скрипт заработал нам необходимо настроить автопостинг. Для этого мы будем использовать планировщик заданий CRON. Я покажу на примере ISPmanager.

  1. Переходим в “Планировщик” и создаем новое задание
  2. В поле команда вставляем: wget -q -O – https://site.ru/vkgrab/bot.php > /dev/null 2>&1
  3. Выполнять – каждый час (можно выбрать любой промежуток)

После настройки планировщика в нашем сообществе ежечасно будет появляться новый контент.

Если у вас возникнут трудности с настройкой, пишите в комментариях или мне в телеграм.

Источник

API Вконтакте: автопостинг записей в сообщество Вконтакте

Сегодня мы с вами рассмотрим скрипт для автопостинга записей с сайта в сообщество Вконтакте. Вы научитесь работать с API вконтакте, создавать свои приложения, писать парсеры для отправки запросов в Вконтакте. Всю работу мы будем прописывать на языке PHP.

Для начала нам нужно создать приложение для настройки взаимодействия сайта через API.

Ссылка на страницу с конструктором для создания приложения – https://vk.com/apps?act=manage

Для связи Сайт -> API Вконтакте нам нужно создать Standalone-приложение

После создания приложения вам нужно зайти в настройки созданного приложения. И выписать из настроек данные: “id приложения“, “Защищённый ключ“, “Сервисный ключ доступа“.

После этого включаем наше приложение, включаем Open API и в появившихся полях указываем домен на котором будет расположен парсер.

Вот так должны выглядеть ваши настройки.

1. После создания приложения нам нужно получить специальный ключ для работы интеграции.Нам нужно получить секретный ключ и настроить права. Формируем URL подставляя данные своего приложения и вставляем его в браузер.

https://oauth.vk.com/authorize?client_id=ID_ПРИЛОЖЕНИЯ&display=page &redirect_uri=https://api.vk.com/blank.html&scope=offline,wall,photos &response_type=code

2. Запрашиваем access_token . Формируем новый URL, подставив client_id , client_secret и полученный выше код. В ответе получаем access_token .

https://oauth.vk.com/access_token?client_id=ID_ПРИЛОЖЕНИЯ &client_secret=ЗАЩИЩЕННЫЙ_КЛЮЧ&redirect_uri=https://api.vk.com/blank.html &code=СЕКРЕТНЫЙ_КОД

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

Читайте также:  Draw graphs with java

Автопостинг простых текстовых записей в сообщество

Скрипт я буду писать через PHP класс и назову его BotsTime_AutopostingVk

class BotsTime_AutopostingVk < /* токен для запросов */ public $token = "97a1b7bff17bd61309c109ac7e1231dasdfsdfe2dac84ac0254961fe8a5121e553b95eca754e8e889f7dbb4fe"; /* id приложения */ public $owner_id = -209887634; public $versionVk = "5.131"; /* ДЛЯ ОТПРАВКИ ЗАПРОСОВ */ public function sendQueryVk($method, $dataQuery) < $dataQuery["access_token"] = $this->token; $dataQuery["from_group"] = "1"; $dataQuery["owner_id"] = $this->owner_id $dataQuery["v"] = $this->versionVk; $ch = curl_init("https://api.vk.com/method/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo "Ошибка отправки запроса: " . curl_error($curl); return false; >else < return json_decode($html, true); >> >

Теперь давайте сделаем запрос. Массив $arrQuery передаётся в качестве второго аргумента для метода sendQueryVk. Данный метод делает API запрос, который передаёт данные на сервера Вконтакте, после чего добавляет в указанное сообщество новую запись с текстом “Тестовая запись”.

$vkBot = new BotsTime_AutopostingVk(); $arrQuery = [ "message" => "Тестовая запись", ]; $dataResult = $vkBot->sendQueryVk("wall.post", $arrQuery);

Автопостинг записей с изображениями в группу Вконтакте

Для автопостинга нам придётся полностью перебрать ранее изученное решение. Мы создадим дополнительные методы и перепишем уже созданные. Новое решение вы сможете использовать как для простых постов, так и постов с изображениями.

Класс мы оставляем – BotsTime_AutopostingVk. В новой версии мы только переписываем методы.

Отправка POST запросов в API Вконтакте

/* method - название метода (информация в документации Вконтакте) dataQuery - массив с параметрами запроса */ public function sendQueryVk_POST($method, $dataQuery = array()) < /* добавляем токен в массив запроса */ $dataQuery["access_token"] = $this->token; /* добавляем версию API вконтакте */ $dataQuery["v"] = $this->versionVk; $ch = curl_init("https://api.vk.com/method/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo "Ошибка отправки запроса: " . curl_error($curl); return false; >else < return json_decode($html, true); >>

Отправка GET запросов в API Вконтакте

public function sendQueryVk_GET($method, $dataQuery = array()) < $dataQuery["access_token"] = $this->token; $dataQuery["v"] = $this->versionVk; $ch = curl_init("https://api.vk.com/method/?" . http_build_query($dataQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); return $html; >

Методы для отправки информации в сообщество

/* ДЛЯ ПОСТИНГА ЗАПИСИ */ public function send_wall_post($dataQuery) < $dataQuery["from_group"] = "1"; $dataQuery["owner_id"] = $this->owner_id; return $this->sendQueryVk_POST("wall.post", $dataQuery); > /* ДЛЯ ПОЛУЧЕНИЯ URL ДЛЯ ЗАГРУЗКИ */ public function send_photos_getWallUploadServer($dataQuery) < $dataQuery["from_group"] = "1"; $dataQuery["owner_id"] = $this->owner_id; return $this->sendQueryVk_POST("photos.getWallUploadServer", $dataQuery); > /* ДЛЯ СОХРАНЕНИЯ ИЗОБРАЖЕНИЯ НА СЕРВЕРЕ VK */ public function send_photos_saveWallPhoto($dataQuery) < return $this->sendQueryVk_GET("photos.saveWallPhoto", $dataQuery); >

Автопостинг с добавлением изображения в запись сообщества Вконтакте

Добавление изображений в посты для сообществ проходит в 3 этапа:

  1. Получение ссылки
  2. Отправка объекта изображения по полученной, разрешённой ссылке
  3. Запрос на получения данных добавленного изображения
/* urlFile - ссылка на файл изображения на хостинге */ public function sendPhotoInVk($urlFile) < /* отправка запроса для получения ссылки на загрузку файла */ $arrQuery = [ "group_id" => $this->group_id, ]; $dataUploadParams = $this->send_photos_getWallUploadServer($arrQuery); $uploadUrl = $dataUploadParams["response"]["upload_url"]; /* -------------------- */ /* отправка изображения на сервер */ $curl_photo = curl_file_create($urlFile); $arrQuery = [ "photo" => $curl_photo ]; $ch = curl_init($uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $dataUploadParams = curl_exec($ch); curl_close($ch); $dataImage = json_decode($dataUploadParams, true); /* -------------------- */ /* получение информации о картинге с сервера */ $dataImage["group_id"] = $this->group_id; $dataSaveParams = $this->send_photos_saveWallPhoto($dataImage); $dataImage = json_decode($dataSaveParams, true); $codeQueryImage = "photo_"; return $codeQueryImage; >

Полная версия класса для автопостинга записей Вконтакте

class BotsTime_AutopostingVk < public $token = "97a1b7bff17bd61309c109a4ac02961fe8a5121e553b95eca754e8e889f7dbb4fe"; public $owner_id = -209546094; public $group_id = 209546094; public $idApp = 8054058; public $versionVk = "5.131"; /* ДЛЯ ОТПРАВКИ POST ЗАПРОСОВ */ /* method - название метода (информация в документации Вконтакте) dataQuery - массив с параметрами запроса */ public function sendQueryVk_POST($method, $dataQuery = array()) < /* добавляем токен в массив запроса */ $dataQuery["access_token"] = $this->token; /* добавляем версию API вконтакте */ $dataQuery["v"] = $this->versionVk; $ch = curl_init("https://api.vk.com/method/"); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); if($html === false) < echo "Ошибка отправки запроса: " . curl_error($curl); return false; >else < return json_decode($html, true); >> /* -------------------- */ /* ДЛЯ ОТПРАВКИ GET ЗАПРОСОВ */ public function sendQueryVk_GET($method, $dataQuery = array()) < $dataQuery["access_token"] = $this->token; $dataQuery["v"] = $this->versionVk; $ch = curl_init("https://api.vk.com/method/?" . http_build_query($dataQuery)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); curl_close($ch); return $html; > /* -------------------- */ /* ДЛЯ ПОСТИНГА ЗАПИСИ */ public function send_wall_post($dataQuery) < $dataQuery["from_group"] = "1"; $dataQuery["owner_id"] = $this->owner_id; return $this->sendQueryVk_POST("wall.post", $dataQuery); >/* -------------------- */ /* ДЛЯ ПОЛУЧЕНИЯ URL ДЛЯ ЗАГРУЗКИ */ public function send_photos_getWallUploadServer($dataQuery) < $dataQuery["from_group"] = "1"; $dataQuery["owner_id"] = $this->owner_id; return $this->sendQueryVk_POST("photos.getWallUploadServer", $dataQuery); >/* -------------------- */ /* ДЛЯ СОХРАНЕНИЯ ИЗОБРАЖЕНИЯ НА СЕРВЕРЕ VK */ public function send_photos_saveWallPhoto($dataQuery) < return $this->sendQueryVk_GET("photos.saveWallPhoto", $dataQuery); >/* -------------------- */ /* ПОЛУЧЕНИЕ КОДА ДЛЯ ПОСТИНГА ИЗОБРАЖЕНИЙ */ /* urlFile - ссылка на файл изображения на хостинге */ public function sendPhotoInVk($urlFile) < /* отправка запроса для получения ссылки на загрузку файла */ $arrQuery = [ "group_id" => $this->group_id, ]; $dataUploadParams = $this->send_photos_getWallUploadServer($arrQuery); $uploadUrl = $dataUploadParams["response"]["upload_url"]; /* -------------------- */ /* отправка изображения на сервер */ $curl_photo = curl_file_create($urlFile); $arrQuery = [ "photo" => $curl_photo ]; $ch = curl_init($uploadUrl); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrQuery); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $dataUploadParams = curl_exec($ch); curl_close($ch); $dataImage = json_decode($dataUploadParams, true); /* -------------------- */ /* получение информации о картинге с сервера */ $dataImage["group_id"] = $this->group_id; $dataSaveParams = $this->send_photos_saveWallPhoto($dataImage); $dataImage = json_decode($dataSaveParams, true); $codeQueryImage = "photo_"; return $codeQueryImage; > > $vkBot = new BotsTime_AutopostingVk(); /* изображение для записи */ $urlFile = $_SERVER["DOCUMENT_ROOT"] . "/upload/resize_cache/iblock/a4b/1000_750_1a3e675aea8ae1409484d226085c41199/estvnvtyrj2z0h0kq5wghwk5yfugy1kq.jpg"; $textPost = "Описание для записи \n"; /* получение данных для загрузки изображения для поста */ $codeQueryImage = $vkBot->sendPhotoInVk($urlFile); /* добавление записи */ $publish_date = time() + 3600; $arrQuery = [ "message" => $textPost, "publish_date" => $publish_date, "attachments" => $codeQueryImage ]; $vkBot->send_wall_post($arrQuery);

Источник

Оцените статью