Отправка картинки на стену нескольким друзьям.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
tsigel
Сообщения: 2
Зарегистрирован: 24 фев 2011, 19:27

Отправка картинки на стену нескольким друзьям.

Сообщение tsigel »

Добрый вечер.
Почитал кажется все что мог почитать в гугле, но так и не нашел ответ на вопрос как осуществить на as3 через APIConnection отправку изображения на стену моим друзьям.
пока сделал следующее (это собрано из разных уроков и там может быть что-то лишнее или наоборот чего-то не хватать).

Код: Выделить всё

 public function SaveCard(main, user, card, msg)        {            this.msg = msg;            this.user = user;            this.main = main;            this.card = card;            this.VK = main.VK;            VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);        }                private function responseFromServer(data)        {            var urlRequest:URLRequest = new URLRequest  ;            urlRequest.url = data.upload_url;            urlRequest.method = URLRequestMethod.POST;            urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control','no-cache'));              var bmd:BitmapData = new BitmapData(600,400,true);//--создаем bitmapdata            bmd.draw(card);//--рисуем в битмапе интересующий мувиклип;             var byteArrayScr:ByteArray = new JPGEncoder(85).encode(bmd);             var loader:Loader = new Loader  ;            loader.loadBytes(byteArrayScr);             mll = new MultipartURLLoader  ;            mll.addEventListener(Event.COMPLETE,onUploadCompleteThroughAlarm);            mll.addFile(byteArrayScr,"file.jpg","fileN",'image/jpg');            mll.load(data.upload_url);        }                private function onUploadCompleteThroughAlarm(e:Event)        {            main.debug.appendText("Уррра!");            var answer:String = mll.loader.data;            var data:Object = JSON.decode(answer);            trace(answer)        }         
получаю ответ

Код: Выделить всё

 {"server": "10184", "photo": "a8994f98f2:x", "hash": "33e8d3136b3fb38def5aaafadd5b9274"}
поидеи дальше я могу эту картинку положить на стену и мне даже это почти удалось методом

Код: Выделить всё

VK.api('wall.post', { message: msg, owner_id: user, attachment: "photo"+data.photo.toString()+"_"mid }, function(response:Object) { trace(response.post_id)}, main.onError);
только я немог понять где взять mid но пока писал этот пост увидел его в upload_url.
впрочем даже без картинки wall.post вызывал у меня вконтактовское окошко с подтверждением отправки на стену друга сообщения. тоесть отправить его 5 друзьям не представлялось возможном. но я видил сотни подобных приложений где это реализованно. например вот http://vkontakte.ru/cards
а вот внятного описания как это сделать я невидел нигде) очень был бы рад любой помощи.
и заодно есть еще пара менее важных вопросов)
- в чем разница между методами wall.post и wall.savePost
- как правильно отыслать картинку всем друзяьм? тоесть

Код: Выделить всё

 VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);
надо вызвать 1 раз или отдельно для каждого друга?
tsigel
Сообщения: 2
Зарегистрирован: 24 фев 2011, 19:27

Re: Отправка картинки на стену нескольким друзьям.

Сообщение tsigel »

Вот немного разобрался как оно все работает. Скачал класс MultipartData с ним все возвращается как надо но при запуски вконтакте возникает
SecurityError: Error #2000: Отсутствует активный контекст безопасности.
что делать? и всеже как сделать рассылку этой картинки по всем выбранным мной стенам друзей?:)

