Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Пример использования wall.savePost (http://www.flasher.ru/forum/showthread.php?t=207273)

ivaniyses 05.04.2014 15:19

Пример использования wall.savePost
 
Помогите, поискал на различных ресурсах (В том числе и на флешере), но не нашёл нормального уроки по методу wall.savePost.

caseyryan 06.04.2014 11:31

Я для этого написал готовый класс, и использую его во всех прилоениях, где нужен такой функционал
Код AS3:

package  {
        import vk.APIConnection;
        import vk.api.serialization.json.Json;
        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 vk.api.MD5;
 
        /**
        * используется просто, вызовом либо VKPhoto.saveAlbumPhoto()
        * либо VKPhoto.saveAlbumPhoto()
        */

        public class VKPhoto {
 
                private var _vk:                                        APIConnection                = null;
                private var _callback:                                Function                        = null;
                private var _albumID:                                String                                = "";
                private var _vkUploadServer:                String                                = null;
                private var _image:                                        Bitmap                                = null;
                private var _albumDescription:                String                                = null;
                private var _albumTitle:                        String                                = null;
                private var _onUploadedFunction:        Function                        = null;
                private var _message:                                String                                = "";
                private var _erCallback:                        Function                        = null
 
                public function VKPhoto(vk:APIConnection) {
                        _vk        = vk;
                }
                /**
                *
                * @param        image картинка, которую нужно сохранить в альбом
                * @param        vk ссылка на объект APIConnection
                * @param        callback метод, который будет вызыван после сохранения в альбом
                * @param        erCallback метод, вызываемый при ошибке
                * @param        albumTitle навание для альбома. Если такого альбома не существует, он будет создан
                * @param        albumDescription описание альбома
                */

                public static function saveAlbumPhoto(image:Bitmap, vk:APIConnection, callback:Function,
                                erCallback:Function,
                                albumTitle:String = "",
                                albumDescription:String = ""):void {       
                        var vkPhoto:VKPhoto = new VKPhoto(vk);
                        vkPhoto.saveAlbumPhoto(image, callback, erCallback, albumTitle, albumDescription);
 
                }
                /**
                * @param        image картинка, которую нужно сохранить
                * @param        vk ссылка на объект APIConnection
                * @param        callback метод, который будет вызыван после сохранения на стену
                * @param        erCallback метод, вызываемый при ошибке
                * @param        message сообщение, добавляемуе вместе с картинкой
                */

                public static function saveWallPhoto(image:Bitmap, vk:APIConnection, callback:Function,
                                                                                                erCallback:Function, message:String = ""):void {       
                        if (!vk) {
                                trace("VK IS NULL, VKPhoto.as")
                                image.bitmapData.dispose();
                                return;
                        }
                        var vkPhoto:        VKPhoto        = new VKPhoto(vk);
                        vkPhoto.saveWallPhoto(image, callback, erCallback, message);
                }
 
                public function saveAlbumPhoto(image:Bitmap, callback:Function, erCallback:Function,
                                albumTitle:String = "",
                                albumDescription:String = ""):void {
                        if (_image) {
                                if (_image.bitmapData) {
                                        _image.bitmapData.dispose();
                                }
                                _image = null;
                        }
 
                        _image                                = image;
                        _callback                        = callback;
                        _erCallback                        = erCallback;
                        _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 function saveWallPhoto(image:Bitmap, callback:Function, erCallback:Function, message:String = ""):void {
                        _image                                = image;
                        _callback                        = callback;
                        _erCallback                        = erCallback;
                        _message                        = message;
                        _onUploadedFunction        = onVkWallPhotoUploaded;
                        if (_callback == null || _image == null) {
                                throw new ArgumentError("one of the arguments is null");
                        }
                        requestVkWallUploadServer();
 
                }
 
                private function requestVkWallUploadServer():void {                                                                                        // получение сервера загрузки сообщения на стену
                        _vk.api("photos.getWallUploadServer", {}, onVkUploadServer, onVkError);
                }
 
                private 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 function requestVkUploadServer():void {
                        _vk.api("photos.getUploadServer", { aid: _albumID }, onVkUploadServer, onVkError);
                }
 
 
                private function onAlbumCreated(params:Object):void {
                        _albumID        = params.aid;
                        requestVkUploadServer();
                }
 
                private function onVkUploadServer(params:Object):void {
                        _vkUploadServer        = params.upload_url;
                        uploadVkPhoto();
                }
 
                private function uploadVkPhoto():void {
                        if (!_image || !_image.bitmapData) return;
                        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());
                        }
                        _image.bitmapData.dispose();
                        _image        = null;
                }
 
 
 
                private 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 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 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 { } );
                        if (_callback != null) {
                                _callback.call();
                                _callback        = null;
                        }
                }
 
 
                private function onVkPhotoSaved(params:Object):void {
                        if (_callback != null) {
                                _callback.call();
                                _callback        = null;
                        }
                        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 onVkError(param:Object):void {
                        trace(Json.encode(param));
                        if (_erCallback != null) {
                                _erCallback.call();
                        }
                        dispose();
                }
                private function dispose():void {
                        if (_image) {
                                _image.bitmapData.dispose();
                                _image                        = null;
                        }
                        _callback                        = null;
                        _erCallback                        = null;
                        _albumTitle                        = null;
                        _albumDescription        = null;
                        _onUploadedFunction        = null;
                        _message                        = "";
                }
 
 
 
 
        }
 
}


пандус 31.03.2015 13:45

caseyryan, спасибо, выручил. :)


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

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