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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.02.2011, 15:21
knaka вне форума Посмотреть профиль Отправить личное сообщение для knaka Найти все сообщения от knaka
  № 1  
Ответить с цитированием
knaka

Регистрация: Apr 2008
Сообщений: 29
По умолчанию Опубликовать запись на стену нескольким друзьям

Добрый день. Есть вопрос как реализовать отправку записи на стену нескольким друзьям.
На данный момент сделал следующее:
Код AS3:
	import com.adobe.serialization.json.JSON;
	import com.adobe.images.JPGEncoder;
	import MultipartURLLoader.*;
 
	import flash.events.Event;
	import flash.utils.ByteArray;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Bitmap;
	import flash.display.PixelSnapping;
	import flash.geom.Matrix;
 
	public class SaveCard
	{
 
		private var main;
		private var VK;
		private var user;
		private var card;
		private var msg;
		private var mll:MultipartURLLoader;
 
		private var uploadResponse;
 
		public function SaveCard(main, user, card, msg)
		{
			this.msg = msg;
			this.user = user;
			this.main = main;
			this.card = card;
			this.VK = main.VK;
			VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);
		}
 
		private function responseFromServer(data)
		{
			mll = new MultipartURLLoader  ;
			mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
			mll.addFile(saveCroppedImage(card),"file.jpg","file1",'image/jpg');
			mll.load(data.upload_url);
			uploadResponse = data;
			main.debug.appendText("Upload server answer"+data.toString());
		}
 
		private function onUploadCompleteThroughAlarm(e:Event)
		{
			var answer:String = mll.loader.data;
			main.debug.appendText("on upload answer: "+answer);
			var data:Object = JSON.decode(answer);
			VK.api('wall.savePost', {wall_id: user, post_id:"post1", server:data.server, photo:data.photo, hash:data.hash,  message: msg });
		}
	}
все случается удачно но в самом конце появляется:
Цитата:
SecurityError: Error #2000: Отсутствует активный контекст безопасности.
в своих прошлых проектах я с этим боролся так:
Код AS3:
Security.loadPolicyFile("http://mysite.com/crossdomain.xml");
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.checkPolicyFile = true;
var loader:Loader = new Loader();
loader.load(request, loaderContext);
но в данном случае я непонимаю ни где взять вконтактовский кроссдоменик, ни куда передавать loaderContext? Ну и главный вопрос. Если я таки смогу победить ошибку с безопасностью то смогу ли используя этот класс рассылать посту выбранным ранее друзьям?

Старый 25.02.2011, 22:11
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 2  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Цитата:
где взять вконтактовский кроссдоменик
если приложение вконтакте, и картинки грузятся правильным путём - не нужен кросдомен.

иначе можно обойти это ТАК
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 25.02.2011, 23:01
knaka вне форума Посмотреть профиль Отправить личное сообщение для knaka Найти все сообщения от knaka
  № 3  
Ответить с цитированием
knaka

Регистрация: Apr 2008
Сообщений: 29
спасибо.
но кажется мне это не подходит.
обьясню ситуацию:
в приложении создается некий MovieClip()
наполняется картинками из библиотеки (никаких внешних загрузок)
дальше из мувиклипа делается ByteArray и с ним (байтэрэем) происходит 2 действия. первое это рисуется новый но скадрированый обьект для подтверждения пользователем. и воторое (по клику) этот ByteArray передается в выше описаный класс.
точнее сюда:
Код AS3:
mll.addFile(saveCroppedImage(card),"file.jpg","file1",'image/jpg');
я пробовал использовать различные вариации класса MultipartData но это ничего не меняет. событие случается как надо и всегда получаю ответ типа такого:
Цитата:
{"server": "10184", "photo": "a8994f98f2:x", "hash": "33e8d3136b3fb38def5aaafadd5b9274"}
а вот ошибка получается только при вызове следующей строки:
Код AS3:
VK.api('wall.savePost', {wall_id: user, post_id:"post1", server:data.server, photo:data.photo, hash:data.hash,  message: msg });
предполагаю что я как-то не правильно совершаю wall.savePost
вопрос что не так или как это сделать чтобы работало?

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Я через посредник отправляю запрос.
Код AS3:
private var apiConnection:APIConnection;
...
apiConnection.api("wall.savePost", {wall_id:...}, completeSaveWallPost, errorRequest);
Какая ошибка-то?

Старый 28.02.2011, 15:57
knaka вне форума Посмотреть профиль Отправить личное сообщение для knaka Найти все сообщения от knaka
  № 5  
Ответить с цитированием
knaka

Регистрация: Apr 2008
Сообщений: 29
ошибка:
Цитата:
SecurityError: Error #2000: Отсутствует активный контекст безопасности.
Добавлено через 1 час 29 минут
немного изменил код и стало лучше но проблема не исчезла:
Код AS3:
		public function PostCard(main, user, byteArray, msg)
		{
			this.msg = msg;
			this.user = user;
			this.main = main;
			this.byteArray = byteArray;
			this.VK = main.VK;
			VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);
		}
 
		private function responseFromServer(data)
		{
			mll = new MultipartURLLoader  ;
			mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
			mll.addFile(byteArray, "file.jpg", "file1", 'image/jpg');
			mll.load(data.upload_url);
		}
 
		private function onUploadCompleteThroughAlarm(e:Event)
		{
			var answer:String = mll.loader.data;
			var data:Object = JSON.decode(answer);
			VK.api('photos.saveWallPhoto', {uid: user, server:data.server, photo:data.photo, hash:data.hash}, onSaveWallPhoto, main.onError);
		}
		private function onSaveWallPhoto(response)
		{
			var answer:String = response
			var data:Object = JSON.decode(answer);
			VK.api('wall.post', { message: msg, owner_id: user, attachment: data.id }, function(response:Object) { trace(response.post_id)}, main.onError);
		}
