Введение
Данный пост я решил написать после прочтения Автоматическое оповещение читателей о новостях с помощью ВКонтакте. Часть 4, и решить в нем проблему с «access token», путем использования iframe приложений и js api.
После прочтения данной статьи, любой желающий сможет
Код и буквы
Для работы я создал простейшую таблицу в базе данных.
DROP TABLE IF EXISTS `feedname`;
CREATE TABLE `feedname` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`title` varchar(512) NOT NULL,
`imglink` varchar(512) NOT NULL,
`status` tinyint(3) DEFAULT NULL,
`postid` varchar(13) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `postid` (`postid`)
) ENGINE=MyISAM AUTO_INCREMENT=71 DEFAULT CHARSET=utf8;
* This source code was highlighted with Source Code Highlighter.
Уделять внимание заполнению базы смысла я не вижу, кому надо — просто выкладываю исходник на примере 9gag.com.
Iframe часть приложения нуждается в полях `id`, `title`, `imglink` и `status`.
- `id` — необходим для обновления `status`;
- `title` — текст сообщения на стену;
- `imglink` — полная ссылка на изображение которое прикрепится к новости;
- `status` — статус записи [значения: 1 — запись опубликована, 2 — запись удалена], пока используется только для того чтобы скрыть опубликованные и удаленные записи.
Теперь перейдем собственно к части работы с vkontakte.
В первую очередь, создаем iframe приложение, и выставляем необходимые права доступа для работы со стеной.
Разместив приложение по указанному адресу, мы можем начать взаимодействовать с vkontakte javascript api.
Все что для этого требуется — подключение библиотеки и инициализация приложения.
<script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>
VK.init(function () {
});
* This source code was highlighted with Source Code Highlighter.
И наконец, нам стали доступны все методы API vkontakte.
Функция wallPost(код далее по тексту) принимает параметр id, с помощью которого мы добываем текст сообщения и ссылку на картинку.
Порядок публикации записи на стене выглядит так:
- метод photos.getWallUploadServer: в ответ получаем ссылку для POST запроса загружаемого изображения
- отправка POST запроса по ссылке из предыдущего пункта. В ответ мы получим:
hash: "2bd5fe4bbcd3956f8f34c3a279cc4673"
photo: "f8005a7e14:y|441x750"
server: "301615"
- вызываем метод photos.saveWallPhoto, с параметрами из колбека. В ответ приходит информация о загруженных файлах
aid: -14
created: 1327862486
height: 750
id: "photo6216848_276115383"
owner_id: 6216848
pid: 276115383
src: "http://cs301615.vk.com/u6216848/-14/m_1919d67e.jpg"
src_big: "http://cs301615.vk.com/u6216848/-14/x_ea814cdf.jpg"
src_small: "http://cs301615.vk.com/u6216848/-14/s_411e9235.jpg"
src_xbig: "http://cs301615.vk.com/u6216848/-14/y_704eef9d.jpg"
width: 441
- И наконец публикация на стене — метод wall.post
Вот живой пример описанной выше процедуры, публикующий запись на стену группы.
function wallPost(id) {
title = $("[titleid=" + id + "]").html();
imglink = $("[imgid=" + id + "]").children("img").attr("src");
VK.api('photos.getWallUploadServer', {
gid: '%group_id%'
}, function (data) {
if (data.response) {
$.post('index.php', {
action: 'upload',
upload_url: data.response.upload_url,
imglink: imglink
}, function (json) {
VK.api("photos.saveWallPhoto", {
server: json.server,
photo: json.photo,
hash: json.hash,
gid: '%group_id%'
}, function (data) {
VK.api('wall.post', {
owner_id: '-%group_id%',
from_group: '1',
message: title,
attachments: data.response['0'].id
}, function (data) {
if (data.response) {
$.post("index.php", {
action: "hide",
id: id
});
window.location.reload();
}
});
});
}, 'json');
}
});
}
* This source code was highlighted with Source Code Highlighter.
Пока не удалось разобраться почему в запросе на публикацию сообщения не видно прикрепленных изображений, и почему сообщение гласит о том что запись будет опубликована на собственной странице, а не на странице группы — хотя публикует всё правильно.
ужаснокод прилагается
Спасибо за внимание!