Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.10.2015, 13:23
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 1  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Cool Поделится изображением в соц. сетях. Как?

Ребята, можно ли организовать на ас3 такое? В игре (обычная флешка на портале) делаю скриншот, который потом можно отправить куда то в соц. сети (а то сохранить на диске слишком скучно).

Это из ряда фантастики?
Или все-таки что то такое можно сделать?


Последний раз редактировалось zCHESNOKz; 08.10.2015 в 14:09.
Старый 08.10.2015, 13:40
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 2  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Почти у каждой соц. сети есть АПИ для загрузки фото в альбом или на стену. Вам остается только получить к АПИ доступ, и вызывать эти методы. Где размещено ваше приложение?

Старый 08.10.2015, 13:44
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Это довольно сложная процедура, в каждой соц. сети по разному, хоть и похоже.
__________________
Дети не должны знать о своих родителях

Старый 08.10.2015, 13:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Заморочка только с формированием самого запроса

Как-то писал для себя, давно уже. Но скорее всего ничего в API серьезно не поменялось. Пользуйтесь, кому надо. Первый для контакта, сначала вызываем initialize() и передаем туда свой APIConection. Ну а дальше уже по названию статических методов думаю будет все и так ясно
Код AS3:
package  {
	import api.com.adobe.images.PNGEncoder;
	import flash.display.Bitmap;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.net.URLRequestHeader;
	import flash.net.URLRequestMethod;
	import flash.utils.ByteArray;
	import flash.utils.getTimer;
	import vk.api.MD5;
	import vk.api.serialization.json.Json;
	import vk.APIConnection;
	/**
	 * ...
	 * @author Konstantin
	 */
	public class VKPhotoSaver {
 
		private static var _vk:						APIConnection 		= null;
		private static var _callback:				Function			= null;
		private static var _albumID:				String 				= "";
		private static var _vkUploadServer:			String 				= null;
		private static var _image:					Bitmap				= null;
		private static var _albumDescription:		String 				= null;
		private static var _albumTitle:				String 				= null;
		private static var _onUploadedFunction:		Function			= null;
		private static var _message:				String 				= "";
 
		public static function initialize(vk:APIConnection):void {
			if (_vk != null) return;
			_vk	= vk;
		}
 
		public static function saveToAlbum(image:Bitmap, callback:Function, 
				albumTitle:String = "", 
				albumDescription:String = ""):void {
			if (_vk == null) {
				throw "vk is null, call initialize() method first";
			}
			if (_image) {
				return;
			}
			_image			= image;
			_callback		= callback;
			_albumDescription	= albumDescription;
			_albumTitle		= albumTitle;
			_onUploadedFunction	= onVkPhotoUploaded;
 
			if (_callback == null || _image == null || _albumDescription == null) {
				throw new ArgumentError("one of the arguments is null");
			}
			_vk.api("photos.getAlbums", { }, onAlbums, onVkError ); 	
		}
 
		public static function saveToWall(image:Bitmap, callback:Function, message:String = "тестовое сообщение"):void {
			if (_vk == null) {
				throw "vk is null, call initialize() method first";
			}
			if (_image) return;
			_image				= image;
			_callback			= callback;
			_message			= message;
			_onUploadedFunction	= onVkWallPhotoUploaded;
			if (_callback == null || _image == null) {
				throw new ArgumentError("one of the arguments is null {saveToWall()}");
			}
			requestVkWallUploadServer();
 
		}
 
		static private function requestVkWallUploadServer():void {									// получение сервера загрузки сообщения на стену
			_vk.api("photos.getWallUploadServer", {}, onVkUploadServer, onVkError);
		}
 
		private static function onAlbums(params:Object):void {
			if (params is Array) {
				var arr:Array = params as Array;
			} else {
				arr	= [params];
			}
 
			var albumFound:Boolean = false;
			for (var i:String in arr) {
				if (arr[i].title == _albumTitle) {
					_albumID	= arr[i].aid;
					albumFound	= true;
					break;
				}
			}
			if (albumFound == false) {
				_vk.api("photos.createAlbum", 
					{ 	title: _albumTitle, description: _albumDescription, 
						comment_privacy: 0, privacy: 0 }, 
							onAlbumCreated, onVkError);
			} else {
				requestVkUploadServer();
			}
 
 
 
		}
 
		private static function requestVkUploadServer():void {
			_vk.api("photos.getUploadServer", { aid: _albumID }, onVkUploadServer, onVkError);
		}
 
 
		private static function onAlbumCreated(params:Object):void {
			_albumID	= params.aid;
			requestVkUploadServer();
		}
 
		private static function onVkUploadServer(params:Object):void {
			_vkUploadServer	= params.upload_url;
			uploadVkPhoto();
		}
 
		private static function uploadVkPhoto():void {
 
			var imageStream:ByteArray = PNGEncoder.encode(_image.bitmapData);
 
			var stream:ByteArray = new ByteArray();
			var boundary:String = "----------Ij5ae0ae0KM7GI3KM7";
			var imageName:String	= MD5.encrypt(getTimer() + "") + ".png";
			stream.writeUTFBytes("--" + boundary + '\r\nContent-Disposition: form-data; name="file1"; filename="' + imageName + '"\r\nContent-Type: image/png\r\n\r\n');
			stream.writeBytes(imageStream);
			stream.writeUTFBytes("\r\n--" + boundary + '--\r\n');
			var header:URLRequestHeader = new URLRequestHeader ("Content-type", "multipart/form-data; boundary=" + boundary);
			var urlRequest:URLRequest = new URLRequest(_vkUploadServer);
			urlRequest.requestHeaders.push(header);
			urlRequest.method = URLRequestMethod.POST;
			urlRequest.data = stream;
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
			urlLoader.addEventListener( Event.COMPLETE, _onUploadedFunction );
			urlLoader.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			try {
				urlLoader.load( urlRequest );
			} catch (e:Error) {
				trace(e.getStackTrace());
			}
		}
 
 
 
		private static function onVkPhotoUploaded(e:Event):void {
 
			e.target.addEventListener( Event.COMPLETE, _onUploadedFunction );
			e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			var responce:	Object 	= Json.decode(unescape(String(e.target.data)));
			var server:		String 	= responce.server;
			var hash:		String 	= responce.hash;
			var photosList:	String 	= responce.photos_list;
			var aid:		String 	= responce.aid;
			_vk.api("photos.save", { photos_list: photosList, aid: aid, hash: hash, server: server }, 
				onVkPhotoSaved, onVkError );
		}
		private static function onVkWallPhotoUploaded(e:Event):void {
			e.target.addEventListener( Event.COMPLETE, _onUploadedFunction );
			e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			var responce:	Object 	= Json.decode(unescape(String(e.target.data)));
			var server:		String 	= responce.server;
			var hash:		String 	= responce.hash;
			var photo:		String 	= responce.photo;
			_vk.api("photos.saveWallPhoto", { photo: photo, hash: hash, server: server }, 
				onWallPhotoSaved, onVkError );
		}
 
		private static function onWallPhotoSaved(params:Object):void {								// {"response":[{"pid":304710821,"id":"photo5495786_304710821","aid":-14,"owner_id":5495786,"src":"http:\/\/cs310520.vk.me\/v310520786\/e86\/OmTNZyBed-k.jpg","src_big":"http:\/\/cs310520.vk.me\/v310520786\/e87\/hj5i19qujd0.jpg","src_small":"http:\/\/cs310520.vk.me\/v310520786\/e85\/AydkwTofv-c.jpg","width":338,"height":302,"text":"","created":1371100727}]}
			var imageID:String = params[0].id; 
			//trace("THIS IS IMAGE ID", imageID, "VKPhotoUploader");
			_vk.api("wall.post", {  message: _message, attachments: imageID }, 
							function(o:Object):void {}, function(p:Object):void { } );
		}
 
 
		private static function onVkPhotoSaved(params:Object):void {
			dispose();
		}
 
		private static function photoUploadError(e:IOErrorEvent):void {
			e.target.addEventListener( Event.COMPLETE, onVkPhotoUploaded );
			e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			dispose();
		}
		private static function onVkError(param:Object):void { 
			trace(Json.encode(param)); 
			dispose();
		}
		private static function dispose():void {
			if (_callback != null) {
				_callback.call();
				_callback		= null;
			}
			if (_image) {
				_image.bitmapData.dispose();
				_image			= null;
			}
			_albumTitle			= null;
			_albumDescription	= null;
			_onUploadedFunction	= null;
			_message			= "";
		}
 
 
 
 
	}
 
}
И для одноклассников
Код AS3:
package  {
	import api.com.odnoklassniki.Odnoklassniki;
	import flash.display.Bitmap;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.net.URLRequestHeader;
	import flash.net.URLRequestMethod;
	import flash.utils.ByteArray;
	import flash.utils.getTimer;
	import api.com.adobe.images.PNGEncoder;
	import api.com.odnoklassniki.Odnoklassniki;
	import api.com.odnoklassniki.sdk.photos.Photos;
	import api.com.odnoklassniki.sdk.stream.Stream;
	import vk.api.MD5;
	import vk.api.serialization.json.Json;
	/**
	 * ...
	 * @author Konstantin
	 */
	public class OKPhoto {
 
		private var _callback:				Function			= null;
		private var _albumID:				String				= ""; 	
		private var _erCallback:			Function			= null;
		private var _vkUploadServer:		String 				= null;
		private var _image:					Bitmap				= null;
		private var _albumDescription:		String 				= "";
		private var _albumTitle:			String 				= "";
		private var _onUploadedFunction:	Function			= null;
		private var _message:				String 				= "";
		private var _confirmMessage:		String 				= "";								// сообщение на окне подтверждения 
		private var _okUploadServer:		String;
		private var _photoID:				String;
		private var _token:					String;
		private var _toStream:				Boolean				= false;	
		private var _imageSRC:				String;													// url картинки для поста в ленту
 
 
 
		public function OKPhoto(toStream:Boolean = false ) {
			_toStream	= toStream;
 
		}
 
		public static function publishToStream(image:Bitmap, callback:Function, erCallback:Function, message:String, confirmMessage:String, albumName:String):void {
			var okPhoto:	OKPhoto 	= new OKPhoto(true);
			okPhoto.message				= message;
			okPhoto.confirmMessage		= confirmMessage;
			okPhoto.saveToAlbum(image, callback, erCallback, albumName, "Альбом приложения " + albumName);
		}
 
 
		public static function saveAlbumPhoto(image:Bitmap, callback:Function, erCallback:Function, albumTitle:String = "", albumDescription:String = ""):void {
			var okPhoto:OKPhoto = new OKPhoto();
			okPhoto.saveToAlbum(image, callback, erCallback, albumTitle, albumDescription);
		}
		public function saveToAlbum(image:Bitmap, callback:Function, erCallback:Function, albumTitle:String = "", albumDescription:String = ""):void {
			_callback			= callback;
			_erCallback			= erCallback;
			_albumTitle			= albumTitle;
			_albumDescription	= albumDescription;
			if (_image) {
				if (_image.bitmapData) {
					_image.bitmapData.dispose();
				}
				_image = null;
			}
			_image				= image;
			_onUploadedFunction	= onAlbumPhotoUploaded;
			if (_callback == null || _image == null || _albumDescription == null) {
				throw new ArgumentError("one of the arguments is null");
			}
			Photos.getAlbums(onAlbumsList);
		}
		private function onAlbumsList(params:Object):void { 
			var albums:		Array 		= params.albums as Array;
			var albumFound:	Boolean 	= false;
 
			for (var i:String in albums) {
				var aid:	String 		= albums[i].aid;
				var title:	String 		= albums[i].title;
				if (title == _albumTitle) {
					albumFound	= true;
					_albumID	= aid;
					break;
				}
			}
			if (albumFound == false) {
				Photos.createAlbum(_albumTitle, "public", onAlbumCreated, _albumDescription);
			} else {
				getUploadServer();
			}
		}
 
		private function getUploadServer():void {
			Odnoklassniki.callRestApi("photosV2.getUploadUrl", onUploadServer, {aid : _albumID });
		}
		private function onUploadServer(params:Object):void {										
			_okUploadServer	= params.upload_url;																				
			uploadPhoto();
 
		}
 
		private function uploadPhoto():void {
			if (!_image || !_image.bitmapData) return;
			var imageStream:ByteArray = PNGEncoder.encode(_image.bitmapData);
			var stream:ByteArray = new ByteArray();
			var boundary:String = "---------------------------11020459624021";
			var imageName:String	= MD5.encrypt(getTimer() + "") + ".png";
			stream.writeUTFBytes("--" + boundary + '\r\nContent-Disposition: form-data; name="file1"; filename="' + imageName + '"\r\nContent-Type: image/png\r\n\r\n');
			stream.writeBytes(imageStream);
			stream.writeUTFBytes("\r\n--" + boundary + '--\r\n');
			var header:URLRequestHeader = new URLRequestHeader ("Content-type", "multipart/form-data; boundary=" + boundary);
			var urlRequest:URLRequest = new URLRequest(_okUploadServer);
			urlRequest.requestHeaders.push(header);
			urlRequest.method = URLRequestMethod.POST;
			urlRequest.data = stream;
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
			urlLoader.addEventListener( Event.COMPLETE, _onUploadedFunction );
			urlLoader.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			try {
				urlLoader.load( urlRequest );
			} catch (e:Error) {
				trace(e.getStackTrace());
			}
			_image.bitmapData.dispose();
			_image	= null;
		}
		private function onAlbumPhotoUploaded(e:Event):void {
			e.target.addEventListener( Event.COMPLETE, _onUploadedFunction );
			e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
 
			//var data:String = Json.encode(e.target.data);											
 
			var params:	Object 			= Json.decode(String(e.target.data));
			var photos:	Object			= params.photos;
 
			for (var i:String in photos) {
				_photoID 	= i;
				_token		= photos[i].token;
				Odnoklassniki.callRestApi("photosV2.commit", onPhotoCommit, { photo_id: _photoID, token: _token, comment: "Название приложения" } );
				break;
			}
		}
 
		private function onPhotoCommit(params:Object):void {										
			if (!_toStream) {
				if (_callback != null) {
					_callback.call();
				}
				dispose();
			} else {
				var photos:Array = params.photos as Array;
				_photoID	= photos[0].assigned_photo_id;
				Odnoklassniki.callRestApi("photos.getPhotoInfo", onPhotoInfo, { photo_id: _photoID } );
			}
		}
 
		private function onPhotoInfo(params:Object):void {											
			_imageSRC 	= params.photo.pic640x480;
			Stream.publish(_confirmMessage, _message, 
					onStreamPublish, "", 
					{ caption: _message, media: [{ type: "image", src: _imageSRC }]});
 
		}
 
		private function onStreamPublish(params:Object):void {
			dispose();
		}
 
		private function photoUploadError(e:IOErrorEvent):void {
			e.target.addEventListener( Event.COMPLETE, _onUploadedFunction );
			e.target.addEventListener( IOErrorEvent.IO_ERROR, photoUploadError );
			if (_erCallback != null) {
				_erCallback.call();
			}
			dispose();
		}
 
		private function onAlbumCreated(params:Object):void {										
			if (!(params is String) && params.error_data) {
				if (params.error_data == "photo_content") {
					Odnoklassniki.showPermissions("PHOTO_CONTENT");
				}
			} else if (params is String) {
				_albumID = String(params);
				getUploadServer();
			}
			//trace("ALBUM CREATED", Json.encode(params));
		}
		public function get message():String {
			return _message;
		}
 
		public function set message(value:String):void {
			_message = value;
		}
 
		public function get confirmMessage():String {
			return _confirmMessage;
		}
 
		public function set confirmMessage(value:String):void {
			_confirmMessage = value;
		}
		private function dispose():void {
			if (_image) {
				_image.bitmapData.dispose();
				_image			= null;
			}
			_onUploadedFunction	= null;
			_callback			= null;
			_erCallback			= null;
		}
 
 
 
	}
 
}
Все работает через стаитческие методы. Никаких экземпляров создавать не надо.
Ну там на зависимости обращаем внимания. Там кое где есть импорт разных либ, так что их тоже надо иметь. Но, думаю это не проблема

