Виджет публикации

Для внешних приложений (например, сайтов или Android/iOS приложений) предусмотрен особый механизм публикации медиатопиков на страницу пользователя (эти записи увидят его друзья в своих лентах).

Использование виджета возможно только после аппрува приложения. Для получения аппрува отправьте id вашего приложения и URL сайта, с которого будут осуществляться публикации, на адрес: api-support@ok.ru.

Для публикации необходимо открыть новое окно браузера (или iframe) со специально сформированным URL:

https://connect.ok.ru/dk?st.cmd=WidgetMediatopicPost&st.app={application_id}&st.attachment={attachment_json}&st.signature={signature}&st.return={return_url}&st.popup={popup}&st.silent={silent}&st.utext={text}

Значения всех аргументов URL должны быть закодированы.

ПараметрОбязательныйОписание
st.appДаИдентификатор приложения (application id)
st.attachmentДаJson-кодированная информация о публикуемом медиатопике (см. формат ниже)
Можно закодировать json при помощи base64, чтобы избежать избыточного кодирования русских символов.
st.signatureДаЦифровая подпись запроса (см. алгоритм подсчета ниже)
st.returnНетURL на который будет совершён редирект с результатом выполнения. Если не указан, то результат публикации будет передан через HTML5 postMessage.
st.popupНетВыполнять автоматическое центрирование и подгонку размеров окна.
Возможные значения: on/off (по умолчанию)
st.silentНетЗакрывать окно автоматически после окончания операции. Игнорируется, если указан st.return.
Возможные значения: on/off (по умолчанию)
st.utextНетДать возможность пользователю указать свой текст в публикуемом медиатопике.
Возможные значения: on/off (по умолчанию)
st.access_tokenНетВ случае OAuth приложения - требуется указать access_token

Рассчет подписи запроса st.signature

В качестве секретного ключа при передаче параметра st.access_token используется session_secret_key сессии, иначе, используется секретный ключ приложения.
Все значения не должны быть закодированы (кроме случая когда вы используете base64 для st.attachment).

Если указан параметр st.return, вычисляется следующим образом:

md5("st.attachment=" + attachment + "st.return=" + return_url + secretKey);

В остальных случаях:

md5("st.attachment=" + attachment + secretKey);

Если в результате приходит id = 0, то необходим аппрув приложения.

Описание attachment

Публикация медиатопика, который может содержать множество вложенных объектов:

  • тексты
  • ссылки
  • фотографии
  • видео
  • музыку
  • голосования
  • решары
  • места

Пример результата

Пример результата

Пример результата игрового медиатопика

Пример результата игрового медиатопика

Общий вид JSON-дерева

{
  "media": [
    {
      "type": "photo",
      "list": [
        { "id": "photoToken1" },
        { "id": "photoToken2" },
        { "photoId": "1234" }
      ]
    },
    {
      "type": "movie",
      "list": [
        { "id": "movieId1" },
        { "id": "movieId2" }
      ]
    },
    {
      "type": "music",
      "list": [
        {
          "id": "id1",
          "title": "SongName1",
          "artistName": "Artist1",
          "albumName": "Album1"
        }
      ]
    },
    {
      "type": "poll",
      "question": "Is it question?",
      "answers": [
        { "text": "Yes" },
        { "text": "No" }
      ],
      "options": "SingleChoice,AnonymousVoting"
    },
    {
      "type": "link",
      "url": "https://apiok.ru/"
    },
    {
      "type": "text",
      "text": "Text1"
    },
    {
      "type": "app",
      "text": "Text above image",
      "images": [
        {
          "url": "http://r.mradx.net/img/38/F3C336.jpg",
          "mark": "prize_1234",
          "title":"Hover Text!"
        }
      ],
      "actions": [
        {
          "text":"Hello",
          "mark":"hello"
        }
      ]
    }
  ]
}

Создать решару

Чтобы создать решару на топик или видео нужно в опциональном аттрибуте “topic” или “movie-reshare” задать ID объекта на который создается решара. Если решара устанавливается в статус, то при создании решары текстовой комментарий к объекту обязателен (“type”:”text”)

Пример валидного запроса на создание решары топика (необходимо указать наличие принадлежности к контенту групп, true/false соответственно):

