Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Поделится изображением в соц. сетях. Как? (http://www.flasher.ru/forum/showthread.php?t=211648)

zCHESNOKz 08.10.2015 13:23

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

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

alexandrratush 08.10.2015 13:40

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

Tails 08.10.2015 13:44

Это довольно сложная процедура, в каждой соц. сети по разному, хоть и похоже.

caseyryan 08.10.2015 13:59

Заморочка только с формированием самого запроса

Как-то писал для себя, давно уже. Но скорее всего ничего в 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 назад, уже вообще не помню как и что работает точно :D

zCHESNOKz 08.10.2015 14:08

Цитата:

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

Спасибо, гляну!

Добавлено через 49 секунд
Цитата:

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

Забыл добавить. Из обычной флешки на порталах

Добавлено через 6 минут
Цитата:

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

Получить доступ, то есть добавить там свое приложение и получить ID. А потом уже просто использовать ID при инициализации. Так?

alexandrratush 08.10.2015 18:52

Цитата:

Получить доступ, то есть добавить там свое приложение и получить ID. А потом уже просто использовать ID при инициализации. Так?
Да. Если я не ошибаюсь, то вам нужно использовать авторизацию пользователя через OAuth. Но я так никогда не делал, и поэтому могу ошибаться.


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

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