ActionScript 3.0 (Adobe Flash CS4)
Приложение получает заметки пользователей, создает новые замети, редактирует, удаляет, создает новые комментарии, редактирует и удаляет их.
Для работы с методами ВКонтакте API используется измененная мною библиотека VkApi. Находится в архиве с исходником.
Описание используемых методов
notes.get
Возвращает список заметок, созданных пользователем.
notes.getById
Возвращает заметку, по её id.
nid - id запрашиваемой заметки.
notes.getFriendsNotes
Возвращает список заметок, друзей пользователя.
notes.add
Создает новую заметку у текущего пользователя.
title - заголовок заметки.
text - текст заметки.
notes.edit
Редактирует заметку текущего пользователя.
title - заголовок заметки.
text - текст заметки.
notes.delete
Удаляет заметку текущего пользователя.
nid - id удаляемой заметки.
notes.getComments
Возращает список комментариев к заметке.
nid - id заметки комментарии которой нужно вернуть.
notes.createComment
Добавляет новый комментарий к заметке.
nid - id заметки в которой нужно создать комментарий.
message - текст комментария (минимальная длина - 2 символа).
notes.editComment
Редактирует указанный комментарий у заметки.
сid - id комментария, котороый нужно отредактировать.
message - новый текст комментария (минимальная длина - 2 символа).
notes.deleteComment
Удаляет комментарий.
сid - id комментария, котороый нужно удалить.
notes.restoreComment
Восстанавливает удалённый комментарий.
сid - id комментария, котороый нужно восстановить.
В уроке не использованы все возможные способы работы с заметками. Например, параметры count, offset, privacy и comment_privacy в этом уроке не используются, но вы можете использовать их с этой библиотекой. Для чего нужны эти параметры - читайте в полном описании методов на сайте вконтакте.
В коде урока нет обработок ошибок, возвращаемых сервером.
Создание приложения
1. Добавляем на сцену:
Текстовые поля с именами:
- uid_tf (поле ввода id пользователя, заметки которого будем получать)
- nid_tf (поле ввода id заметки)
- title_tf (поле ввода заголовка заметки)
- text_tf (поле ввода текста заметки)
- message_tf (поле ввода текста комментария)
- cid_tf (поле ввода id комментария)
- result_tf (поле с результатами)
Кнопки с именами:
- get_btn
- getById_btn
- getFriendsNotes_btn
- add_btn
- edit_btn
- delete_btn
- getComments_btn
- createComment_btn
- editComment_btn
- deleteComment_btn
- restoreComment_btn
2. Создаём Main.as и пишем код:
Код: Выделить всё
/* http://flapps.ru/forum/ - форум о создании флеш приложений на основе ВКонтакте API */package { import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; import vk.VkApiNode; public class Main extends Sprite { private var api_id:Number=1727522;// ID приложения private var api_secret:String="1gqE8m34rb";// секретный ключ private var api:VkApiNode; private var server_url; private var viewer_id; private var url_loader:URLLoader; private var url_request:URLRequest; private var query:String; private var wrapper:Object; public function Main():void { this.addEventListener( Event.ADDED_TO_STAGE, onAddedToStage ); } public function onAddedToStage(e: Event):void { wrapper=Object(parent.parent); // получаем api_settings из FlashVars var flags=wrapper.application.parameters.api_settings; // проверяем доступ к заметкам пользователя if (Boolean(flags&2048)) { // доступ разрешен viewer_id=wrapper.application.parameters.viewer_id; // определяем адрес сервиса API (vkontakte.ru или vk.com) server_url=wrapper.application.parameters.api_url+'?'; // заполняем текстовые поля uid_tf.text=viewer_id; title_tf.text='Создание приложений вконтакте'; text_tf.text='Я скачал исходник приложения на сайте http://flapps.ru'; message_tf.text='Я скачал исходник приложения на сайте http://flapps.ru'; // добавляем действия кнопкам get_btn.addEventListener(MouseEvent.CLICK, get_btnClick); getById_btn.addEventListener(MouseEvent.CLICK, getById_btnClick); getFriendsNotes_btn.addEventListener(MouseEvent.CLICK, getFriendsNotes_btnClick); add_btn.addEventListener(MouseEvent.CLICK, add_btnClick); edit_btn.addEventListener(MouseEvent.CLICK, edit_btnClick); delete_btn.addEventListener(MouseEvent.CLICK, delete_btnClick); getComments_btn.addEventListener(MouseEvent.CLICK, getComments_btnClick); createComment_btn.addEventListener(MouseEvent.CLICK, createComment_btnClick); editComment_btn.addEventListener(MouseEvent.CLICK, editComment_btnClick); deleteComment_btn.addEventListener(MouseEvent.CLICK, deleteComment_btnClick); restoreComment_btn.addEventListener(MouseEvent.CLICK, restoreComment_btnClick); // для работы с API api=new VkApiNode(viewer_id,api_id,api_secret,false,'XML','2.0',server_url); } else { // доступа нет // вызываем окно с настройками приложения (доступ к заметкам пользователя) wrapper.external.showSettingsBox(2048); // ПРИМЕЧАНИЕ! После вызова этого окна, логично использовать событие контейнера "onSettingsChanged". // Но этот урок не по использованию контейнера, поэтому придется просто обновить страницу. result_tf.text = 'Обновите страницу с приложением'; } } // получаем заметки пользователя public function get_btnClick(e: MouseEvent):void { var uid=int(uid_tf.text);// id пользователя query=api.getNotes(uid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,notesGiven); url_loader.load(url_request); } // заметки получены public function notesGiven(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='Всего: '+response.count+'\n'; for each (var item in response.note) { result_tf.appendText('nid: ' + item.nid + '\ntitle: ' +item.title + '\ntext: ' +item.text + '\ndate: ' +item.date + '\n\n'); } } // получаем заметку по id public function getById_btnClick(e: MouseEvent):void { var nid=int(nid_tf.text);// id заметки query=api.getNoteById(nid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteByIdGiven); url_loader.load(url_request); } // заметка получена public function noteByIdGiven(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='id: '+response..id+'\ntitle: '+response..title+'\ntext: '+response..text+'\ndate: '+response..date+'\nuser_id: '+response..user_id; } // получаем заметки друзей public function getFriendsNotes_btnClick(e: MouseEvent):void { query=api.getFriendsNotes(); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,friendsNotesGiven); url_loader.load(url_request); } // заметки друзей получены public function friendsNotesGiven(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='Всего: '+response.count+'\n'; for each (var item in response.note) { result_tf.appendText(item.first_name + ' ' + item.last_name + '\nnid: ' + item.id + '\ntitle: ' +item.title + '\ntext: ' +item.text + '\ndate: ' +item.date + '\n\n'); } } // создаем новую заметку public function add_btnClick(e: MouseEvent):void { var n_title=title_tf.text;// заголовок заметки var n_text=text_tf.text;// текст заметки query=api.addNote(n_title,n_text); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteAdded); url_loader.load(url_request); } // заметка создана public function noteAdded(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='nid: '+response.nid; } // редактируем заметку public function edit_btnClick(e: MouseEvent):void { var nid=nid_tf.text;// id заметки var n_title=title_tf.text;// заголовок заметки var n_text=text_tf.text;// текст заметки query=api.editNote(nid,n_title,n_text); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteEdited); url_loader.load(url_request); } // заметка изменена public function noteEdited(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text=response[0]; } // удаляем заметку public function delete_btnClick(e: MouseEvent):void { var nid=nid_tf.text;// id заметки query=api.deleteNote(nid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteDeleted); url_loader.load(url_request); } // заметка удалена public function noteDeleted(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text=response[0]; } // получаем список комментариев к заметке public function getComments_btnClick(e: MouseEvent):void { var nid=nid_tf.text;// id заметки query=api.getNoteComments(nid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteCommentsGiven); url_loader.load(url_request); } // комментарии получены public function noteCommentsGiven(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='Всего: '+response.count+'\n'; for each (var item in response.comment) { result_tf.appendText('id: ' + item.id + '\nmessage: ' +item.message + '\ndate: ' +item.date + '\n\n'); } } // добавляем комментарий к заметке public function createComment_btnClick(e: MouseEvent):void { var nid=nid_tf.text;// id заметки var n_message=message_tf.text;// текст комментария query=api.createNoteComment(nid,n_message); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteCommentCreated); url_loader.load(url_request); } // комментарий добавлен public function noteCommentCreated(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text='cid: '+response[0]; } // изменяем текст комментария к заметке public function editComment_btnClick(e: MouseEvent):void { var cid=cid_tf.text;// id комментария var n_message=message_tf.text;// текст комментария query=api.editNoteComment(cid,n_message); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteCommentEdited); url_loader.load(url_request); } // комментарий изменен public function noteCommentEdited(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text=response[0]; } // удаляем комментарий у заметки public function deleteComment_btnClick(e: MouseEvent):void { var cid=cid_tf.text;// id комментария query=api.deleteNoteComment(cid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteCommentDeleted); url_loader.load(url_request); } // комментарий удален public function noteCommentDeleted(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text=response[0]; } // восстанавливаем комментарий у заметки public function restoreComment_btnClick(e: MouseEvent):void { var cid=cid_tf.text;// id комментария query=api.restoreNoteComment(cid); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,noteCommentRestoreed); url_loader.load(url_request); } // комментарий восстановлен public function noteCommentRestoreed(event:Event):void { var response:XML=new XML(url_loader.data); result_tf.text=response[0]; } }}
3. Подключаем Main.as к fla
Если не знаете как, то посмотрите как это было сделано в этом уроке http://flapps.ru/forum/topic3.html
4. Загружаем приложение в контакт
Редактирование -> Настройки -> Обновление SWF-приложения -> Обзор -> Начать загрузку.
- Если приложение выключено, то включаем
Редактирование -> Настройки -> Состояние -> Приложение включено и видно всем.
- Если выключен контейнер, то включаем
Редактирование -> Настройки -> Flash-контейнер -> Без отступов и элементов управления.
5. Всё готово!
Исходник http://flapps.ru/example/notes.rar