Выложить фото на стену

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
grean
Сообщения: 8
Зарегистрирован: 27 июн 2012, 14:05

Выложить фото на стену

Сообщение grean »

Всем привет.
Недавно вплотную занялся api вконтакте.
Если эта тема поднималась, то пожалуйста перенаправьте на ветку с решенным вопросом.

Flash приложение этикеток на бутылки.
Само приложение у меня лежит в песочнице вконтакте.
Без контейнера.

Программно формируется изображение.
Мне нужно это изображение разместить на стене пользователя, который создал этикетку.

Я начал с того, что вывожу окно настроек прав для пользователя.
+2 Доступ к друзьям.
+4 Доступ к фотографиям.
+8192 Доступ к обычным и расширенным методам работы со стеной.

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

VK.callMethod("showSettingsBox", 8198);
В ответ приходит 11271. Я не понимаю, что это, пожалуйста объясните.
Я так понимаю это код ошибок и прав.

Далее запрашиваю адрес сервера, куда заливать фото:

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

 VK.api("photos.getWallUploadServer", {uid:мой_id}, function(data){                            if (data.response)        {                        result_tf.appendText('true');                    }        else        {                        result_tf.appendText('false');                    }                                                           }); 
В ответ тишина, т.е. срабатывает по условию false

Не понимаю, почему не работает, подскажите пожалуйста.
Casperovskii
Сообщения: 429
Зарегистрирован: 22 июн 2012, 17:50

Re: Помогите выложить фото на стену

Сообщение Casperovskii »

Апи возвращает ответ в виде массива, попробуйте в функции заменить data и data.response на apiResponse:Array и apiResponse.length соответственно.

Про права: следует запрашивать эти разрешения при установке приложения. Сейчас в окне настроек только уведомления, показ в статусе и еще что-то.
grean
Сообщения: 8
Зарегистрирован: 27 июн 2012, 14:05

Re: Выложить фото на стену

Сообщение grean »

Вообще ничего не отвечает. Такое ощущение, что этот метод вообще не срабатывает, потому что даже если я размещу обычный текст, то даже он не появляется.

Я правильно понимаю, что вот эта ошибка только локально на компьютере срабатывает?

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

 TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".    at vk.api::DataProvider/request()    at vk::APIConnection/api()    at flash_api_0_fla::MainTimeline/frame1() 
grean
Сообщения: 8
Зарегистрирован: 27 июн 2012, 14:05

Re: Выложить фото на стену

Сообщение grean »

Вобщем разобрался сам.

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

     VK.api('photos.getWallUploadServer', { uid: flashVars['viewer_id'] }, onProfileLoaded, onError);      function onProfileLoaded(data: Object):void    {                    for(var i in data)    {         result_tf.appendText('uid: ' + data[i] + '\n');              }        }     // если произошла ошибка     function onError(data: Object):void    {            result_tf.appendText("error: " + data.error_msg);    }    
grean
Сообщения: 8
Зарегистрирован: 27 июн 2012, 14:05

Re: Выложить фото на стену

Сообщение grean »

Вот рабочий вариант размещения фотографии на стену

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

     import flash.display.Sprite;    import flash.display.MovieClip;    import flash.display.Loader;    import flash.net.FileReference;    import flash.utils.ByteArray;    import flash.net.*;        import com.adobe.images.*;    import com.adobe.serialization.json.JSON;    import vk.APIConnection;    import vk.events.*;    import MultipartData;    import PNGEncoder;     var image:BitmapData;// Создаем пустой контейнер под изображение    var box:Sprite = new Sprite();        stage.addChild(box);// Из библиотеки загружаем movieclip    var mc:moviec = new moviec();       var mcc = box.addChild(mc); // Делаем снимок содержимого контейнера box    var layout:BitmapData = new BitmapData(stage.width,stage.height);        layout.draw(mcc);            var bm:Bitmap = new Bitmap(layout);    var bd = this.addChild(bm);        bd.x = 200;        bd.y = 100;        bd.visible = false;// Делаем невидимым контейнер box        mcc.visible = false;// Конвертируем bitmap          var ba:ByteArray = PNGEncoder.encode(layout);        var flashVars:Object = stage.loaderInfo.parameters as Object;    // присваиваем переменным значения из flashVars    var api_id = flashVars['api_id'];    var viewer_id = flashVars['viewer_id'];    var sid = flashVars['sid'];    var secret = flashVars['secret'];           var result_tf:TextField = new TextField();        result_tf.autoSize=TextFieldAutoSize.LEFT;        result_tf.x=10;        result_tf.y=10;        addChild(result_tf);     // инициализация    var VK:APIConnection = new APIConnection(flashVars);                VK.api('photos.getWallUploadServer', { uid: flashVars['viewer_id'] }, getWallUploadServer, onError);               function getWallUploadServer(obj:Object):void {             var _loader:URLLoader = new URLLoader();            var _request:URLRequest = new URLRequest(obj.upload_url);            _request.method = URLRequestMethod.POST;            _request.requestHeaders.push(new URLRequestHeader("Content-type", "multipart/form-data; boundary=" + MultipartData.BOUNDARY));            var _data:MultipartData = new MultipartData();            _data.addFile(PNGEncoder.encode(layout), "photo");            _request.data=_data.data;            _loader.addEventListener(Event.COMPLETE, imageLoaded);            _loader.load(_request);        }        // Загружает файл на сервер        function imageLoaded(e:Event):void         {            var _obj:Object = JSON.decode(e.target.data);            VK.api('photos.saveWallPhoto', {server:_obj.server, photo:_obj.photo, hash:_obj.hash}, imageSaved, onError);        }        // Берет файл с сервера и размещает на стене        function imageSaved(obj:Object):void         {            VK.api('wall.post', { message: 'Текст к картинке', owner_id: obj[0]['owner_id'], attachment: obj[0]['id'] }, function(){}, onError);                  }         // если произошла ошибка        function onError(data: Object):void        {          result_tf.appendText("error: " + data.error_msg + '\n');        }     
Ответить