ApiConnection,AS3.
В этом уроке вы узнаете, как изменить фотографию пользователя Вконаткте.
Структура такая:пользователь выбирает картинку на своем компьютере, приложение загружает ее в профиль пользователя.
Main.as
- package
- {
- import flash.display.*;
- import flash.events.*;
- import flash.net.FileReference;
- import flash.net.URLRequest;
- import flash.net.URLRequestHeader;
- import flash.net.URLRequestMethod;
- import flash.net.FileFilter;
- import flash.net.URLLoader;
- import vk.api.serialization.json.JSON;
- import vk.api.MD5;
- import vk.APIConnection;
- import vk.events.*;
- import vk.ui.*;
- public class Main extends Sprite
- {
- public var urlRequest: URLRequest = new URLRequest();
- public var loadphoto:VKButton;//обычная кнопка
- public var uploadphoto:VKButton;
- private var file:FileReference;//наша фотография, которую выберет пользователь
- public var uploadurl:String;
- //переменные приложения
- public var api_id:Number;
- public var viewer_id:Number;
- public var sid:String;
- public var secret:String;
- //получаем flashvars
- public var flashVars:Object = stage.loaderInfo.parameters as Object;
- //инициализация
- public var VK:APIConnection = new APIConnection(flashVars);
- //фильтер, который позволит пользователю выбирать только картинки
- public var imagesFilter:FileFilter = new FileFilter("Images","*.jpg;*.gif;*.png");
- public function Main()
- {
- //добавляем кнопку на сцену
- loadphoto = new VKButton("Выбрать картинку");
- loadphoto.x = 213;
- loadphoto.y = 149;
- addChild(loadphoto);
- //делаем кнопку, но пока не добавляем на сцену
- uploadphoto = new VKButton("Изменить картинку");
- uploadphoto.x = 213;
- uploadphoto.y = 149;
- uploadphoto.addEventListener(MouseEvent.CLICK, changephoto);
- //добавляем событие. как только фотография будет выбрана-будет вызванная функция onFileSelected
- file = new FileReference();
- file.addEventListener(Event.SELECT, onFileSelected);
- //добавляем событие к кнопки
- loadphoto.addEventListener(MouseEvent.CLICK, loadphotoo);
- //переменные приложения
- api_id = flashVars['api_id'];
- viewer_id = flashVars['viewer_id'];
- sid = flashVars['sid'];
- secret = flashVars['secret'];
- //первый этап. получаем http адрес для загрузки фотографии.
- VK.api('photos.getProfileUploadServer', {}, getuploadserver, onError);
- }
- //пользователь выбирает картинку
- private function loadphotoo(e:MouseEvent):void
- {
- file.browse([imagesFilter]);
- }
- // загружаем фотографию
- private function onFileSelected(e:Event):void
- {
- file.addEventListener(Event.COMPLETE, onFileLoaded);
- file.load();
- }
- //убираем первую кнопку, добавляем вторую
- private function onFileLoaded(e:Event):void
- {
- removeChild(loadphoto);
- addChild(uploadphoto);
- }
- private function getuploadserver(data:Object):void
- {
- uploadurl = data.upload_url;
- }
- //второй этап. Делаем пост запрос на полученный адрес
- private function changephoto(e:MouseEvent):void
- {
- urlRequest.url = uploadurl;
- urlRequest.method = URLRequestMethod.POST;
- urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache'));
- file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadComplete);
- file.upload(urlRequest, 'photo');
- removeChild(uploadphoto);
- wait.text = "Пожалуйста, ждите.Фотография загружается";
- }
- private function onUploadComplete(e:DataEvent):void
- {
- var responsee:Object = JSON.decode(e.data);
- VK.api('photos.saveProfilePhoto', { server: responsee.server,photo:responsee.photo,hash:responsee.hash }, onHashLoaded, onError);
- removeChild(uploadphoto);
- }
- private function onHashLoaded(data:Object):void
- {
- wait.text = "";
- addChild(loadphoto);
- }
- private function onError(data: Object):void
- {
- if (data.error_msg == "Operation denied by user")
- {
- wait.text = "";
- addChild(loadphoto);
- }
- }
- }
- }
Создаем fla фаил, добавляем на сцену текстовое поле wait.text и подключаем Main.as
Заливаем В контакт.
Приложение включено и видно всем.
Без использование контейнера.
Конечный результат можно увидеть здесь: http://vkontakte.ru/app2459617_12766930