Код: Выделить всё

        private var main;        private var VK;        private var user;        private var card;        private var msg;                private var photo:ByteArray;         public function SaveCard(main, user, card, msg)        {            this.msg = msg;            this.user = user;            this.main = main;            this.card = card;            this.VK = main.VK;                        var bmd:BitmapData = new BitmapData(600,400,true);//--создаем bitmapdata            bmd.draw(card); //--рисуем в битмапе интересующий мувиклип;                        photo = new JPGEncoder(85).encode(bmd);                            VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);        }                private function responseFromServer(response)        {            var url_request:URLRequest = new URLRequest(response.upload_url);             url_request.method = URLRequestMethod.POST;            url_request.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));            var urlloader:URLLoader = new URLLoader();            var data:MultipartData = new MultipartData();            data.addFile(photo, "photo");            url_request.data = data.data;            urlloader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);            urlloader.load(url_request);        }                private function urlLoader_completeHandler(event:Event):void        {            var answer:String = event.target.data;            var data:Object = JSON.decode(answer);            trace(data)            VK.api('wall.savePost', {wall_id: user, post_id:"post1", server:data.server, photo:data.photo, hash:data.hash,  message: msg });        } 
LonelyANDRoid
Сообщения: 34
Зарегистрирован: 11 мар 2011, 16:06

Re: Отправка картинки на стену нескольким друзьям.

Сообщение LonelyANDRoid »

Та же проблема с ошибкой 2000, при чем вообще непонятно, что происходит. Кто-нибудь сталкивался?
dimaST
Сообщения: 1
Зарегистрирован: 10 янв 2012, 10:34

Re: Отправка картинки на стену нескольким друзьям.

Сообщение dimaST »

Всем привет!

Тоже возникли затруднения с загрузкой картинки на сервер Вконтакте.
Делал все согласно документации: Загрузка фотографий на стену пользователя
Итак, рисую картинку, и пытаюсь ее сохранить на сервере.
Приведу код:

Код: Выделить всё

 // Сервер для загрузки картинок    private function photosGetUploadServer():void {        VK.api("photos.getWallUploadServer", {}, onCompleteServer, WallWallError);        }  // Если все норм, делаем скриншот и загружаем на серверprivate function onCompleteServer(response:Object):void         {            log("onCompleteServer.response : " + response.upload_url);            // Здесь формируем картинку            var OutBitmap:BitmapData = new BitmapData(screen.width, screen.height);                OutBitmap.draw(screen);                        var data:ByteArray = PNGEncoder.encode(OutBitmap);                        mpLoader = new MultipartURLLoader();            mpLoader.addFile(data, "photo.jpg", "photo", 'image/jpeg');            mpLoader.addEventListener(Event.COMPLETE, WallSavePhotoPost);            mpLoader.load(response.upload_url);  //загружаем по пришедшему адресу        } // После успешной загрузкиprivate function WallSavePhotoPost(e:Event):void        {            var answer:String = mpLoader.loader.data;            serverAswer = answer;            log("WallSavePhotoPost.answer : " + answer);            var data:Object = new JSONDecoder(answer).getValue();                        VK.api('wall.savePost', { wall_id: viewer_id, server: data.server, photo: data.photo, hash: data.hash,                    message: "Смотри, какая красивая картинка." },                    WallPosted, WallWallError);/* OUTPUT <error>  <error_code>121</error_code>  <error_msg>Invalid hash</error_msg>...*/        } 
viewer_id - id пользователя просматривающего приложение

Непонятно почему приходит Invalid hash - потому что этот параметр возвращается всего один раз

Так же в документации написано, что требуется использовать команду - photos.saveWallPhoto.

Другим вариантом, пробовал команды:
photos.getWallUploadServer -> делаем скриншот и загружаем -> photos.saveWallPhoto -> wall.savePost
Код:

Код: Выделить всё

// Сервер для загрузки картинок    private function photosGetUploadServer():void {        VK.api("photos.getWallUploadServer", {}, onCompleteServer, WallWallError);        }  // Если все норм, делаем скриншот и загружаем на серверprivate function onCompleteServer(response:Object):void         {            log("onCompleteServer.response : " + response.upload_url);            // Здесь формируем картинку            var OutBitmap:BitmapData = new BitmapData(screen.width, screen.height);                OutBitmap.draw(screen);                        var data:ByteArray = PNGEncoder.encode(OutBitmap);                        mpLoader = new MultipartURLLoader();            mpLoader.addFile(data, "photo.jpg", "photo", 'image/jpeg');            mpLoader.addEventListener(Event.COMPLETE, WallSavePhotoPost);            mpLoader.load(response.upload_url);  //загружаем по пришедшему адресу        } // После успешной загрузки, сохраняем картинку - photos.saveWallPhotoprivate function WallSavePhotoPost(e:Event):void        {            var answer:String = mpLoader.loader.data;            serverAswer = answer;            log("WallSavePhotoPost.answer : " + answer);            var data:Object = new JSONDecoder(answer).getValue();                        VK.api("photos.saveWallPhoto", { server: data.server, photo:data.photo, hash: data.hash }, WallSaveAppPost, WallWallError);        } //  Получаем ответ о загруженной картинкеprivate function WallSaveAppPost(_data:Object):void        {               log("WallSaveAppPost.answer : " + _data);                           /* Output<?xml version="1.0" encoding="utf-8"?><response list="true"> <photo>  <id>photo75313495_275300989</id>  <pid>275300989</pid>  <aid>-14</aid>  <owner_id>75313495</owner_id>  <src>http://cs9774.vkontakte.ru/u75313495/-14/m_43f6b49d.jpg</src>  <src_big>http://cs9774.vkontakte.ru/u75313495/-14/x_60fab07d.jpg</src_big>  <src_small>http://cs9774.vkontakte.ru/u75313495/-14/s_9558c789.jpg</src_small>  <created>1326448994</created> </photo></response>*/                           // Здесь можно использовать либо команду wall.post или wall.savePost             }
В функции я описал что приходит в ответе Output.

Самое интересное, если я пишу в строке браузера http://vkontakte.ru/[id - пришедший] (Пример: http://vkontakte.ru/photo75313495_275300989), то картинка в браузере не отображется и пишет ошибка. Так непонятно ПОЧЕМУ?
Если же в браузере вставить ссылку которая пришла в ТЭГе <src_big> - то она показывается
Ответить