п.с. Какие-то вопросы мне задавать бессмысленно, писал это года 3 - 4 назад, уже вообще не помню как и что работает точно

Старый 08.10.2015, 14:08
zCHESNOKz вне форума Посмотреть профиль Отправить личное сообщение для zCHESNOKz Посетить домашнюю страницу zCHESNOKz Найти все сообщения от zCHESNOKz
  № 5  
Ответить с цитированием
zCHESNOKz
 
Аватар для zCHESNOKz

Регистрация: May 2013
Адрес: (0, 0)
Сообщений: 176
Цитата:
Сообщение от caseyryan Посмотреть сообщение
п.с. Какие-то вопросы мне задавать бессмысленно, писал это года 3 - 4 назад, уже вообще не помню как и что работает точно
Спасибо, гляну!

Добавлено через 49 секунд
Цитата:
Сообщение от alexandrratush Посмотреть сообщение
Почти у каждой соц. сети есть АПИ для загрузки фото в альбом или на стену. Вам остается только получить к АПИ доступ, и вызывать эти методы. Где размещено ваше приложение?
Забыл добавить. Из обычной флешки на порталах

Добавлено через 6 минут
Цитата:
Сообщение от alexandrratush Посмотреть сообщение
Почти у каждой соц. сети есть АПИ для загрузки фото в альбом или на стену. Вам остается только получить к АПИ доступ, и вызывать эти методы. Где размещено ваше приложение?
Получить доступ, то есть добавить там свое приложение и получить ID. А потом уже просто использовать ID при инициализации. Так?

Старый 08.10.2015, 18:52
alexandrratush вне форума Посмотреть профиль Отправить личное сообщение для alexandrratush Найти все сообщения от alexandrratush
  № 6  
Ответить с цитированием
alexandrratush
 
Аватар для alexandrratush

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Цитата:
Получить доступ, то есть добавить там свое приложение и получить ID. А потом уже просто использовать ID при инициализации. Так?
Да. Если я не ошибаюсь, то вам нужно использовать авторизацию пользователя через OAuth. Но я так никогда не делал, и поэтому могу ошибаться.

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.