в аутпуте во флеше локально все ответы приходят. функция onSaveWallPhoto получает Object но вот дальше ошибки. если я пытаюсь как написано выше его JSON.deocde то получаю вконтакте все туже
Цитата:
SecurityError: Error #2000: Отсутствует активный контекст безопасности.
а локально в аутпуте
Цитата:
JSONParseError: Unexpected o encountered
at com.adobe.serialization.json::JSONTokenizer/parseError()
at com.adobe.serialization.json::JSONTokenizer/getNextToken()
at com.adobe.serialization.json::JSONDecoder/nextToken()
at com.adobe.serialization.json::JSONDecoder/parseArray()
at com.adobe.serialization.json::JSONDecoder/parseValue()
at com.adobe.serialization.json::JSONDecoder()
at com.adobe.serialization.json::JSON$/decode()
at Scripts::PostCard/onSaveWallPhoto()
at Function/<anonymous>()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
если трейсить response то вижу Object но response.id почемуто undefined
хотя ответ в аутпуте такой
Цитата:
{"response":[{"id":"photo55273336_228418330","pid":228418330,"aid":-7,"owner_id":55273336,"src":"http:\/\/cs11417.vkontakte.ru\/u55273336\/-7\/m_4513256f.jpg","src_big":"http:\/\/cs11417.vkontakte.ru\/u55273336\/-7\/x_aa56d719.jpg","src_small":"http:\/\/cs11417.vkontakte.ru\/u55273336\/-7\/s_acc095d3.jpg","created":1298899538}]}
может ли быть такое что функция вызывается до того как приходит ответ от сервера?

Добавлено через 1 час 50 минут
попробовал вот так:
Код AS3:
private function onUploadCompleteThroughAlarm(e:Event)
		{
			var answer:String = mll.loader.data;
			var data:Object = JSON.decode(answer);
			main.debug.appendText("on upload answer: "+data.server+"\n");
			VK.api('wall.savePost', {wall_id: user, post_id:"post1", server:data.server, photo:data.photo, hash:data.hash,  message: msg }, onSaveWallPhoto, main.onError);
			//VK.api('photos.saveWallPhoto', {uid: user, server:data.server, photo:data.photo, hash:data.hash}, onSaveWallPhoto, main.onError);
		}
		private function onSaveWallPhoto(response)
		{
			trace(response)
}
пишет:
Цитата:
Fail wall.post error_msg: Invalid hash
Добавлено через 5 часов 51 минуту
Все получилось ура!
Публикует запись) осталось сделать раасылку нескольким друзьям. думаю что реализую это поочереди. Впрочем кажется мне может помоч в этом execute

Добавлено через 6 часов 8 минут
вдруг каму то пригодится
мне нужно было сделать класс который публиковал бы на стену изображение из ByteArray (в моем случае срисовывался мувиклип).
для реализации мне понадобились:
- APIConnection.zip
- MultipartURLLoader
- as3corelib

Код AS3:
package Scripts
{
	import com.adobe.serialization.json.JSON;
	import com.adobe.images.JPGEncoder;
	import MultipartURLLoader.*;
 
	import flash.events.Event;
	import flash.utils.ByteArray;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Bitmap;
	import flash.display.PixelSnapping;
	import flash.geom.Matrix;
 
	public class PostCard
	{
 
		private var main; // ссылка на основной класс в катором создан APIConnection 
		private var VK; 
		private var user; //uid пользователя на стене которого размещаем запись
		private var byteArray:ByteArray; // ByteArray изображения которое хотим прикрепить к посту
		private var msg:String; // текст сообщения поста
		private var mll:MultipartURLLoader;
 
		public function PostCard(main, user, byteArray:ByteArray, msg:String)
		{
			this.msg = msg;
			this.user = user;
			this.main = main;
			this.byteArray = byteArray;
			this.VK = main.VK;
			VK.api('photos.getWallUploadServer',{uid:user},responseFromServer,main.onError);
		}
 
		private function responseFromServer(data)
		{
			mll = new MultipartURLLoader();
			mll.addEventListener(Event.COMPLETE, onUploadCompleteThroughAlarm);
			mll.addFile(byteArray, "file.jpg", "file1", 'image/jpg');
			mll.load(data.upload_url);
		}
 
		private function onUploadCompleteThroughAlarm(e:Event)
		{
			var answer:String = mll.loader.data;
			var data:Object = JSON.decode(answer);
			VK.api('photos.saveWallPhoto', {uid: user, server:data.server, photo:data.photo, hash:data.hash }, onSaveWallPhoto, main.onError);
		}
 
		private function onSaveWallPhoto(data)
		{
			VK.api('wall.post', { owner_id: user, attachment: data[0].id, message: msg}, function(e) { trace("onSaveWallPhoto id: "+e.post_id+"\n") }, main.onError);
		}
	}
}


Последний раз редактировалось knaka; 28.02.2011 в 17:27.
Старый 23.09.2011, 17:18
Drac0Sha вне форума Посмотреть профиль Отправить личное сообщение для Drac0Sha Найти все сообщения от Drac0Sha
  № 6  
Ответить с цитированием
Drac0Sha

Регистрация: Aug 2011
Сообщений: 50
простите, а как выглядело ваше обращение в main к этому классу Scripts.as

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

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

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


 


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


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