- Створення програми "ВКонтакте".
- Авторизація на сайті ВКонтакте.
- Відправлення запитів до API ВКонтакте.
- Відправка фотографій.
- Прикріплення карти до повідомлення на стіні.
Створення програми "ВКонтакте".
Наша взаимовыгодная связь https://banwar.org/
Перш ніж приступити до работае з API необхідно створити додаток, від імені якого будуть виконуватися всі дії (розміщення записів і фотографій на стіні, додавання і читання коментарів, читання даних користувача тощо).
Для створення програми необхідно перейти за цим посиланням: https://vk.com/editapp?act=create
На станиці створення програми необхідно ввести назву вашої програми і вибрати тип "Standalone-додаток".
Для підтвердження дії необхідно отримати на мобільний телефон повідомлення з кодом.
В результаті буде створено програму. Зміст всіх цих дій в отриманні ID додатки, яке і буде використовуватися в запитах до API.
Авторизація на сайті ВКонтакте.
Перед роботою з API необхідно авторизуватися. ВКонтакте використовується спосіб авторизації OAuth 2.0.
Якщо в кратце і просто, то необхідно відкрити браузер, перейти по определнного адресою на сторінці, на якій необхідно ввести дані користувача. Після успішної авторизації повертається access_token. Його і потрібно зберегти, так як він буде використовуватися в запитах.
Більш детальну інформацію можна подивитися тут: http://vk.com/dev/auth_mobile
Я ж опишу як все це можна реалізувати на 1С.
Необхідно створити обробку для авторизації. На форму вивести поле HTML документа (елемент форми ПолеHTMLДокумента). При відкритті форми переходити за адресою
https://oauth.vk.com/authorize?client_id=&scope=&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token
Нижче наведено приклад коду. Перехід на сторінку вставлений в процедуру "відкриття ()"
Процедура відкриття () ЕлементиФорми.ПолеHTMLДокумента1.Перейті ( "https://oauth.vk.com/authorize?client_id=12345" + "& scope = photos, wall, offline & redirect_uri = http: //api.vk.com/blank.html& "+" display = page & response_type = token "); КонецПроцедуриЗі списком прав доступу можна ознайомитися на цій сторінці: http://vk.com/dev/permissions
Єдине, що можна згадати - це те, що якщо ви не хочете постійно авторизуватися (за замовчуванням access_token діє добу, після чого його необхідно знову отримувати), використовуйте параметр доступу offline. У такому випадку термін дії access_token буде необмежений і авторизація буде потрібно тільки один раз.
Після того, як користувач правильно введений пароль і дозволить додатком використовувати необхідні дані буде проведений перехід за адресою типу http://api.vk.com/blank.html#access_token=a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7&expires_in=0&user_id=5184504 . Залишається відстежити такий перехід і витягти з рядка адреси необхідну інформацію (обимно потрібно тільки access_token).
Для цього необхідно обробляти подія "ДокументСформірован" елемента "ПолеHTMLДокумента".
Нижче наведено приклад обробки даної події.
Процедура ПолеHTMLДокумента1ДокументСформірован (Елемент) access_token = ""; Якщо Елемент.Документ.location.host = "api.vk.com" Тоді hash = Серед (Елемент.Документ.location.hash, 2); МассівСтрок = СтроковиеФункцііКліентСервер.РазложітьСтрокуВМассівПодстрок (hash, "&"); Для кожного Параметр З МассівСтрок Цикл ІмяПараметра = ""; ЗначеніеПараметра = ""; Поз = Знайти (Параметр, "="); Якщо Поз = 0 Тоді ІмяПараметра = Параметр; ЗначеніеПараметра = ""; Інакше ІмяПараметра = НРег (СокрЛП (Лев (Параметр, Поз-1))); ЗначеніеПараметра = СокрЛП (Серед (Параметр, Поз + 1)); КонецЕсли; Якщо ІмяПараметра = "access_token" Тоді access_token = ЗначеніеПараметра; КонецЕсли; КонецЦікла; Константи.access_token = access_token; Закрити (); КонецЕсли; КонецФункцііВідправлення запитів до API ВКонтакте.
Після того, як отримано access_token можна виконувати запити до API.
Для цього проводиться GET запит за певною адресою і читається відповідь. Загальний вигляд HTTP адреси виглядає наступним чином:
https://api.vk.com/method/ ІМЯ_МЕТОДА .xml? параметр1 = значення1 & параметрN = значеніеN & access_token = a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7
Наприклад, для розміщення записи "Привіт, ВКонтакте!" на стіні користувача http://vk.com/id5184504 буде така адреса:
https://api.vk.com/method/wall.post.xml?owner_id=5184504&message=Привет, ВКонтакте! & access_token = a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7
Примітка. Якщо необхідно провести дію зі стіною групи, то в owner_id встановлюється значення зі знаком "-".
Нижче наведено код процедури, що виконує запити до API (слід зауважити що використовується HTTP S з'єднання).
Процедура ВизватьМетодAPI (ІмяМетода, Параметри, access_token) Експорт ІмяВиходногоФайла = ПолучітьІмяВременногоФайла ( "xml"); З'єднання = Новий HTTPСоедіненіе ( "api.vk.com" ,,,,, Істина); Соедіненіе.Получіть ( "method /" + ІмяМетода + ".xml?" +? (ТіпЗнч (Параметри) = Тип ( "Рядок"), Параметри +? (ЗначеніеЗаполнено (Параметри), "&", "") + "access_token = "+ access_token, СформіроватьСтрокуПараметровЗапроса (Параметри, access_token)), ІмяВиходногоФайла); КонецПроцедуриОпис усіх методів ви можете знайти на сторінці для розробників ВКонтакте: http://vk.com/dev/methods
Відправка фотографій.
Як виробляти відправку фотографій можна прочитати в документації ВКонтакте (або подивитися в демонстаціонной конфігурації). У цій статті я хочу зупинитися лише на одному моменті.
Зображення відправляється методом POST. Відправляється файл має наступну структуру:
--0123456789
Content-Disposition: form-data; name = "photo"; filename = "image.jpg"
Content-Type: image / jpeg
--0123456789
де 0123456789 - Boundary: якась послідовність символів. Так само необхідно встановити HTTP заголовки Content-Type і Content-Length.
Так як в 1С немає методів для роботи з двійковими файлами був придуманий наступний спосіб. Формуються 2 текстовий файлу: з початком кінцевим файлу:
--0123456789
Content-Disposition: form-data; name = "photo"; filename = "image.jpg"
Content-Type: image / jpeg
і закінченням
--0123456789
Разом виходить 3 файлу:
1. текстовий файл з початком
2. саме зображення
3. текстовий файл із закінченням
Використовуючи метод "Об'едінітьФайли" з'єднуємо 3 файлу в один і відправляємо вже отриманий файл.
Нижче наведено код демонструє відправку файлу.
ІмяВходногоФайла = ПолучітьІмяВременногоФайла ( "in"); ІмяВходногоФайла1 = ПолучітьІмяВременногоФайла ( "in1"); ІмяВходногоФайла2 = ПолучітьІмяВременногоФайла ( "in2"); ІмяВходногоФайла3 = ПолучітьІмяВременногоФайла ( "in2"); ІмяВиходногоФайла = ПолучітьІмяВременногоФайла ( "out"); Boundary = СтрЗаменіть (Рядок (Новий УнікальнийІдентіфікатор ()), "-", ""); ВходнойФайл = Новий ЗапісьТекста (ІмяВходногоФайла1, КодіровкаТекста.ANSI, Сімволи.ПС); ВходнойФайл.ЗапісатьСтроку ( "-" + Boundary); ВходнойФайл.ЗапісатьСтроку ( "Content-Disposition: form-data; name =" "photo" "; filename =" "image.jpg" ""); ВходнойФайл.ЗапісатьСтроку ( "Content-Type: image / jpeg"); ВходнойФайл.ЗапісатьСтроку ( ""); ВходнойФайл.Закрить (); Ізображеніе.Запісать (ІмяВходногоФайла2); ВходнойФайл = Новий ЗапісьТекста (ІмяВходногоФайла3, КодіровкаТекста.ANSI, Сімволи.ПС); ВходнойФайл.ЗапісатьСтроку ( ""); ВходнойФайл.ЗапісатьСтроку ( "-" + Boundary); ВходнойФайл.Закрить (); МассівФайлов = Новий Масив; МассівФайлов.Добавіть (ІмяВходногоФайла1); МассівФайлов.Добавіть (ІмяВходногоФайла2); МассівФайлов.Добавіть (ІмяВходногоФайла3); Об'едінітьФайли (МассівФайлов, ІмяВходногоФайла); ФайлОтправкі = Новий Файл (ІмяВходногоФайла); РазмерФайлаОтправкі = XMLСтрока (ФайлОтправкі.Размер ()); ЗаголовокHTTP = Новий Відповідність; ЗаголовокHTTP.Вставіть ( "Content-Type", "multipart / form-data; boundary =" + Boundary); ЗаголовокHTTP.Вставіть ( "Content-Length", РазмерФайлаОтправкі); З'єднання = Новий HTTPСоедіненіе (АдресЗагрузкі); Соедіненіе.ОтправітьДляОбработкі (ІмяВходногоФайла, АдресРесурса, ІмяВиходногоФайла, ЗаголовокHTTP);Прикріплення карти до повідомлення на стіні.
У поточній реалізації API відсутня можливість прикріплення карти до повідомлення. Що буває не дуже зручно. Наприклад, якщо в повідомленні йдеться про якийсь проведеної акції, то добре б було до нього прикріпити картку з місцем проведення акції. Дане завдання було вирішене мною таким чином: зверненням до Google Maps API виходить зображення карти, а потім воно буде приєднано до повідомлення як звичайна картина.
Для того, щоб отримати зображення карти з потрібним місцем необхідно відправити запит на адресу
http://maps.google.com/ maps / api / staticmap? center = LAT, LONG & zoom = 14 & size = 320x100 & maptype = roadmap & markers = color: red% 7Ccolor: red% 7Clabel: C% 7C LAT, LONG & sensor = false
де LAT і LONG географічні координати місця. Опис інших параметрів можна знайти в описі Google Maps API. Скажу лише, що наведені в даному прикладі на мою думку є оптимальними і їх можна не міняти. У відповідь приходить зображення карти.
Нижче наведено приклад використання.
// після виконання виклику в цьому файлі буде зображення з картою ІмяФайлаКарти = ПолучітьІмяВременногоФайла ( "jpg"); З'єднання = Новий HTTPСоедіненіе ( "maps.google.com"); Соедіненіе.Получіть ( "maps / api / staticmap? Center =" + lat + "," + long + "& zoom = 14 & size = 320x100 & maptype = roadmap" + "& markers = color: red% 7Ccolor: red% 7Clabel: C% 7C" + lat + "," + long + "& sensor = false", ІмяФайлаКарти);Демонстраційна конфігурація.
Для демонстрації роботи з API і більш кращого розуміння всього вищесказаного була створена демонстраційна конфігурація. У цій конфігурації реалізований механізм авторизації та надіслати повідомлення на стіну з можливістю прикріплення зображення. Крім того, в конфігурації існує загальний модуль "РаботаССайтомВКонтакте" в якому реалізовані готові виклики наступних методів API у вигляді відповідних процедур і функцій 1С:
- розміщення і видалення записів на стіні;
- додавання, читання і видалення коментарів до записів;
- робота з рекламою - отримання списку рекламних кабінетів, робота з рекламними кампаніями і рекламними оголошеннями (створення, зміна та видалення);
- робота зі списком пользоваталей і отримання інформації про них;
- робота з географічними місцями;
- розміщення фотографій.
тобто, наприклад, щоб отримати інформацію про користувачів можна скористатися наступним кодом
РаботаССайтомВКонтакте.ПолучітьІнформаціюОПользователях ( "a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7", "5184504");перший параметр access_token, другий - id користувача.
Значенням функцій є Структура або масив структур в завімості від формату відповіді сервера. Ключами структури є параметри повертаються у відповіді сервером. Наведений нижче приклад демонструє висновок імен користувачів з ID 123456 і 654321.
ДанниеОПользователях = ПолучітьІнформаціюОПользователях (access_token, "+123456,654321"); Для кожного ДанниеОПользователе З ДанниеОПользователях Цикл Повідомити ( "Ім'я користувача" + ДанниеОПользователе.uid + "-" + ДанниеОПользователе.first_name); КонецЦікла;Використовуючи написану вище інформації, документацію розробника ВКонтакте і приклади з демостраціонной конфігурації можна досить просто додати відсутній функціонал.
Загальний модуль "РаботаССайтомВКонтакте" і обробку "АвторізаціяНаСайте" можна як є перенести в робочу конфігурацію і почати використовувати API ВКонтакте.
Демонстраційна база працює як в режимі керованих форм так і в звичайному додатку.
Примітка.
Код демонстраційної конфігурації може використовуватися в інших розробках без будь-яких органичений.
Com/editapp?Com/authorize?
Com/authorize?
Xml?
Xml?
Com/ maps / api / staticmap?
Quot;maps / api / staticmap?