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); } } } }
Заливаем В контакт.
Приложение включено и видно всем.
Без использование контейнера.
Конечный результат можно увидеть здесь: http://vkontakte.ru/app2459617_12766930