{
    "media": [
        {
            "type": "text",
            "text": "my text"
        },
        {
            "type": "topic",
            "topicId": "10240918683741",
            "group": "false"
        }
    ]
}

Пример валидного запроса на создание решары видео:

{
    "media": [
        {
            "type": "text",
            "text": "hello"
        },
        {
            "type": "movie-reshare",
            "movieId": "14029922"
        }
    ]
}

Пример валидного запроса на несколько решар в одном топике:

{
    "media": [
        {
            "type": "text",
            "text": "my text"
        },
        {
            "type": "topic",
            "topicId": "10240965345470",
            "group": "true"
        },
        {
            "type": "topic",
            "topicId": "10240965411006",
            "group": "true"
        }
    ]
}

Элементы media

ТипОписаниеДополнительные параметрыОграничения
photoФотографииlist- список фотографий, описанных одним из двух параметров:
* id - параметр token, передаваемый в метод photosV2.commit во время загрузки фотографий на сервер
* photoId - id фотографии для которой будет сделана решара
* У приложения должен быть PHOTO_CONTENT
* Все фотографии должны принадлежать текущему пользователю
* Все фотографии должны находиться в одном и том же альбоме
* При посте в группу, фотографии не должны быть привязаны к альбому, и для них не требуется вызывать photosV2.commit
* В случае если передаётся photoId фотография должна существовать и быть в открытом доступе
movieВидеороликиlist - список видеороликов:
* id - идентификатор видеозаписи
* У приложения должен быть VIDEO_CONTENT
musicМузыкаlist - список аудиозаписей:
* id - идентификатор
* artistName - название исполнителя
* title - название аудиозаписи
* albumName - (необязательный) название альбома
 
pollГолосование* question - вопрос голосования
* answers - список ответов к голосованию
** text - текст ответа
* options - (необязательный) дополнительные параметры голосования
Возможные параметры:
* SingleChoice - Голосование, в котором можно выбрать только один ответ (если не стоит - несколько ответов)
* AnonymousVoting - Анонимное голосование (никто не сможет увидеть пользователей, кто как проголосовал)
* ResultsAfterVoting - Тип опроса, когда результаты будут видны только после голосования
linkСсылкаurl - ссылка на интересную страницу* Не более одной ссылки на медиатопик
textТекстtext - дополнительный текст 
appИгровой блок* text - текст над картинкой

* images - массив изображений
** url - ссылка на картинку размером 492x364
** title - текст при наведении на картинку
** mark - метка, которая будет передана приложению в параметре custom_args при переходе

* actions- массив ссылок
** text - текст ссылки
** mark - метка, которая будет передана приложению в параметре custom_args при переходе
* На текущий момент поддерживается 1 картинка
* На текущий момент поддерживается 1 ссылка
* Блок отображается в ленте только у подтверждённых приложений
* Нельзя постить только блок app, с ним должен быть ещё text/photo и т.д..
app-refСсылка на приложениеappId - id приложения* Не более 1 ссылки на приложение
* Указанное приложение должно пройти модерацию

Пример media

{
  "media": [
    {
      "type": "photo",
      "list": [
        { "id": "GbEJzZVBho7Us2ZwjGXhGnIo4rHF2U7jn8N6fbeMFCUfdSjSv+SexzjMLSFliybJfJNV2qbdaS+x8qqWqzfFN+U+34bhVwyU9ENKARywfAx/HJFAyyKZHqRA42DsEm6qXZwcnnvjF9M8r+FsNi3DiQ==" },
        { "id": "sts6ma1U8pE4jIvElzHPbtoQtIF5KTijxZdQlRNN/Gw6Wx3CY2Xr7NEZ0eOSpCneZAoIGAj/nodexVaKGnHeVtqU1LMlBYGsxj5GKmBDzv2b/tq7WpRg61Ugc46E3894" }
      ]
    },
    {
      "type": "music",
      "list": [
        {
          "id": 8058357707207,
          "title": "Fix You",
          "artistName": "Coldplay",
          "albumName": "X&Y"
        }
      ]
    },
    {
      "type": "poll",
      "question": "Правда крутой медиатопик?",
      "answers": [
        { "text": "Да" },
        { "text": "Конечно да" }
      ],
      "options": "SingleChoice"
    },
    {
      "type": "text",
      "text": "Текст в придачу"
    }
  ]
}