Вопрос по WallPost, Фото на стену Вконтакте

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
raven009
ЗАБАНЕН!
Сообщения: 52
Зарегистрирован: 06 фев 2010, 12:09

Вопрос по WallPost, Фото на стену Вконтакте

Сообщение raven009 »

Уважаемые пользователи. Вопрос для тех кто сталкивался в методами API ВКонтакте по wall_post.

Подскажите как можно в приложении по загрузке фото на стену пользователя сделать чтоб когда приложение запускаешь со стены появлялась не кнопка "Browse image", а фото с альбома?

Пример приложения с открытым исходным кодом: Wall publishing example
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение Александр »

Нужно чтобы просто загружалось какое-то фото из альбома? Тогда методы photos.getAlbums и photos.get
raven009
ЗАБАНЕН!
Сообщения: 52
Зарегистрирован: 06 фев 2010, 12:09

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение raven009 »

Пример: Бабочки на стену
Картинки с фото альбома, загружать на стены. Вот что я имел в виду.
ПОМОГИТЕ!!!
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение Александр »

raven009
Метод wall.savePost http://vkontakte.ru/pages.php?o=-1&p=wall.savePost
Не загружать фото на сервер, а передавать параметр photo_id.
raven009
ЗАБАНЕН!
Сообщения: 52
Зарегистрирован: 06 фев 2010, 12:09

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение raven009 »

А можно показать это на примере моего кода?

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

