Виджет публикации
Для внешних приложений (например, сайтов или Android/iOS приложений) предусмотрен особый механизм публикации медиатопиков на страницу пользователя (эти записи увидят его друзья в своих лентах) и на страницу группы (только в случае наличия прав на публикацию в группу у пользователя).
Использование виджета возможно только после аппрува приложения. Для получения аппрува отправьте id вашего приложения и URL сайта, с которого будут осуществляться публикации, на адрес: api-support@ok.ru.
Публикация в ленту пользователя
Для публикации необходимо открыть новое окно браузера (или iframe) со специально сформированным URL:
?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}
&st.nohead={nohead}
Значения всех аргументов 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.nohead | Нет | Отображать ли вверху виджета шапку Одноклассников. Возможные значения: on/off (по умолчанию) |
st.access_token | Нет | В случае OAuth приложения - требуется указать access_token |
st.groupId | Нет | В случае необходимости публикации в группу надо указать её id в качестве значения этого параметра |
Публикация в ленту группы
Публикация в группу работает таким же образом, как и публикация в ленту пользователя, — надо открыть новое окно в браузере или iframe со специальным URL формата:
?st.cmd=WidgetMediatopicPost
&st.app={application_id}
&st.groupId={group_id}
&st.attachment={attachment_json}
&st.signature={signature}
&st.return={return_url}
&st.popup={popup}
&st.silent={silent}
&st.utext={text}
&st.nohead={nohead}
Все параметры в URL аналогичны параметрам при публикации в ленту пользователя, но должен присутствовать параметр st.groupId.
Также у пользователя обязательно должны иметься права на публикацию записей в группу (например, он должен быть модератором, либо в группе должна быть включена публикация записей простыми пользователями).
Расчет подписи запроса 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);
Результат создания топика
Результат зависит от того, использовался ли параметр st.return при создании топика.
Если параметр st.return не использовался, итогом процесса публикации топика должен быть id созданного топика:
{"id":"67601133491473"}
Если в результате приходит id = 0, то необходим аппрув приложения, запросить который можно написав на почтовый адрес api-support@ok.ru.
При создании топика с параметром st.return в случае успешного создания топика результатом является ответ в следующем формате:
{"type":"success","id":"67601141224721","signature":"94fef0ec7d967e1eb41d5a505d1668ca"}
Возможные параметры ответа:
- type - флаг, успешно ли завершился процесс создания топика. Возможные значения: success, error;
- id - идентификатор созданного топика;
- signature - подпись для валидации ответа на стороне вашего сервиса;
- code - код ошибки, возникшей при создании топика. Есть в ответе только если type=error;
- message - информация об ошибке, возникшей при создании топика. Есть в ответе только если type=error.
Параметр signature подсчитывается по нижеуказанной формуле:
md5("id=" + id + secretKey);
Как указать контент топика
Описание 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 ссылки на приложение * Указанное приложение должно пройти модерацию |
Пример app-ref
{
"media":[
{
"type": "app-ref",
"appId": 512000589246,
"text": "Тестовый текст для топика",
"imageHD":"https://st.mycdn.me/static/game-promo-image/0-2-94/topic_image.png",
"args": "key=value",
"snippet": "play"
}
]
}
Пример 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": "Текст в придачу"
}
]
}