Pull to refresh

Использование vkontakte js api для полуавтоматической публикации сообщений из rss лент

Reading time4 min
Views24K

Введение


Данный пост я решил написать после прочтения Автоматическое оповещение читателей о новостях с помощью ВКонтакте. Часть 4, и решить в нем проблему с «access token», путем использования iframe приложений и js api.
После прочтения данной статьи, любой желающий сможет ходить по воде, ловить пули зубами создать iframe приложение, которое умеет публиковать записи на стене группы или пользователя из rss ленты.


Код и буквы


Для работы я создал простейшую таблицу в базе данных.
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, с помощью которого мы добываем текст сообщения и ссылку на картинку.
Порядок публикации записи на стене выглядит так:
  1. метод photos.getWallUploadServer: в ответ получаем ссылку для POST запроса загружаемого изображения
  2. отправка POST запроса по ссылке из предыдущего пункта. В ответ мы получим:
    hash: "2bd5fe4bbcd3956f8f34c3a279cc4673"
    photo: "f8005a7e14:y|441x750"
    server: "301615"

  3. вызываем метод 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

  4. И наконец публикация на стене — метод 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.


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



ужаснокод прилагается

Спасибо за внимание!
Tags:
Hubs:
Total votes 13: ↑7 and ↓6+1
Comments1

Articles