package vk.wall_post
{
  import flash.display.Bitmap;
  import flash.display.Loader;
	import flash.display.Sprite;
  import flash.events.DataEvent;
	import flash.events.Event;
  import flash.events.IOErrorEvent;
  import flash.events.MouseEvent;
  import flash.events.SecurityErrorEvent;
  import flash.net.FileFilter;
  import flash.net.FileReference;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.net.URLRequestHeader;
  import flash.net.URLRequestMethod;
  import flash.system.LoaderContext;
  import flash.utils.ByteArray;
  import flash.text.*;

  import vk.api.serialization.json.JSON;


  import vk.api.DataProvider;
  import vk.ui.*;
	

	public class Main extends Sprite {
		public static var FILE_FILTER: Array = ["Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG"];
    
    private var btnBrowse: VKButton;
    private var btnInstall: VKButton;
    private var uploadButtons: Sprite;
    private var file: FileReference;
    private var imagePreview: Sprite;
    private var resizedImage: Bitmap;
    private var dp: DataProvider;
    private var uploadUrl: String;
    private var wall_id: int;
    
    private var loader: Sprite;
    
    private var wrapper: Object;
    private var app: Object;
    private var params: Object;
    
		public function Main():void {
			addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
      
      wrapper = Object(parent.parent);
      
      if (!wrapper.application) {
      	app = stage;
      	wall_id = 6492;
      	params = stage.loaderInfo.parameters;
      	wrapper = stage;
      } else {
        app = wrapper.application;
        params = app.parameters;
        wall_id = params.user_id;
      }
      
      this.graphics.beginFill(0xFFFFFF, 1);
    	this.graphics.drawRect(0, 0, app.stageWidth, app.stageHeight);
    	this.graphics.endFill();
    	
    	
      if (params.referrer == 'wall_view_inline' || params.referrer == 'wall_view') {
      	var imageLoader: Loader = new Loader();
      	imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e: Event): void {
      		addChild(imageLoader);
      		imageLoader.x = Math.round((app.stageWidth - imageLoader.width) / 2);
      		imageLoader.y = 50;
      	});
        imageLoader.load(new URLRequest("http://vkontakte.ru/images/gifts/256/182.jpg"));
        return;
      }
      
      
		  if (!(params.api_settings & 512+256+4+2)) {
      	btnInstall = new VKButton("Установите приложение к себе на страницу");
        btnInstall.addEventListener(MouseEvent.CLICK, onInstallClick);
        wrapper.addEventListener("onApplicationAdded", onAppAdded);
        wrapper.addEventListener("onSettingsChanged", onSettingsChanged);
        btnInstall.y = 50;
        btnInstall.x = Math.round((app.stageWidth - btnInstall.width) / 2);
        addChild(btnInstall);
      } else {
        initForm();
      }
		}
		
		private function onInstallClick(e: Event): void {
			wrapper.external.showInstallBox();
		}
		private function onAppAdded(e: Object): void {
			wrapper.external.showSettingsBox(512+256+128+4+2+1);
		}
		private function onSettingsChanged(e: Object): void {
			params.api_settings = parseInt(e.settings);
			if (params.api_settings & 512+64+32) {
				removeChild(btnInstall);
				initForm();
			}
		}
		
		private function initForm(): void {
			if (String(params.referrer).substr(0, 4) != 'wall') {
				var tf: TextField = new TextField();
				tf.width = 300;
				tf.height = 200;
				tf.x = Math.round((app.stageWidth - tf.width) / 2);
	    	tf.y = 50;
	    	tf.embedFonts = false;
	    	
	 			var format:TextFormat = new TextFormat();
	      format.font = "Tahoma";
				format.color = 0x000000;
				format.size = 13;
				
	    	tf.autoSize = TextFieldAutoSize.CENTER;
        tf.defaultTextFormat = format;
	    	addChild(tf);
        tf.appendText("Теперь вы можете запустить это приложение со стены.\n");
	    	return;
			}
		  btnBrowse = new VKButton("Выберите картинку которую хотите загрузить");
      btnBrowse.y = 50;
      btnBrowse.x = Math.round((app.stageWidth - btnBrowse.width) / 2);
      addChild(btnBrowse);
      btnBrowse.addEventListener(MouseEvent.CLICK, onBrowseClick);
      
      
      var btnUpload: VKButton = new VKButton("Загрузить изображение");
      btnUpload.addEventListener(MouseEvent.CLICK, onUploadClick);
      var btnCancel: VKButton = new VKButton("Закрыть", 2);
      btnCancel.x = btnUpload.x + btnUpload.width + 10;
      btnCancel.addEventListener(MouseEvent.CLICK, onCancelClick);
      
      uploadButtons = new Sprite();
      uploadButtons.addChild(btnUpload);
      uploadButtons.addChild(btnCancel);
      uploadButtons.x = Math.round((app.stageWidth - uploadButtons.width) / 2);
      uploadButtons.y = btnBrowse.y;
      uploadButtons.visible = false;
      addChild(uploadButtons);
      
      file = new FileReference();
      file.addEventListener(Event.SELECT, onFileSelected);
      
      loader = new Sprite();
      loader.graphics.beginFill( 0xF7F7F7, 0.3 );
      loader.graphics.drawRect( 0, 0, app.stageWidth, app.stageHeight );
      loader.graphics.endFill();
      var loaderBar: LoaderBar = new LoaderBar();
      loaderBar.x = Math.round((app.stageWidth - loaderBar.width) / 2);
      loaderBar.y = uploadButtons.y - 25;
      loader.addChild(loaderBar);
      
      dp = new DataProvider(params.api_url, id_api, 'x-code', params.viewer_id, true);
      dp.setup( { onError: function(error: String): void {
        debug("Error: " + error);   
      }});
      dp.request("wall.getPhotoUploadServer", { onComplete: function(response: Object): void {
        if (response.upload_url) {
          uploadUrl = response.upload_url;
        }
      }});
		}
    
    private function onBrowseClick(e: MouseEvent): void {
      file.browse([new FileFilter(FILE_FILTER[0], FILE_FILTER[1])]);
    }
    private function onFileSelected(e:Event): void {
      if (file.size == 0) {
			  debug("File size is zero bytes");
	      return;
			}
			file.addEventListener(Event.COMPLETE, onFileLoaded);
      file.load();
    }
    private function onFileLoaded(e: Event): void {
      file.removeEventListener(Event.COMPLETE, onFileLoaded);
      // Resample image
      var data: ByteArray = ByteArray(e.target.data);
      var imgLoader:Loader = new Loader();
  		imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
  		imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onImageLoadError);
   		imgLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onImageLoadError);
      imgLoader.loadBytes(data, new LoaderContext(false));
    }
    
    public function onImageLoaded(e: Event): void {
  	  var source: Bitmap = Bitmap(e.target.content); 
	    resizedImage = ImageHelper.resize(source, 200, 300);
	    source.bitmapData.dispose();
      
      btnBrowse.visible = false;
      uploadButtons.visible = true;
      
      if (imagePreview && contains(imagePreview)) {
        removeChild(imagePreview);
        imagePreview = null;
      }
      
      imagePreview = new Sprite();
      imagePreview.addChild(resizedImage);
      imagePreview.x = Math.round((stage.stageWidth - imagePreview.width) / 2 );
      imagePreview.y = uploadButtons.y + uploadButtons.height + 20;
      addChild(imagePreview);
      
  	}
    
    private function onUploadClick(e:MouseEvent): void {
      var urlRequest: URLRequest = new URLRequest();
	    if (uploadUrl == "") {
	      debug("Upload URL is empty");
	      return;
	    } else {
	    	debug(uploadUrl);
	    }
      urlRequest.url = uploadUrl;
      urlRequest.method = URLRequestMethod.POST;
      urlRequest.requestHeaders.push(new URLRequestHeader('Cache-Control', 'no-cache'));
      
      // Configure listeners
      file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onUploadComplete);
      file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
      file.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
      try {
        file.upload(urlRequest, 'photo');
        showLoader();
      } catch (error:Error) {
        debug("Upload error");
        return;
      }
    }
  	private function onCancelClick(e:MouseEvent): void {
      showBrowse();
    }
    
    
    private function onUploadComplete(e: DataEvent): void {
      debug("Upload complete");
      debug('Data: ' + e.data);
      showLoader(false);
      var data: Object = JSON.decode(e.data);
		  if (data.photo) {
		  	data.message = 'TESTTEXT.';
		  	data.wall_id = wall_id;
		  	data.post_id = 'post1';
				dp.request('wall.savePost', { params: data, onComplete: function(response: Object): void {
          debug(response.post_hash);
          debug(response.photo_src);
          wrapper.external.saveWallPost(response.post_hash);
				}} );	
      }
    }
    
    private function showBrowse(): void {
      btnBrowse.visible = true;
      uploadButtons.visible = false;
      if (imagePreview && contains(imagePreview)) {
        removeChild(imagePreview);
      }
      imagePreview = null;
    }
    
    private function showLoader(show: Boolean = true): void {
      if (contains(loader) && !show) {
        removeChild(loader);
      } else if (!contains(loader) && show) {
        addChild(loader);
      }
    }
    
  	private function onImageLoadError(e: Event): void {
  	  debug("Ошибка загрузке изображений");
      showLoader(false);
  	}
    private function onSecurityError(e: SecurityErrorEvent): void {
      debug("Ошибка безопасности");
      showLoader(false);
    }
    private function onIOError(e: IOErrorEvent): void {
      debug("Ошибка ввода-вывода");
      showLoader(false);
    }
    private function debug(msg: *): void {
      trace(debug);
      if (wrapper.external)
        wrapper.external.debug(msg);
    }
  }
}
raven009
ЗАБАНЕН!
Сообщения: 52
Зарегистрирован: 06 фев 2010, 12:09

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение raven009 »

Ну так поможет кто?
raven009
ЗАБАНЕН!
Сообщения: 52
Зарегистрирован: 06 фев 2010, 12:09

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение raven009 »

ау
VITAL
Сообщения: 34
Зарегистрирован: 29 дек 2009, 13:32

Re: Вопрос по WallPost, Фото на стену Вконтакте

Сообщение VITAL »

Ни кто поагать не хочет ЖАЛЬ))))
Ответить