Проанализировав документацию API Vkontakte, я пришел к выводу, что Api вконтакте не позволяет программно постить на стену группы сообщения. По крайней мере простого способа это сделать не предусмотрено.
Думаю, это сделано как раз для того, чтобы не засорять паблики автоматическими сообщениями. Тем не менее, сложный способ это сделать есть. Постить на стену вконтакте можно, комбинируя использование API Vkontakte с использованием симуляцией пользователя.
Фактически, нужно создать видимость, что пользователь авторизовался в нашем приложении и разрешил приложению от лица этого самого пользователя отправить запись на стену своей группы. Вот такие пляски с бубном, господа.
У меня на решение этой головоломки ушла целая бессонная ночь, а в результате на свет появился грубый и не очень-то продуманный, но работающий класс, через который можно постить на стену свой группы.
Алгоритм работы класса с пабликом(группой) примерно такой
- Авторизуем наше приложение.
- Авторизуем пользователя вконтакте через Oauth.
- Принимаем нашим пользователем запрос на разрешение действий от его лица.
- Отправляем через API от нашего пользователя через наше приложение.
Довольно запутанно, правда? Представьте каково мне было : ). По сути, главная проблема, что
API VK не позволяет приложению самостоятельно совершать каких-либо манипуляций на сайте vkontakte,
оно должно служить прослойкой между пользователем и vkontakte, нет пользователя = нет api.
И наш сайт сидит одновременно на двух стульях — пользователь и приложение VK.
Что нужно делать?
Дабы облегчить себе жизнь и не тратить на изобретение велосипеда свое драгоценное время, рекомендую скачать и использовать этот класс.
Собственно, класс создавался для репоста нашего сайта ebash.org на паблик vk.com/ebash_org, так что там можете посмотреть, как он работает.
Для работы вам потребуется три вещи:
- Группа вконтакте
- Iframe-приложение вконтакте (обязательно standalone)
- Пользователь вконтакте
При создании объекта Vkontakte, нужно ввести следующие данные, которые у вас должны быть или вам следует их получить:
- id группы vkontakte —
- id приложения
- api_secret приложения
- логин пользователя vkontakte
- пароль этого пользователя
Как использовать класс Vkontakte?
Вместе с самим классом есть файлик example.php, в идеале, достаточно будет использовать реализованный в нем метод.
Скачать сам класс можно здесь:
https://github.com/superkozel/vk-repost
Пока на паблике есть сообщения от сегодняшнего дня, класс работает. Надеюсь он вам поможет : )
Приветствую. Поставил ваш класс, там не хватало много файлов для Zend, но это не беда. Беда в том, что после настройки всего мне выдало вот такую вот ошибку: Permission to perform this action is denied for non-standalone applications
Может знаете, как можно решить эту проблему?
Сделал StandAlone приложение и всё заработало
У вас, кстати, в ebash.org тоже desktop приложение. Спасибо большое за класс, долго искал =)
спасибо за отзыв, насчет standalone уже запамятовал к тому моменту, что писал статью
А на счет недостающих классов Zend поподробнее, если не сложно. В комплекте там идет Zend_Http_Client, еще чего-то не хватало?
Там не хватало папок Uri, Validate и файлов Loader.php, Exception.php, Uri.php. По крайней мере у меня не установлен Zend и версия php 5.3
Есть ещё фишка, что сервер не авторизуется на сайте, т.к. он находится в необычной для меня области. Сервер в Нидерландах, вконтакте спрашивает у него мой мобильный телефон и данный класс не может авторизоваться. Помогает взять, зайти с самого сервера (или прокси, на сервере) на сайт вконтакте и авторизоваться там самому.. через браузер, указав свой мобильный телефон
увы, у меня нет возможности поправить это, нет удаленного сервера, но думаю там ничего сложного: опознать страницу ввода телефона и отправить дополнительный POST-запрос с ним.
Буду благодарен, если кинешь мне на почту aesleep@ya.ru исправленный вариант, со всем требующимися файлами
я это не делал.. я просто из браузера один раз авторизовался и меня контакт запомнил, скрипт писать надобности не было
Интересная статья, как раз то что ищу себе сейчас!
Один вопрос — терзают меня смутные сомнения :)
Публикация в паблик происходит всегда только от имени
«Пользователь вконтакте» то есть одного юзера(нас самих)???
Мне нужно сделать чтобы все коменты с сайта постились на сайт и в паблик одновременно.
Но чтобы от имени реальных юзеров. Получиться ли так сделать?
конечно нет. Для этого надо использовать виджет комментариев вконтакте.
C фото работает? или так только текст можно запостить?
Да, работает с картинками
Печаль, не работает, т.к. нет файлов zend.
Файлы зенд есть, их только нужно заинклудить
Я заинтегрил класс (правда пришлось повозиться с синтаксисом, что-то PHP не стал валидировать такие конструкции типа $a = [];) и оно работает!
Однако теперь такой вопрос: как постить в группу ссылку таким образом, чтобы она парсилась вконтактом и изображалась красиво, как ссылка, если её руками запостить, то есть слева картинка, справа description.
Как это правильно делать?
…разобрался, оказывается, как картинку её передают в wallPostAttachment
Покажите ка пользоваться файлом example не хочет работать. Куда писать текст
А как поправил «правда пришлось повозиться с синтаксисом, что-то PHP не стал валидировать такие конструкции типа $a = [];» у меня ни как не валидирует?
«А как поправил “правда пришлось повозиться с синтаксисом, что-то PHP не стал валидировать такие конструкции типа $a = [];” у меня ни как не валидирует?»
Замени на $a=array();
еще может быть ошибка на $client::POST, я заменял на $client->POST
Нужны недостающие файлы от zend, кто может кинуть?
Ребята я не понимаю как это? Объясните пожалуйста!)буду очень благодарен!!
Большое спасибо!)
Здраствуйте!
подскажите, работает ли скрипт в 2016 году и можно ли ним постить на стену личной страницы вк (не группы)?
Без понятия, давно не пользовался. Попробуйте, займет времени совсем немного установка, и напишите, работает или нет, если не сложно. Но скорее всего работает, так как само АПИ не меняется, единственное, могли изменить авторизацию
не работает.
Я сделал приложение, вписал токен и пр. — пусто.
никаких ошибок не выдаёт.
CURL не знаю, не работал с ними никогда. Тестировать ошибки не буду.