Розробка програмного забезпечення для аналізу сучасного стану соціальних медіа

 













ДИПЛОМНА РОБОТА

Розробка програмного забезпечення для аналізу сучасного стану соціальних медіа


Вступ

користувач соціальний медіа програма

Завдяки науково-технічному прогресу, розвитку програмного забезпечення міжособистісна комунікація виходить на новий рівень, і починає тіснити класичну схему громадських, державних та маркетингових комунікацій через ЗМІ. Таке явище вимагає вивчення не тільки як унікальний культурний і суспільний феномен. Оскільки соціальні ЗМІ стають майданчиком для більш доступного та відкритого спілкування, проте вони також надають нові можливості для маркетингових комунікацій, вони стали неосвоєною територією для нових способів конкуренції, кількість людей залучених до соціальних медіа неухильно зростає. Відповідно зростає комунікаційний потенціал соціальних медіа - людський потенціал, тобто кількість людей здатних до дії, до активної комунікації.

В даний час збільшується кількість технічних засобів, що дозволяють мати доступ до соціальних медіа (мобільна техніка, КПК, нетбуки, і т. п.); зростає ринок апаратури і програмного забезпечення, що дозволяє створювати, викладати і управляти контентом соціальних медіа (цифрова фото / аудіо / відеоапаратура, програми редагування / монтажу зображення / відео / тексту / звуку, програми контролю за обліковими, спеціальні програми до браузерів і т. п.). Апаратура та програмне забезпечення стають доступними не тільки економічно, а й технічно, практично, з точки зору доступності навчання, застосування. Сучасна людина не тільки може дозволити собі техніку, але і здатний у досить короткі терміни засвоїти навички управління і роботи з нею на досить високому хорошому рівні.

Соціальні медіа є досить широким поняттям, що стосується до багатьох сфер життя та науки. Перш за все вони виступають як новітній спосіб спілкування людей, тобто несуть соціальний і комунікативний сенс, проте основою виступає широка технічна база у вигляді мережі Інтернет, з усіма апаратними та програмними засобами, тому що перш за все, соціальні медіа - це програмний продукт, що розміщений в мережі. Окрім очевидних сфер, існують і інші: бізнес, маркетинг, політика тощо, які швидко застосувалися до нових інструментів спілкування з людьми - користувачами соціальних медіа. Таким чином, явище соціальних медіа має звязки, з багатьма сферами життя і науки.

Людство отримало новий інструмент комунікації. Новизна з технічної токи зору потребує детального вивчення нового явища, його особливостей, складних частин та характеру поведінки.

Зміст дипломної роботи включає:

Вступ

Постановку задачі, що визначає задачі і цілі роботи

Перший розділ, в якому описується актуальність дослідження. Визначається чітке поняття соціальних медіа, їх відмінність від звичайних ЗМІ. Проводиться аналіз соціальних медіа з метою визначення того, з якого почнеться аналіз.

Другий розділ, в якому описується розробка програмного забезпечення, що використовується для аналізу, його структури, інтерфейсу та мови програмування.

Третій розділ, в ньому аналізуються дані, що отримані за допомогою програмного забезпечення.

Четвертий розділ, в якому описані результати роботи програмного забезпечення, описуються можливості подальшого використання отриманих даних.

Пятий розділ, що описує забезпечення безпечних умов праці робочого місця оператора ПЕОМ та ергономічні вимоги

Висновки.

Список використаної літератури та джерел інформації.

Додатки, що містять лістинг коду програми.

За матеріалами дипломної роботи була зроблена доповідь на науково-практичній конференції «Спецпроект: анализ научных исследований», та надруковано тези доповіді[1].

ПОСТАНОВКА ЗАДАЧІ

Згідно з темою дипломної роботи необхідно:

·Зібрати та структурувати відомості про обєкт аналізу;

·Визначити методику аналізу соціальних медіа;

·Визначити статистичні методи обробки інформації;

·Визначити алгоритм роботи програми;

·Розробити програмне забезпечення;

·Розробити інтерфейс взаємодії з користувачем;

·Визначити кінцевий вигляд результатів аналізу;

·Організувати збір інформації;

·Структурувати отриману інформацію.


1.Огляд сучасного стану проблеми


Соціальні медіа є досить молодим явищем, тому ще не сформульована чітка методологія оцінки. В залежності від потреб в інформації (тема, сфера, де її застосовуватимуть) використовують різні методи опитування.

Суть проблеми полягає в наступному. Сучасні методи суспільного опитування користувачів Інтернету проводяться за допомогою особистого інтервю (перевагою є достовірність, недоліком - великі витрати), телефонного опитування, Pop-up опитування, Software panel опитування тощо. Всім відомим методам властиві додаткові затрати, неефективність у виборі аудиторії, навіть, набридливість, відносно опитуємих.

Рівень проникнення Інтернету в Україні понад 20 млн. користувачів, а рівень користувачів соціальних медіа 87% від кількості користувачів Інтернету.

Також відіграє свою роль новизна поняття соціальних медіа: досить велика кількість користувачів Інтернету і, навіть, користувачів соціальних медіа не можуть чітко сформулювати поняття або взагалі не розуміють що це.

Тому для проведення опитування обрано новий шлях - опитування безпосередньо в середовищі соціальних медіа. Тобто опитування буде призначене лише цільовій аудиторії. Зробити це можливо проводячи опитування в будь-якому соціальному медіа. Тоді зявляється ще декілька перепонів: як вибирати респондентів і яким чином проводити опитування. Обидві задачі можна вирішити за допомогою веб-додатка, що буде реєструвати та вибирати респондента, а також бути анкетою опитування. Окрім цього кожне з соціальних ЗМІ містить певну інформацію про користувачів, яку вони добровільно повідомляють про себе. В деяких соціальних медіа можна отримати цю інформацію. Проте не існує загальних механізмів вийняття такої інформації, що і планується реалізувати і автоматизувати. Програм, що поєднують подібну функціональність невідомо, тому написання такого веб-додатка є доцільним.


2. Соціальні медіа


Соціальні медіа, що вибудовують співтовариство і певну взаємодію навколо певного виду контенту (тексту, відео, фото). Наприклад: блоги, форуми, соціальні мережі, Вікіпедія.

Соціальна мережа є онлайн середовищем, що об'єднує людей за інтересами. Сюди приходять, щоб обговорювати і коментувати різні теми та події. Одним словом, соціальна мережа - це цілий новий світ безкоштовних засобів поширення інформації, що будується в Інтернеті зусиллями індивідуальних користувачів і компаній. Комунікації через традиційні ЗМІ, по-перше, повністю підконтрольні видавцям, а по-друге, мають переважно спадну спрямованість. Публікації готуються професійними журналістами на основі вивчення фактичних матеріалів, потім їх редагують і тільки потім допускають до поширення.

У соціальних медіа, наприклад в блогах, будь-який зареєстрований користувач має право голосу і може брати участь в багатопотокових дискусіях за принципом: «все зі всіма», кожен учасник висловлює свою думку і ділиться інформацією. І все це загальнодоступно в режимі онлайн. Блогерів часто називають «цивільними журналістами»

Соціальна мережа представляє собою соціальну структуру (математично - граф), що складається з групи вузлів, якими є соціальні об'єкти (люди або організації), та зв'язків між ними (соціальних взаємин)», не дає нам можливості для чіткої і конкретної діяльності, тому що оперує дуже абстрактними і суб'єктивними поняттями (людина, взаємини).

Види соціальних медіа

Соціальні медіа можуть приймати різні форми, в тому числі Інтернет-форуми, блоги, мікроблоги, вікі, підкасти, фотографії або картинки, відео, рейтинги і соціальні закладки. Каплан і Хенлін створені схеми класифікації для різних соціальних типів ЗМІ у своїй статті Бізнес Горизонти [3] опублікованої в 2010 році. За словами Каплана і Хенлін існує шість різних типів соціальних медіа: спільні проекти, блоги та мікроблоги, зміст громади, сайти соціальних мереж, віртуальних ігрових світах, і віртуальні соціальні світи. Технології включають в себе: блоги, обмін зображеннями, стіни-повідомлень, електронну пошту, миттєві повідомлення, обмін музичними файлами, краудсорсінг, і Voice over IP. Багато з цих соціальних послуг, можуть бути інтегровані з допомогою соціальних платформ мережі.

Класифікуємо за напрямом діяльності:

)Комунікації

·Блоги: Blogger, ExpressionEngine, LiveJournal, Open Diary, TypePad, Vox, WordPress, Xanga

·Мікроблогінгу: FMyLife, Foursquare, Jaiku, Plurk, Posterous, Tumblr, Twitter, Qaiku, Google Buzz, Identi.ca Nasza-Klasa.pl

·Соціальні мережі ASmallWorld, Bebo, Cyworld, Diaspora, Facebook, Hi5, Hyves, LinkedIn, MySpace, Ning, Orkut, Plaxo, Tagged, XING, IRC, Yammer

·Подієві комунікації: Eventful, The Hotlist, Meetup.com, Upcoming

·Агрегатори інформації: Netvibes, Twine (website)

·Геосоціальних сервіси: Foursquare, Geoloqi, Gowalla, Facebook places, The Hotlist, Google Latitude

)Спільна робота

·Вікі: PBworks, Wetpaint, Wikia, Wikimedia, Wikispaces

·Соціальні закладки: [5] CiteULike, Delicious, Diigo, Google Reader, StumbleUpon, folkd

·Новини (користувачі самі шукають інформацію і завантажують її на сайт соціальних новин, де передплатники мають можливість обговорювати її зміст): Digg, NowPublic, Reddit, Newsvine

·Навігація: Trapster, Waze

·Системи управління контентом: Wordpress, Drupal, Plone

·Управління документами та засоби редагування: Google Docs, Syncplicity, Docs.com, Dropbox.com

)Мультимедіа

·Розповсюдження фото та витворів мистецтва: deviantArt, Flickr, Photobucket, Picasa, SmugMug, Zooomr

·Розповсюдження відеоsevenload, Viddler, Vimeo, YouTube, Dailymotion, Metacafe, Nico Nico Douga, Openfilm

·Кастинг (трансляції): Justin.tv, Livestream, OpenCU, Skype, Stickam, Ustream, blip.tv, oovoo, Youtube

·Музика: Last.fm, The Hype Machine.

·Розповсюдження презентацій: scribd, SlideShare

)Огляди

·Огляд продуктів: epinions.com, MouthShut.com

·Бізнес огляди: Customer Lobby, Yelp, Inc.

·Спільнота «Питання та відповіді»: Askville, EHow, Stack Exchange, WikiAnswers, Yahoo! Answers, Quora, ask.com, answers mail.ru.

)Віртуальні світи

·Active Worlds, Forterra Systems, Second Life.


2.1 Дослідження соціальних медіа


Методика дослідження

Соціальні медіа включають в себе програмну та апаратну складові, які, проте, не можуть існувати без користувачів, бо самі користувачі займаються наповненням Інтернет-сервісів. Таким чином користувачі роблять з Інтернет-сервісу соціальні медіа.

Вивчення соціальних медіа з точки зору напряму діяльності в соціальних медіа, подальшого розвитку, тенденцій зводиться до вивчення користувачів. Найбільш достовірну інформацію про користувача можливо отримати від нього самого, за допомогою особистого опитування та завдяки інформації, яку він добровільно розмістив про себе.

Перш ніж приступати до аналізу статистичних даних, спочатку необхідно дати опис процесу підготовки емпіричних даних до безпосереднього аналізу. Вибір математичного методу аналізу даних тісно повязаний зі шкалами відповідних ознак.

Зараз перейдемо до розгляду безпосередньо до змінних досліду. Для оцінки проводиться лише частотній аналіз. Змінні, що відноситься до номінальної шкали часто використовуються для угрупування, за допомогою яких сукупна вибірка розбивається по категоріях цих змінних. В часткових вибірках проводяться однакові статистичні тести, результати яких потом порівнюються одним з одним.

Якщо проводити аналіз зібравши данні, що користувачі добровільно розмістили в соціальних медіа, то всі такі користувачі потраплять у вибірку. А величина вибірки буде достатньо великою, щоб зменшити статистичну похибку і бути репрезентативною генеральній сукупності, тобто всім користувачам Інтернету.

Середовище дослідження

Наступним важливим питанням дослідження стає місце, точніше, спосіб опитування користувачів. Сучасні методи суспільного опитування користувачів Інтернету проводяться за допомогою особистого інтервю (перевагою є достовірність, недоліком - великі витрати), телефонного опитування, Pop-up опитування, Software panel опитування тощо. Всім відомим методам властиві додаткові затрати, неефективність у виборі аудиторії, навіть, набридливість, відносно опитуємих.

Для проведення опитування обрано новий шлях - опитування безпосередньо в середовищі соціальних медіа. Тобто опитування буде призначене лише цільовій аудиторії. Зробити це можливо проводячи опитування в будь-якому соціальному медіа.

Також важливим фактором при виборі середовища є доступність інформації користувачів і їхня абсолютна кількість.

Найбільш популярними з соціальних медіа на даний момент є соціальні мережі, вони дуже широко розповсюджені серед користувачів соціальних медіа і взагалі є найвідомішими соціальними медіа. Кількість людей, що користуються деякими соціальними мережами у всьому світі зіпоставима з розмірами великої густонаселеної країни. Кількість самих соціальних мереж теж досить велика, вони різноманітні за напрямком і досить суттєво відрізняються залежно від країни, де проживає користувач. Найбільш поширеними є соціальні мережі без чіткої направленості за інтересами (на відміну від, соціальних мереж читачів книжок, меломанів, фотографів, тощо - тобто таких мереж, де люди групуються за переважаючим інтересом). Прикладами таких соціальних мереж є Facebook, Vkontakte, odnoklassniki. Їх існує велика кількість, проте, тільки ці досягли глобальних масштабів і домінують серед інших. Слід також враховувати те, що одна людина може бути користувачем декількох соціальних мереж одночасно.

«В Контакте» - найбільша в Уанеті (Інтернет просторі на теренах України) соціальна мережа. Заснована в 2006 році на форумі студентів СПбДУ, власником якого теж Павло Дуров, було оголошено про запуск «закритого додатки до форуму» Проект на той момент був закритим: реєстрація як і раніше була доступна для всіх без винятку студентів за запрошеннями і при обов'язковому зазначенні справжні ім'я та прізвища. В 2006 була відкрита вільна реєстрація.

Користувачам «В Контакте» доступний характерний для багатьох соціальних мереж набір можливостей: створювати профіль з інформацією про себе, використовувати і поширювати контент, гнучко управляти приватних даних, взаємодіяти з іншими користувачами безпосередньо, а також через механізм груп і зустрічей, відслідковувати через стрічку новин активність друзів і співтовариств. Інтерфейс «В Контакте» доступний більш ніж на 200 мовах.

«В Контакте» пропонує стороннім ресурсів використовувати спеціально розроблені додатки для глибокої інтеграції з соціальною мережею.

Також важливо визначити той факт, що соціальна мережа, в якій буде розміщено додаток, надає широку можливість поширення додатку, використовуючи притаманні соціальним медіа механізми.

Розмістимо додаток в соціальній мережі «В Контакте». Вбудовані функції цієї соціальної мережі не поступаються якістю іншим. Є можливість взаємодіяти з інформацією користувачів за допомоги «ВКонтакте API». Саме завдяки гарному API існують можливості для отримання інформації про будь-якого користувача, такої, що він розмістив добровільно і не приховує. Ця лазівка і є вирішальним фактором при виборі середовища для аналізу.

Соціальні медіа і соціальні мережі зокрема використовують так званий «ефект вірусності»: корисна або цікава інформація поширюється серед користувачів завдяки їм же. Тобто один користувач передає інформацію іншим, ті передають її далі, іншим користувачам. Таке поширення інформації відбувається завдяки штатним інструментам соціальних медіа: коментуванням та функціями «Мені подобається» («Like») і «Розповісти друзям» («Share»). Також для розповсюдження інформації використовуються групи та публічні сторінки, що забезпечують постійний доступ до неї.

Додаток створюється з метою отримання корисної інформації від користувачів, проте користувачам він може не здаватися корисним чи цікавим саме для них. Це може відобразитися на розповсюдженні додатку (якщо він не цікавий користувачу, той наврядчи розповість про нього іншим), тому в додатку передбачена функціональність, яка повинна зацікавити користувача, привернути його увагу і спонукати розповсюджувати додаток далі. Це та частина додатку, що оброблює дані користувача, доступні з його акаунта в соціальній мережі та показує йому в цікавому вигляді.

Також передбачене створення публічної сторінки в соціальний мережі (групи), з описом інформації про дослідження. Тобто зацікавлені люди можуть централізовано поширювати додаток і сторінку з інформацією.


.2 Розробка програмного забезпечення


Вибір мови програмування

ActionScript - об'єктно-орієнтована мова програмування, один з діалектів ECMAScript, який додає інтерактивність, обробку даних і багато іншого є вміст Flash-додатків. ActionScript виповнюється віртуальною машиною (ActionScript Virtual Machine), яка є складовою частиною Flash Player. ActionScript компілюється в байт-код, який включається в SWF-файл.файли виконуються Flash Player-ом. Flash Player існує у вигляді плагіна до веб-браузера, а також як самостійне виконується додаток (standalone). У другому випадку можливе створення виконуваних exe-файлів (projector), коли swf-файл включається у Flash Player.

За допомогою ActionScript можна створювати інтерактивні мультимедіа-додатки, ігри, веб-сайти та багато іншого.як мова з'явилася з виходом 5 версії Macromedia Flash, яка стала першою програмованої на ActionScript середовищем. Перший реліз мови називався ActionScript 1.0. Flash 6 (MX). У 2004 році Macromedia представила нову версію ActionScript 2.0 разом з виходом Flash 7 (MX 2004), в якій було запроваджено суворе визначення типів, засноване на класах програмування. Тобто з'явилися нові ключові слова:

·class (клас),

·interface (інтерфейс),

·extends (установка спадкування)

·модифікатори доступу: private, public;

·та інші.1.0 є прототипною мовою програмування. Тобто він цілком реалізує всі три принципи об'єктно-орієнтованого програмування.2.0 є надбудовою над ActionScript 1.0. Перевірка типів і робота з ієрархією класів здійснюється під час компіляції, яка закінчується генерацією байткода, аналогічного ActionScript 1.0.

У 2006 році вийшов ActionScript 3.0 у середовищі програмування Adobe Flex, а пізніше в Adobe Flash 9.3.0 представляє, в порівнянні з ActionScript 2.0 якісна зміна, він використовує нову віртуальну машину AVM 2.0 і дає взамін колишнього формального синтаксису класів даний класова (class-based) Об'єктно-орієнтоване програмування. ActionScript 3.0 забезпечує зростання продуктивності, в порівнянні з ActionScript 1.0/2.0, до 700 разів (це лише обробка інструкцій, не зачіпаючи графіку). ActionScript 3.0 дозволяє працювати з бінарними даними, з BitMap (що забезпечує значний приріст продуктивності: до 10000 разів). ActionScript 3.0 по швидкості наблизився до таких мов програмування, як Java і C #. Збільшення продуктивності засноване на динамічній трансляції коду (JIT). Таке збільшення продуктивності можливе лише для деяких типів даних і вимагає особливої ??організації коду. Обсяг коду, як правило збільшується в кілька разів (в порівнянні з AS1).


2.3 Опис програми


В межах дослідницької роботи передбачається створення додатку, за допомогою якого буде проводитися дослідження. Програма створюється на мові програмування ActionScript 3 за допомогою програмного пакету Adobe Flash Builder 4.1 та Adobe Flash Professional CS5. Такий вибір обумовлено можливостями API Vkontakte та зручністю інтерфейсу створює мого додатку завдяки технології Adobe Flash.

Структура програми включає 10 класів, що реалізовують передбачену функціональність. Функції програми:

·Регістрація користувача;

·Отримання інформації з профілю за допомогою API «В Контакте» (на схемі: «Всі користувачі» ? «Інформація»);

·Опитування користувача (на схемі: «Користувач» ? «Форма анкетування» ? «Анкетування»);

·Обробка інформації (на схемі: «Анкетування» ? «VPS» та «Інформація» ? «VPS»);

·Вивід інформації користувачеві (на схемі: «XML База даних» ? «Форма результатів» ? «Користувач»);

·Вивід інформації адміністратору (на схемі: «XML База даних» ? «Адміністратор»).


Рис. 2.1 Схема роботи додатку

Розглянемо частину коду, що відповідає за створення додатку. Під час роботи додаток звертається до «API В Контакте» та отримує інформацію, що доступна на сторінці його профілю.

class Main extends MovieClip {

// опис зміннихvar api_id: Number; // id додатку та інші службові параметри: сигнатура, секретний код доступу, id користувача, ключ авторизаціїvar sid: String;var secret: String;var id_viewer: Number;var auth_key: String;var api_url: String = '#"justify">// імя та призвище користувачаvar first_name: String;var last_name: String;

// створення обєктів, що завантажують дані про користувачівvar xmlloader:URLLoader = new URLLoader();var stat_loader:URLLoader = new URLLoader();var listFriendsLoader:URLLoader = new URLLoader();var listCityLoader:URLLoader = new URLLoader();var listGroupLoader:URLLoader = new URLLoader();

// Функція, що отримує даніfunction Main()

{

// Отримуємо id користувача_viewer = parseInt (LoaderInfo (root.loaderInfo).parameters.viewer_id);_key = LoaderInfo (root.loaderInfo).parameters.auth_key;

// secret для генерування сігнатури= LoaderInfo (root.loaderInfo).parameters.secret;

// id сессии= LoaderInfo (root.loaderInfo).parameters.sid;

// адреса API_url = LoaderInfo (root.loaderInfo).parameters.api_url;_id = LoaderInfo (root.loaderInfo).parameters.api_id;xmlNames:XML;= new XML (LoaderInfo (root.loaderInfo).parameters.api_result);= new Data (id_viewer, auth_key, secret, sid, String (api_id), api_url, player_name);= new ChangeList(appData);= new Statistica(appData);.addEventListener (Data.NOT_LOAD, onNotLoad);.addEventListener (Data.BEGIN_LOAD_CHANGES_DATA, onBeginLoad);.addEventListener (Data.END_LOAD_CHANGES_DATA, onEndLoad);.x = 30;.y = 50;

// Перевірка, чи проходив анкетування користувач ранішеstat_vars:URLVariables = new URLVariables();stat_request:URLRequest = new URLRequest (+ «new_friends.php»); // Скрипт при завантаженні додатку_request.method = URLRequestMethod.POST;_vars ['id_player'] = id_viewer;_vars ['first_name'] = first_name;_vars ['last_name'] = last_name;_vars['bdate'] = xmlNames..bdate.toString();_vars['city'] = xmlNames..city.toString();_vars['country'] = xmlNames..country.toString();_vars ['auth_key'] = auth_key;_request.data = stat_vars;_loader.load (stat_request);_loader.addEventListener (Event.COMPLETE, onCompleteLoad);_loader.addEventListener (IOErrorEvent.IO_ERROR, onErrorConnectToServer);

};


Розглянемо частину коду, що виводить статистику.function PutStats:void

{

// отримання за допомогою API списку користувачів у вигляді XMLxmlFull:XML;= appData.getXmlFullFriendsData();


// додавання елементу інтерфейсу= new TextField();.x = 20;.y = 35;.width = 400;.height = 23;(statisticTitle);(viewBar==1)

{(xmlFull, 0,40);(xmlFull, 200,40);

}if (viewBar==2)

{(xmlFull, 0,40);(xmlFull, 200,40);

}

}

Розглянемо частину коду, що малює кругову діаграму та створює легенду.

// на прикладі статистики за вікомfunction drawAgeBlock (xmlFull:XML, x0:int, y0:int):void

{ // Статистика за вікомnGroup: Number = 10;angleList: Array = new Array(nGroup);dataList: Array = new Array();

// Підписуємо діаграму= new TextField();.x = x0 + 0;.y = y0 + 30;.width = 200;.htmlText = '<P ALIGN= «CENTER»> <FONT SIZE= «+2» >За віком</FONT></P>\n';(ageTitle);

// Малюєми діаграму= new Bar (angleList, colorList, true);.x = 100 + x0;.y = 140 + y0;(sBar);

i:int;

// заповнюємо значеннямиm:int;.push({id: 0, name: «Не вказано\t\t», n:0});.push({id: 1, name: «<16 \t\t», n:0});.push({id: 2, name: «16-20\t\t», n:0});.push({id: 3, name: «21-25\t\t», n:0});.push({id: 4, name: «26-30\t\t», n:0});.push({id: 5, name: «31-35\t\t», n:0});.push({id: 6, name: «36-45\t\t», n:0});.push({id: 7, name: «41-45\t\t», n:0});.push({id: 8, name: «46-50\t\t», n:0});.push({id: 9, name: «>51 \t\t», n:0});nYear:int;(i=0; i<nAll; i++)

{(String (xmlFull.user[i].bdate)==»») {dataList[0].n=int (dataList[0].n)+1;} // Перевірка, чи вказано день народження, тут не вказаноif (String (xmlFull.user[i].bdate).length<8) {dataList[0].n=int (dataList[0].n)+1;} // тут теж

{ // а тут вказано

// рахуємо вік

// (сьогоднішня дата мінус дата народження)er: Array = String (xmlFull.user[i].bdate).split(».»);dDate: Date = new Date();.setTime((new Date()).getTime() - (new Date (int (er[2]), int (er[1]), int (er[0]), 0,0,0,0)).getTime());= dDate.fullYear;

// рахуємо кількість друзів кожної вікової групи(nYear<=15) {dataList[1].n=int (dataList[1].n)+1;}if (nYear<=20) {dataList[2].n=int (dataList[2].n)+1;}if (nYear<=25) {dataList[3].n=int (dataList[3].n)+1;}if (nYear<=30) {dataList[4].n=int (dataList[4].n)+1;}if (nYear<=35) {dataList[5].n=int (dataList[5].n)+1;}if (nYear<=40) {dataList[6].n=int (dataList[6].n)+1;}if (nYear<=45) {dataList[7].n=int (dataList[7].n)+1;}if (nYear<=50) {dataList[8].n=int (dataList[8].n)+1;}{dataList[9].n=int (dataList[9].n)+1;};

};

// Виводимо легендуs: String;tBlock: Sprite;(var k:int = 0; k < nGroup; k++)

{

// малюємо шифри кольорів= new Sprite();.x = x0+20; tBlock.y = y0 + 240 + 14*k;.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);

// підписуємо легенду

// назва категорії. Процентне відношення та абсолютна кількість= new TextField();.x = 20;tText.y = -5;.width = 170;.addChild(tText);

= dataList[k].name;.appendText (s+ Math.round (100*Number (dataList[k].n)/nAll) + «% (» + dataList[k].n +»)\n»);

(nAll>0) {(k==0) {angleList[k] = 360*Number (dataList[k].n)/nAll;}{angleList[k] = angleList [k-1] + 360*Number (dataList[k].n)/nAll;};

}if (k<nGroup) {angleList[k]=0;}{angleList[k]=360};

};

// Створюємо обєкт діаграму= new Bar (angleList, colorList);.x = 100 + x0;.y = 140 + y0;(sBar);

}

//Bar - тип даних діаграмаclass Bar extends MovieClip {

// характеристикиvar radius: Number = 70;var colorList: Array;

// створюємо діаграмуfunction Bar (m: Array, cList: Array, empty: Boolean=false) {= cList;.graphics.lineStyle();(empty)

{

// малюємо пусту.graphics.beginFill (colorList[9], 1);.graphics.drawCircle (0,0, radius);;

}tAngle: Number;

// Заливка секторів(var k: Number=0; k<m.length; k++) {(k==0) {tAngle = 0;} else {tAngle = m [k-1];};.graphics.beginFill (colorList [k% colorList.length], 1);(tAngle, m[k]);.graphics.endFill();

}

// Малюємо контуриlab: TextField;x, y: Number;(var i: Number=0; i<m.length; i++) {(i==0) {tAngle =0;} else {tAngle=m [i-1];};(((m[i] - tAngle)/3.6)<1.5) {.graphics.lineStyle();

}(((m[i] - tAngle)/3.6)<3) {.graphics.lineStyle (1,0xFFFFFF);

}if (((m[i] - tAngle)/3.6)<7) {.graphics.lineStyle (2,0xFFFFFF);

}if ((m[i] - tAngle)==360) {this.graphics.lineStyle();}{this.graphics.lineStyle (3,0xFFFFFF);};

(tAngle, m[i]);= new TextField();= (radius+15)*Math.sin((- (tAngle+m[i])/2+180)*Math.PI/180) - 10;= (radius+10)*Math.cos((- (tAngle+m[i])/2+180)*Math.PI/180) - 7;

// Додаємо підписи секторів.x = x;.y = y;(((m[i] - tAngle)/3.6)>=2.5) {.appendText (String (Math.round((m[i] - tAngle)/3.6)) + «%»);

};

(lab);

}

}

}


2.4 Опис інтерфейсу


Програма завдяки використанню технології Flash має зрозумілий та лаконічний інтерфейс.

Відразу після першого запуску зявляється вікно, що попереджує про те, що програма матиме доступ до загальної інформації.


Рис. 2.2 Попередження безпеки


Після підтвердження відбувається запуск додатку. Отримавши дозвіл, звертаючись до серверів «В Контакте» отримує інформацію про користувача. Програма відразу ж оброблює доступні дані та видає статистику користувача. Йому доступна інформація щодо статі та віку його друзів міста, в якому проживають, та основного ВНЗ, в якому навчалися або навчаються. За цими даними додаток проводить частотний аналіз і представляє їх у вигляді кругових діаграм. Користувачу доступні фільтри, щоб корегувати список друзів (вибірку), серед яких буде проведено аналіз і виведено на екран, проте, для загального дослідження програма отримує всю інформацію, без заданих користувачем обмежень за допомогою фільтрів.

Завдяки можливості отримання інформації про користувача не займаючи при цьому нього самого, взаємодія з додатком полегшується и пришвидшується дослідження: йому не має потреби зазначати своє імя, стать, вік, місто, в якому проживає, ВНЗ, в якому навчався або навчається зараз, та інше. При повторному проходженні анкетування програма не прийме його відповіді, якщо воно не потрібне і, навпаки, коли необхідно звернутися до думки користувача, що вже проходив анкетування, вбудовані засоби «В Контакте» дозволяють надіслати йому повідомлення і запросити пройти анкетування.


Рис. 2.3 Статистика за віком і статтю користувачів


Статистика за віком розподіляється в залежно від вікових груп, такими є групи до 16 років, 16-20 років, 21-25 років, 26-30 років, 31-35 років, 36-40 років, 41-45 років, 46-50 років та старше 51 року. Такий поділ добре характеризує кожну з вікових груп, притаманні їм дії та моделі поведінки.

Поділ же на статі відіграю мізерну роль у формуванні поведінки в соціальних медіа, проте така характеристика є все одно важливою.


Рис. 2.4 Статистика за містом, в якому проживають, та основного ВНЗ, в якому навчалися або навчаються користувачі


Статистика за містом, в якому проживає користувач, передбачає результати за девятьма найчастіше зустрічаємими містами.

Статистика за ВНЗ, в якому людина навчалася або навчається у даний момент, аналогічна статистиці за містами. Якщо людина має декілька вищих освіт, то буде враховуватися той ВНЗ, що вказано першим.

На другому етапі користувачеві пропонується пройти анкетування. Користувач має на кожне запитання декілька варіантів відповідей. Таке анкетування не завдає користувачеві труднощів дати на питання чіткі відповіді і водночас дає певну гнучкість опитуванню.

Рис. 2.5 Анкетування користувача


Після проходження анкетування програма оброблює дані, зберігає їх та формує звіт для користувача. Інтерфейс звіту нічим не відрізняється від того, що виводив статистичну інформацію зі сторінки користувача.

Доступна загальні інформація про всіх користувачів, що встановили додаток. Це категорії «Стать і вік» та «Місто та ВНЗ» так само як і в статистиці користувача. Фільтрування інформації так само доступне, щоб форсувати вибірку.


Рис. 2.6 Дані статистики всіх користувачів за містом, в якому проживають, та основного ВНЗ, в якому навчалися або навчаються


Визначення моделі поведінки користувачів, що пройшли анкетування, виводиться на екран. Можна використовувати фільтри, як і раніше, щоб обмежувати аудиторію соціальних медіа.

Також визначається належність користувача конкретній групі, що характеризуються моделями поведінки, про що його інформується.


Рис. 2.7 Дані статистики всіх користувачів за моделлю поведінки та модель поведінки самого користувача


3. Аналіз отриманих даних


3.1 Зберігання даних


В результаті розробки додатку і розміщення його в соціальній мережі постійно отримується нова інформація, що формує результати дослідження. Процес дослідження є неперервним, це важливо вважаючи той факт, що кількість користувачів Інтернету та соціальних медіа теж постійно зростає.

Необроблена інформація також зберігається і може бути отримана і оброблена в залежності від поставлених цілей. Наприклад, підприємству або відділу маркетингу потрібна інформація щодо певної категорії споживачів, завдяки збереженим необробленим даним, можна сформувати за необхідними параметрами вибірку і отримати необхідні дані.

Слід зазначити, що в міру вивчення аудиторії користувачів соціальних медіа «зсередини» (опитування тільки користувачів соціальних медіа), неможливо визначити їхню абсолютну кількість, та кількість відносно загальної кількості Інтернету. Проте, таким чином отримується біль чітка і точна інформація щодо користувачів соціальних медіа.

Програма зберігає данні, що отримуються під час її роботи, на веб-сервері у вигляді XML файлу. XML база даних побудована за спеціальним шаблоном і всі існуючі в ній дані можна легко зіпсувати, тому доступ до бази даних має лише адміністратор. Через певний проміжок часу робиться резервна копія XML документа, щоб запобігти втраті даних.

База даних створена таким чином, щоб всі дані, що в ній містяться, можна було комфортно переглядати та оброблювати. Для цього передбачена можливість імпорту бази даних в Microsoft Access, що дозволяє інтерпретувати інформацію засобами Access та Excel, у будь-який вигляд, що його потребує певна задача.

До бази даних існує схема даних XSD, завдяки якій XML файл можна імпортувати. В самому файлі містяться поля, що зберігають інформацію отриману безпосередньо із середовища «В Контакті», а також додаткові поля, що присутні лише там, де містититься інформація анкетування. Такий запис файлу дозволяє економити дисковий простір та зменшувати час обробки інформації.

Аналіз даних може бути отриманий як в автоматичному режимі так і в ручному. Програма може сама проаналізувати зібрану інформацію і представити у наглядному виді. Ця можливість реалізована за такими категоріями:

В результаті роботи додатку, отримана інформація оброблюється, після чого представляється в зручному вигляді. Категорії, за якими автоматично оброблюється інформація: вік, стать, місцезнаходження, освіта, модель поведінки в соціальних медіа. Якщо виникає потреба отримати аналіз будь-якого іншого напрямку, наприклад, рід занять, інтереси, споживацькі вподобання, цілі користування Інтернетом тощо, тоді необхідний певний порядок дій:

·завантажити базу даних XML з сервера на локальний компютер;

·імпортувати XML до Microsoft Access, використовуючи штатний механізм Access;

·за домопогою засобів Microsoft Access зробити вибірку;

·обробити вибірку за допомогою Microsoft Access або Microsoft Excel.

Для обробки даних з Microsoft Access можна використовувати і будь-які інші програмні засоби, що можуть бути в пригоді для інших задач.

Загалом інформація всередині XML бази даних зберігаються в такому вигляді:


<UserInfo>

<Код>1</Код>

<id_vk>1702950</id_vk>

<Name>Александр</Name>

<SecondName>Короид</SecondName>

<BD>27.05.1990</BD>

<Sex>1</Sex>

<Contry>Украина</Contry>

<City>Днепропетровск</City>

<Univercity>ДНУ им. О. Гончара</Univercity>

<Faculty>Прикладной математики</Faculty>

<Groups>

ПК-11 м ПК-11с ДНУ Центр информации, Буковель, ПК-07-2

</Groups>

<Param1>1</Param1>

<Param20>5</Param20>

</UserInfo>


Але заважаючи на збитковість XML файлів та їх великий розмір, теги максимально скорочені, відсутні атрибути, а додаткові параметри згруповані в одне поле, яке відсутнє для записів, що описують користувача не пройшовщого анкетування.

Таким чином кінцевий XML файл виглядає наступним чином:


<? xml version= «1.0» encoding= «UTF-8»?>

<dataroot xmlns:od= «urn:schemas-microsoft-com:officedata» xmlns:xsi= «#"justify"><o>

<Код>1</Код>

<i>1702950</i>

<n>Александр</n>

<s>ч</s>

<b>1990-05-27</b>

<c>Украина</c>

<t>Днепропетровск</t>

<u>ДНУ им. О. Гончара</u>

<f>Прикладной математики</f>

<p>10101001011101010135</p>

</o>

</dataroot>


3.2 Статистичний аналіз


Генеральна сукупність. Сумарна чисельність об'єктів спостереження (людей), що володіють певним набором ознак (стать, вік, рід зайнятості, чисельність і т.д.), обмежена в просторі і часі

Вибірка (Вибіркова сукупність) Частина об'єктів з генеральної сукупності, відібраних для вивчення, з тим щоб зробити висновок про всю генеральної сукупності. Для того щоб висновок, отримане шляхом вивчення вибірки, можна було поширити на всю генеральну сукупність, вибірка повинна мати властивість репрезентативності.

Репрезентативність вибірки. Властивість вибірки коректно відображати генеральну сукупність. Одна і та ж вибірка може бути репрезентативною для різних генеральних сукупностей.

Важливо розуміти, що репрезентативність вибірки і помилка вибірки - різні явища. Репрезентативність, на відміну від помилки ніяк не залежить від розміру вибірки.

Помилка вибірки (довірчий інтервал). Відхилення результатів, отриманих за допомогою вибіркового спостереження від істинних даних генеральної сукупності.

Помилка вибірки буває двох видів - статистична та систематична. Статистична похибка залежить від розміру вибірки. Чим більше розмір вибірки, тим вона нижче. Зазвичай, коли говорять про помилку вибірки, мають на увазі саме статистичну помилку.

Систематична помилка залежить від різних чинників, що постійний вплив на дослідження і зміщуючи результати дослідження в певну сторону. В деяких випадках, коли відомі істинні розподілу, систематичну помилку можна нівелювати введенням квот або переважування даних, але в більшості реальних досліджень навіть оцінити її буває досить проблематично.

Вибірки діляться на два типи:

·Імовірнісні

·Неімовінісні

. Імовірнісні вибірки

.1 Випадкова вибірка (простий випадковий відбір). Така вибірка припускає однорідність генеральної сукупності, однакову ймовірність доступності всіх елементів, наявність повного списку всіх елементів. При відборі елементів, як правило, використовується таблиця випадкових чисел.

.2 Механічна (систематична) вибірка. Різновид випадкової вибірки, упорядкована за якоюсь ознакою (алфавітний порядок, номер телефону, дата народження і т.д.). Перший елемент відбирається випадково, потім, з кроком 'n' відбирається кожен 'k'-ий елемент. Розмір генеральної сукупності, при цьому - N = n * k

.3 стратифікована (районована). Застосовується в разі неоднорідності генеральної сукупності. Генеральна сукупність розбивається на групи (страти). У кожній страті відбір здійснюється випадковим або механічним чином.

.4 Серійна (гніздова або кластерна) вибірка. При серійної вибіркою одиницями відбору виступають не самі об'єкти, а групи (кластери або гнізда). Групи відбираються випадковим чином. Об'єкти всередині груп обстежуються суціль.

. Неімовінісні вибірки. Відбір в такій вибірці здійснюється не за принципами випадковості, а за суб'єктивними критеріями - доступності, типовості, рівного представництва і т.д.

.1. Квотна вибірка. Спочатку виділяється певна кількість груп об'єктів. Для кожної групи задається кількість об'єктів, які повинні бути обстежені. Кількість об'єктів, які повинні потрапити в кожну з груп, задається, частіше за все, або пропорційно заздалегідь відомою часткою групи в генеральній сукупності, або однаковим для кожної групи. Всередині груп об'єкти відбираються довільно. Квотні вибірки використовуються в маркетингових дослідженнях досить часто.

.2. Метод сніжного кома. Вибірка будується наступним чином. У кожного респондента, починаючи з першого, просяться контакти його друзів, колег, знайомих, які підходили б під умови відбору і могли б взяти участь в дослідженні. Таким чином, за винятком першого кроку, вибірка формується за участю самих об'єктів дослідження. Метод часто застосовується, коли необхідно знайти і опитати важкодоступні групи респондентів (наприклад, респондентів, які мають високий дохід, респондентів, які належать до однієї професійної групи, респондентів, які мають які-небудь схожі хобі / захоплення і т.д.)

.3 Стихійна вибірка. Опитуються найбільш доступні респонденти. Типові приклади стихійних вибірок - опитування в газетах / журналах, анкети, віддані респондентам на самозаповнення, більшість інтернет-опитувань. Розмір і склад стихійних вибірок заздалегідь не відомий, і визначається лише одним параметром - активністю респондентів.

.4 Вибірка типових випадків. Відбираються одиниці генеральної сукупності, що володіють середнім (типовим) значенням ознаки. При цьому виникає проблема вибору ознаки і визначення його типового значення.

При ручній обробці інформації може використовуватися будь-який із методів.

Розрахунок статистичної помилки

Помилка вибірки (довірчий інтервал). Інтервал, обчислений за вибірковими даними, який із заданою вірогідністю (довірчої) накриває невідоме істинне значення оцінюваного параметра розподілу. Автоматично підраховуються кожного разу, коли виводяться результати аналізу. Для її підрахунки необхідні такі дані:

·Довірча ймовірність. Ймовірність того, що довірчий інтервал накриє невідоме істинне значення параметра, що оцінюється за вибірковими даними. У практиці досліджень використовується 95%-у довірча ймовірність

·Розмір генеральної сукупності. Позначатимемо його як А.

·Розмір вибірки. Позначатимемо його як В.

·Частка ознаки (варіативність). Очікувана частка ознаки, для якого розраховується помилка. Позначатимемо її як С.



3.3 Модель поведінки у соціальних медіа


Окремої уваги заслуговує аналіз інформації щодо моделі поведінки користувачів в соціальних медіа, типологія такого дослідження заснована на особливостях користування соціальних медіа. Дослідження може буди корисним задля багатьох цілей. Також на основі нього можна судити щодо майбутнього соціальних медіа, тенденцій, моделей подальшого розвитку.


Рис. 3.1 Статистика за моделлю поведінки в соціальних медіа

Кожна з моделей поведінки має на увазі певний перелік дій, що користувач робить найчастіше. Таким чином виділяються сегменти активних та малоактивних користувачів за моделлю поведінки.

Серед малоактивних найменш активними є користувачі з периферійними цілями, активнішими - з метою навчання, найактивнішими - споживачі контенту. Серед активних важко визначити хто є більш активним, хто менш.

Активність аудиторії визначається не кількість користувачів, що належить до кожної з моделей поведінки, а інші фактори, повязані зі створенням, споживанням та розповсюдженням інформації простором соціальних медіа.


Рис. 3.2 Сегментування та пояснення щодо кожної з моделей поведінки


Методика визначення наявності у користувача певної моделі поведінки передбачає, що кожній з моделей характерний певний набір дій.

Для кожної дії підраховується кількість користувачів, що її роблять, та підраховується відносно загальної кількості користувачів. В кожній з моделей переважають певні дії. За тими діями, які переважають у користувача і визначається його модель поведінки в соціальних медіа.



Рис. 3.3 Перелік дій, характерний користувачам з активною моделлю поведінки


Рис. 3.4 Перелік дій, характерний користувачам з активною моделлю поведінки


4. Результати


4.1 Кількість користувачів мережі Інтернет


Загальна кількість Українців, за даними на травень 2012 року складає 45 437 187 чоловік. Кількість користувачів Інтернет ? 43% від населення країни, а користувачів соціальних мереж 87% від кількості користувачів Інтернету.

Якщо розглядати користувачів соціальної мережі «В Контакте» як вибірку, а користувачів Інтернету як генеральну сукупність, то можна сказати, що вибірка є репрезентативною, і цілком відповідає генеральній сукупності.

Саме факт репрезентативності користувачів соціальних медіа и користувачів Інтернету в Україні дає змогу проводити подібного роду аналіз, що проводиться в роботі.


4.2 Результати обробки даних


В результаті роботи додатку, отримана інформація оброблюється, після чого представляється в зручному вигляді. Дані можна обмежувати часовими проміжками. Категорії, за якими оброблюється інформація:

·вік;

·стать;

·рівня освіти;

·місця навчання;

·місця проживання;

·спільнот, в яких він значиться;

·моделі поведінки;

·частоти користування соціальними медіа;

·місця і засоби користування соціальними медіа;

·відповідей на запитання анкети;

·рід занять;

·інтереси;

·споживацькі вподобання;

·цілі користування Інтернетом.

Після цього отримувати статистику за заданими параметрами або динаміку змін.

Потреба в такій інформації може зявитися у певного кола спеціалістів:

·маркетологам (використовуючи дані щодо статі, віку, рівня освіти, місця навчання, місця проживання, спільнот, моделі поведінки, частоти користування соціальними медіа, місця і засобів користування соціальними медіа, відповідей на запитання анкети);

·соціологам (використовуючи дані щодо статі, віку, рівня освіти, місця навчання, місця проживання, моделі поведінки);

·журналістам (використовуючи дані щодо статі, віку, рівня освіти, місця навчання, місця проживання, спільнот, моделі поведінки, відповідей на запитання анкети);

·задля статистики (використовуючи дані щодо статі, віку, рівня освіти, місця навчання, місця проживання, спільнот, моделі поведінки, частоти користування соціальними медіа, місця і засобів користування соціальними медіа);

·розробникам (використовуючи дані щодо моделі поведінки, частоти користування соціальними медіа, місця і засобів користування соціальними медіа, відповідей на запитання анкети)

Додаток видає дані у такому вигляді. (Вибірка - друзі Олександра Короїда)



Рис. 4.1 Статистика за статтю


Рис. 4.2 Статистика за віком


Рис. 4.3 Статистика за місцезнаходженням


Кожна із категорій може давати інформацію як щодо всіх соціальних медіа загалом, так і відносно відомих соціальних медіа.

Дані отримані вручну, згідно з описаним в попередньому розділі алгоритму. Оброблені за допомогою Microsoft Excel і представлені у вигляді графіків, побудованих теж в Excel. (Вибірка - користувачі соціальних медіа по Україні. Вибірка 10 000 респондентів)

Демографічний профіль користувачів соціальних медіа

Статистична похибка 0,98%, 0,61%, 0,61% відповідно. Для статі, віку, роду занять.


СтатьЧоловіки ЖінкиВікменше 1616-2021-2526-3031-3536-4041-4546-50більше 51Рід занятьПідприємціКерівникиСпеціалістиСлужбовціРобочіНавчаютьсяДомогосподаркиПенсіонериБезробітніРис. 4.4 Статистика за віком, статтю, родом занять оброблена вручну


Цілі користування Інтернетом

Перелік речей, які спонукають людей користуватися Інтернетом. З графіка гарно видно, для чого люди найчастіше заходять в світову мережу.

Статистична похибка 0,52%


Пошук музики та відео Користування соціальними мережамиПошук для роботи навчанняІнтернет-розвагиПошук новин культури і шоу-бізнесаПошук подійПошук новин політики та економікиПошук цін на товари та послугиПошук інформації для відпочинкуПошук виробників товарів та послугПошук роботиКупівля товарів через ІнтернетПошук інформації для подорожей та туризмуРис. 4.5 Статистика за цілями користування Інтернетом оброблена вручну.


Найчастіше користуються Інтернетом в таких місцях

Перелік та популярність місці, з яких люди користуються Інтернетом.

Статистична похибка 0,78%


ВдомаНа роботі, навчанніУ публічному місціУ родичів і друзівЧерез мобільний ІнтернетРис. 4.6 Статистика за місцем користування Інтернетом оброблена вручну


Рис. 4.7 Статистика відносно соціальних медіа


Вся актуальна інформація отримана в ході роботи додатку весь час оновлюється і публікується на Інтернет-сторінці #"justify">Висновки


Розроблене програмне забезпечення аналізує сучасний стан соціальних медіа, користувачів соціальних медіа. Програмне забезпечення дозволяє проводити дослідження соціальних медіа неодноразово і давати актуальні результати кожного разу.

Згідно поставлених задач в роботі зроблено наступне:

·Зібрано та структурувано відомості про обєкт аналізу;

·Визначена методика аналізу соціальних медіа, а також інструменти;

·Визначені статистичні методи обробки інформації, що отримається в ході аналізу;

·Визначено алгоритм роботи програми;

·Створено програмне забезпечення, що виконує аналіз сучасного стану соціальних медіа;

·Розроблено лаконічний інтерфейс програмного забезпечення для гарної взаємодії з користувачем;

·Визначено кінцевий вигляд результатів аналізу, те для чого результати можуть бути корисними;

·Організовано збір інформації за допомогою створеного програмного додатку;

·Структурувано отриману інформацію.

Отримані дані є корисними для подальшого аналізу соціальних медіа. Також можливе їх використання певними організаціями в рамках маркетингових досліджень, тому що в соціальних медіа присутня велика кількість людей, що складають не абиякий споживацький ринок. Враховуючи події останніх років, такі як розвиток Інтернету загалом, стрімке збільшення аудиторії соціальних медіа, та, навіть, глобальна економічна криза 2008-2009 років, яка спонукала і досі спонукає більш ефективно розподіляти і витрачати кошти в бізнесі і, як наслідок, переносити частину діяльності в мережу Інтернет.

Соціальні медіа стають не просто майданчиком, на якому відбуваються деякі події, вони дуже тісно повязані з реальним світом, проте, мають абсолютно іншу природу. Вони потребують постійного вивчення, моніторингу та експериментування.

Під час попереднього вивчення теми аналізу було відзначено, що в межах дослідження мережі Інтернет, та її аудиторії, зустрічалися певні опитування користувачів, та дослідження, що певної мірою стосувалися соціальних медіа. Проте аналізу саме соціальних медіа невідомо.

Розвиток досліджень соціальних медіа має широкі перспективи. Дослідження будуть продовженні, як з використання створеного в рамках роботи ПЗ, так і із створенням нового, з додатковою функціональністю, із розміщенням у інших популярних соціальних медіа, зокрема, у соціальних мережах, що додають певних переваг у дослідженні.

За матеріалами дипломної роботи була зроблена доповідь на науково-практичній конференції «Спецпроект: анализ научных исследований», та надруковано тези доповіді[1].



Список використаної літератури


1.Короїд О. «Дослідження інформаційного простору соціальних медіа за допомогою сучасних компютерних технологій» // Матеріали IV Міжнародної науково-практичної конференції «Спецпроект: анализ научных исследований» Том 2. Дніпропетровськ, 30-31 травня 2011 року - 2011 - 104 с.

.Manovich, Lev. The Language of New Media // Cambridge: MIT Press/Leonardo Books - 2001 - 233 р.

.Kaplan, Andreas M.; Michael Haenlein. Users of the world, unite! The challenges and opportunities of Social Media // Business Horizons - 2010 - 505 p.

4.Журнал ТОП 10 Сити-гайд по Киеву [Електронний ресурс]; Украина идет в Facebook // Палий П. 2010. Режим доступу: #"justify">.Майк Далворт. Социальные сети. Руководство по эксплуатации // Добрая книга - 2010 г. - 248 с.

.Клара Ших. Эра Facebook. Как использовать возможности социальных сетей. // Манн, Иванов и Фербер - 2010, 304 с.

.«В Контакте» [Електронний ресурс]; Опис сайту. // Дуров. П., 2012. Режим доступу: #"justify">.WebNote [Електронний ресурс]; Количество украинских пользователей ВКонтакте и Facebook // Стастика за даними TNS Ukraine, 2011. Режим доступу: #"justify">.Колін Мук. ActionScript 3.0 для Flash. Подробное руководство // Питер - 2009 - 992 с.

.BIGMIR-Internet [Електронний ресурс]; Глобальная статистика интернета // Дані компанії Bigmir, 2012 Режим доступу: Режим доступу: #"justify">.Глобальная статистика украинского интернета. BIGMIR-Internet // Новий друк - 2012 - 12 с.

.«В Контакте» [Електронний ресурс]; Розробникам // 2011 Режим доступу: /#"justify">.Р.Л. Агабекян, М.М. Кириченко, С.В. Усатиков Математические методы в социологии. Анализ данных и логика вывода в эмпирическом исследовании. Учебное пособие для вузов Серия: Высшее // Феникс - 2005 - 192 с.

.Справочные материалы Adobe [Електронний ресурс]; Adobe Flash Professional CS5 & CS5.5 // Электронный справичник Adobe, 2011, Режим доступу: #"justify">15.Использование ADOBE FLASH PROFESSIONAL // Adobe. Технічна документація - 2011 - 574 с.

16.Укрстат [Електронний ресурс]; Статистичны дані населення України // Державна служба статистики України, 2012. Режим доступу: #"justify">.КМІС [Електронний ресурс]; Динаміка проникнення Інтернету в Україні // Київський міжнародний інститут соціології - 2012, Режим доступу: #"justify">Додаток А


Лістинг коду програми.

package friends {


import flash.net.*;

import flash.display.*;

import flash.events.*;

import flash.text.*;

import flash.system. LoaderContext;

import fl.controls. Label;

import fl.controls. ComboBox;

import flash.text.*;

import flash.external. ExternalInterface;

import fl.data. DataProvider;

import fl.livepreview. LivePreviewParent;

public class Main extends MovieClip {

private var api_id: Number = 2322684 // id приложения

private var sid: String = '162f079c1df94bbb87c91e8cf77c5e4efa1cc1c863e4aab8424ac4d2e6bde3';private var secret: String;

private var api_url: String = '#"justify">;

private var serverURL: String = «#"justify">; // Путь к серверу

private var id_viewer: Number = 3901759;

private var auth_key: String;


private var photo_url: String;


private var player_name: String;

private var first_name: String;

private var last_name: String;


private var xmlloader:URLLoader = new URLLoader();

private var stat_loader:URLLoader = new URLLoader();

private var listFriendsLoader:URLLoader = new URLLoader();

private var listCityLoader:URLLoader = new URLLoader();

private var listGroupLoader:URLLoader = new URLLoader();


private var appData: Data;

private var changeList: ChangeList;

private var statistica: Statistica;

private var fullTable: FullTable;

private var map: Map;

private var friendsStatistica: FriendsStatistica;

private var loadBar: LoadBar;


public function Main()

{

this.addEventListener (Event.ADDED_TO_STAGE, onAddedToStage);

// Загружаем id_viewer = parseInt (LoaderInfo (root.loaderInfo).parameters.viewer_id);_key = LoaderInfo (root.loaderInfo).parameters.auth_key;

if (int (LoaderInfo (root.loaderInfo).parameters.viewer_id)>0)

// secret для генерации сигнатуры= LoaderInfo (root.loaderInfo).parameters.secret;

// id сессии= LoaderInfo (root.loaderInfo).parameters.sid;

// адрес API-сервиса_url = LoaderInfo (root.loaderInfo).parameters.api_url;_id = LoaderInfo (root.loaderInfo).parameters.api_id;

};


var xmlNames:XML;= new XML (LoaderInfo (root.loaderInfo).parameters.api_result);

if (isNaN (id_viewer))

{_viewer = 1000; // Для тестирования_name = 'Локальный';_name = 'Локальный';

}

else

{_name = xmlNames..first_name.toString() + «»_name = xmlNames..first_name.toString();_name = xmlNames..last_name.toString();

}= new Data (id_viewer, auth_key, secret, sid, String (api_id), api_url, player_name, testMode);= new ChangeList(appData);= new Statistica(appData);= new FullTable(appData);= new FriendsStatistica(appData);.addEventListener (Data.NOT_LOAD, onNotLoad);.addEventListener (Data.BEGIN_LOAD_CHANGES_DATA, onBeginLoad);.addEventListener (Data.END_LOAD_CHANGES_DATA, onEndLoad);.x = 30;.y = 50;.x = 30;.y = 50;.x = 30;.y = 50;.x = 565;.y = 50;


// Определяем был ли раньше такой пользователь, если нужно, то создаем, фиксируем заходы в приложение

var stat_vars:URLVariables = new URLVariables();


var stat_request:URLRequest = new URLRequest (+ «new_friends.php»); // Скрипт при загрузке приложения_request.method = URLRequestMethod.POST;_vars ['id_player'] = id_viewer;_vars ['first_name'] = first_name;_vars ['last_name'] = last_name;_vars['bdate'] = xmlNames..bdate.toString();_vars['city'] = xmlNames..city.toString();_vars['country'] = xmlNames..country.toString();_vars ['auth_key'] = auth_key;_request.data = stat_vars;_loader.load (stat_request);_loader.addEventListener (Event.COMPLETE, onCompleteLoad);_loader.addEventListener (IOErrorEvent.IO_ERROR, onErrorConnectToServer);


private function loadFriends():void

// Загружаем список друзей

{

if (int (LoaderInfo (root.loaderInfo).parameters.viewer_id)>0)

{

// id просматривающего приложение

//id_viewer = LoaderInfo (root.loaderInfo).parameters.viewer_id;

// secret для генерации сигнатуры= LoaderInfo (root.loaderInfo).parameters.secret;

// id сессии= LoaderInfo (root.loaderInfo).parameters.sid;

// адрес API-сервиса_url = LoaderInfo (root.loaderInfo).parameters.api_url;_id = LoaderInfo (root.loaderInfo).parameters.api_id;

};

// параметры для отправки запроса

var request_params: Object = new Object();_params.api_id = api_id;

_params.method = 'friends.get';

_params.fields = 'uid, first_name, last_name, sex, bdate, city, contacts, education'; // , domain_params.format = 'XML';_params.v = '3.0';

//request_params.uids = uid;


var variables:URLVariables = new URLVariables();

// часть параметров берем из request_params

for (var j: String in request_params)

{[j] = request_params[j];

}['sid'] = sid; // параметр sid нужно передавать в запросе, но он не используются при создании сигнатуры['sig'] = generate_signature (request_params); // генерируем сигнатуру. Функция generate_signature описана ниже.

//variables['secret'] = secret;

// подготавливаем запрос

var url_request = new URLRequest (api_url);

// данные будем отправлять POST запросом_request.method = URLRequestMethod.POST;

// добавляем параметры в запрос_request.data = variables;

// отправляем запрос= new URLLoader;.addEventListener (Event.COMPLETE, friendsLoaded);.load (url_request);

}

// После ответа от сервера на первый запрос;

private function onCompleteLoad (event: Event):void

{

trace («Получен первый ответ от сервера. Main.onCompleteLoad»);_loader.removeEventListener (Event.COMPLETE, onCompleteLoad);_loader.removeEventListener (IOErrorEvent.IO_ERROR, onErrorConnectToServer);

var response:XML = new XML (stat_loader.data);

if (Number (response.update) == 1)

{.updateFriendsData = 1;

}

else {appData.updateFriendsData = 0;}

}

// Ошибка

private function onErrorConnectToServer (e:IOErrorEvent):void {

trace ('Ошибка обращения к серверу. Ошибка: ' + e.text + «Main.onCompleteLoad»);_loader.removeEventListener (Event.COMPLETE, onCompleteLoad);_loader.removeEventListener (IOErrorEvent.IO_ERROR, onErrorConnectToServer);.logThis ('Ошибка обращения к серверу, отметка о заходе в пользователя в приложение. Main.onCompleteLoad. Ошибка: ' + e.text);

}

// Получен список друзей нового пользователя

private function friendsLoaded (event: Event):void

{

trace («Получен подробный список друзей из контакта. Main.friendsLoaded»);

// обрабатываем полученный ответ.removeEventListener (Event.COMPLETE, friendsLoaded);

//trace (listFriendsLoader.data);

var responseFriends:XML = new XML (listFriendsLoader.data);

if ((responseFriends.error_code >= 1) && (responseFriends.error_code < 7))

{ // В приложении нет

trace ('Ошибка доступа к друзьям');.logThis ('Ошибка доступа к друзьям. error_code ' + responseFriends.error_code, 2);

if (responseFriends.error_code == 7)

{

trace ('Нет доступа к друзьям');.logThis ('Нет доступа к друзьям. error_code ' + responseFriends.error_code, 2);

if (loadBar!= null && this.contains(loadBar)) {removeChild(loadBar);}= new LoadBar («Контакт не дает доступ к друзьям.»);.y = 50;(loadBar);

}

else

{ // если доступ к списку друзей разрешен в настройках приложения

// создаём массив ID друзей

//appData.xmlFullFriendsData = responseFriends; //stat_loader.data;.setXmlFullFriendsData(responseFriends);

//appData.sendFriends (listFriendsLoader.data);

if (appData.updateFriendsData == 1) {appData.sendFriends (auth_key);}

.enabled = true;.enabled = true;

};



}

public function onAddedToStage (e: Event):void

{

trace ('Приложение видимо. Main.onAddedToStage');

.addEventListener (MouseEvent.CLICK, onBtTabelClick);.addEventListener (MouseEvent.CLICK, onBtChangeClick);.addEventListener (MouseEvent.CLICK, onBtStatisticaClick);.addEventListener (MouseEvent.CLICK, onBtFriendsStatisticaClick);.addEventListener (MouseEvent.CLICK, onBtGraphClick);(KeyboardEvent.KEY_DOWN, onBtMapClick);(statistica);

.addEventListener (MouseEvent.CLICK, onFilterClearBtClick);

.rowCount = 4;.addEventListener (Event.CHANGE, sexCbChange);

.rowCount = 15;.addItem({label: «Будь-який», data:0});

for (var i: Number=10; i<100; i++)

{.addItem({label: «до» + i, data:i});

}.addEventListener (Event.CHANGE, ageUpCbChange);

.rowCount = 15;.addItem({label: «», data:0});

for (var j: Number=10; j<100; j++)

{.addItem({label: «от» + j, data:j});

}.addEventListener (Event.CHANGE, ageDownCbChange);

.rowCount = 10;.addEventListener (Event.CHANGE, cityCbChange);.addEventListener (Event.OPEN, cityCbOpen);

.rowCount = 10;.addEventListener (Event.CHANGE, universityCbChange);.addEventListener (Event.OPEN, universityCbOpen);.rowCount = 8;.addEventListener (Event.CHANGE, groupCbChange);.addEventListener (Event.OPEN, groupCbOpen);


if (testMode== «Test»)

{.enabled = true;.enabled = true;

}.putButton(0);

// }


public function onBtTabelClick (e: MouseEvent):void

{

// Показать список друзей

trace («Показать список друзей. Main.onBtTabelClick»);

if (loadBar!= null && this.contains(loadBar)) {removeChild(loadBar);}

if (! appData.haveCityList)

{();

}


if (this.contains(fullTable))

{


}

else

{(fullTable);

if (this.contains(changeList)) {removeChild(changeList);};

if (this.contains(statistica)) {removeChild(statistica);};

if (this.contains(map)) {removeChild(map);};


}.putButton(5);

}


public function onBtStatisticaClick (e: MouseEvent):void

{

// Показать статистики

trace («Показать статистики. Main.onBtStatisticaClick»);

if (loadBar!= null && this.contains(loadBar)) {removeChild(loadBar);}

if (this.contains(statistica))

{


}

else

{(statistica);

if (this.contains(changeList)) {removeChild(changeList);};

if (this.contains(fullTable)) {removeChild(fullTable);};

if (this.contains(map)) {removeChild(map);};


}.putButton(1);

}


public function onBtFriendsStatisticaClick (e: MouseEvent):void

{

// Показать статистики

trace («Показать статистики. Main.onBtStatistica1Click»);

if (this.contains(friendsStatistica))

{(friendsStatistica);

// Button(btFriendsStatistica).text =

(getChildByName («btFriendsStatistica») as Button).label = 'Статистика друзей';

if (loadBar!= null && this.contains(loadBar)) {removeChild(loadBar);}.showFriends = false;.haveCityList = false;.cityListCount = 0;.setCityList (null, true);.setXmlFullFriendsData (appData.getXmlFullFriendsData (false, true));.refreshData();

}

else

{(friendsStatistica);

(getChildByName («btFriendsStatistica») as Button).label = 'Своя статистика';

if (this.contains(map)) {removeChild(map); addChild(statistica);};

if (this.contains(changeList)) {removeChild(changeList); addChild(statistica);};.nNameList = 0;

/*if (this.contains(changeList)) {removeChild(changeList);};

if (this.contains(fullTable)) {removeChild(fullTable);};

if (this.contains(map)) {removeChild(map);};

if (this.contains(statistica)) {removeChild(statistica);};*/

}.putButton(4);

}


public function onBtChangeClick (e: MouseEvent):void

{

// Показать изменений в списке друзей

if (loadBar!= null && this.contains(loadBar)) {removeChild(loadBar);}.sendFriends (auth_key);

if (this.contains(changeList))

{


}

else

{(changeList);

if (this.contains(statistica)) {removeChild(statistica);};

if (this.contains(fullTable)) {removeChild(fullTable);};

if (this.contains(map)) {removeChild(map);};


}.putButton(2);

}


public function onFilterClearBtClick (e: MouseEvent):void

{

// Обнулить фильтры.selectedIndex = 0;.filter.sex = -1;.removeAll();.addItem({label: «Будь-який», data:0});

for (var i: Number=10; i<100; i++)

{.addItem({label: «до» + i, data:i});

}.filter.ageUp = 0;

.removeAll();.addItem({label: «», data:0});

for (var j: Number=10; j<100; j++)

{.addItem({label: «от» + j, data:j});

}.filter.ageDown = 0;

.selectedIndex = 0;.filter.city = -1;

.selectedIndex = 0;.filter.university = -1;

.selectedIndex = 0;.filter.group = -1;

.refreshData();.putButton(61);

}


function sexCbChange (event: Event):void

{

trace («Установлен фильтр по полу. Main.sexCbChange»);.filter.sex = event.target.selectedItem.data;.refreshData();.putButton(62);

};


function ageDownCbChange (event: Event):void

{

trace («Установлен фильтр по полу. Main.sexCbChange»);

var newData: Number = event.target.selectedItem.data;.filter.ageDown = newData;


// Ограничиваем доступные значения в другом фильтре

var nIndex: Number = ageUpCb.selectedItem.data;


if (newData==0) {newData=10;}.removeAll();.addItem({label: «Будь-який», data:0});

for (var j: Number=newData; j<100; j++)

{.addItem({label: «до» + j, data:j});

}

if (nIndex>0)

{

trace (nIndex - ageDownCb.selectedItem.data);.selectedIndex = nIndex - newData + 1;

}.refreshData();.putButton(63);

};

function ageUpCbChange (event: Event):void

{

trace («Установлен фильтр по полу. Main.sexCbChange»);

var newData: Number = event.target.selectedItem.data;.filter.ageUp = newData;


// Ограничиваем доступные значения в другом фильтре

var nIndex: Number = ageDownCb.selectedItem.data;

if (newData==0) {newData=98;}.removeAll();.addItem({label: «Будь-який», data:0});

for (var j: Number=10; j<newData+1; j++)

{.addItem({label: «от» + j, data:j});

}

if (nIndex>0)

{

trace (nIndex - 10);.selectedIndex = nIndex - 9;

}

.refreshData();.putButton(64);

};


function universityCbChange (event: Event):void

{

trace («Установлен фильтр по вузу. Main.universityCbChange»);.filter.university = event.target.selectedItem.data;.refreshData();.putButton(65);

};


function universityCbOpen (event: Event):void

{

trace («Раскрыт список университетов. Main.universityCbOpen»);

trace (appData.universityList);

if (! appData.haveUniversityList && appData.universityList!= null)

{

trace («заполняем»);

for (var j:int=0; j<appData.universityList.length; j++)

{.addItem({label: appData.universityList[j].name, data:appData.universityList[j].id});

}.haveUniversityList = true;

}.putButton(66);

};


function cityCbChange (event: Event):void

{

trace («Установлен фильтр по городу. Main.cityCbChange»);.filter.city = event.target.selectedItem.data;.refreshData();.putButton(67);

};


function cityCbOpen (event: Event):void

{

trace («Раскрыт список городов. Main.cityCbOpen»);

if (! appData.haveCityList)

{();

}.putButton(68);

};


public function LoadCityNames():void

{ // Первоначальная загрузка списка городов

try

{

if (appData.haveCityList || appData.cityListCount>3) {return;}


var tempArray: Array = appData.cityList;


//var xml:XML = appData.getXmlFullFriendsData(false);


var s: String = «»;

if (appData.cityListCount==0) // Первый вызов

{.removeAll();.addItem({label: «будь-яке місто», data: - 1});

}

for (var i: Number=0; i<tempArray.length; i++)

{

if (appData.cityListCount==0)

{cityCb.addItem({label:tempArray[i].name, data:tempArray[i].id});}

if (i==0) {s = String (tempArray[i].id);}

else {s = s + ', '+ String (tempArray[i].id);}

};


if (s.length == 0)

{ // Если нет списка для запроса на сервер.logThis («Список id городов для загрузки пуст»

+ String (appData.getXmlFullFriendsData())

+ «AllData:» + appData. StringData(), 1);

return;

}


// Параметры для отправки запроса

var request_params: Object = new Object();_params.api_id = api_id;_params.method = 'places.getCityById';_params.cids = s;_params.format = 'XML';_params.v = '3.0';


var variables:URLVariables = new URLVariables();

// часть параметров берем из request_params

for (var j: String in request_params)

{[j] = request_params[j];

}['sid'] = sid; // параметр sid нужно передавать в запросе, но он не используются при создании сигнатуры['sig'] = generate_signature (request_params); // генерируем сигнатуру. Функция generate_signature описана ниже.


// подготавливаем запрос

var url_request = new URLRequest (api_url);

// данные будем отправлять POST запросом_request.method = URLRequestMethod.POST;

// добавляем параметры в запрос_request.data = variables;

// отправляем запрос

= new URLLoader;.addEventListener (Event.COMPLETE, cityNamesLoaded);.load (url_request);.cityListCount = appData.cityListCount + 1;

if (fullLog) {appData.logThis («Запрос списка городов. Main. LoadCityNames.», 1)};

}

catch (e: Error)

{.logThis («Ошибка в Main. LoadCityNames» + e.message, 2);

}

}


// Получен список друзей нового пользователя

private function cityNamesLoaded (event: Event):void

{

trace («Получен список городов из контакта. Main.cityNamesLoaded»);


try

{.removeEventListener (Event.COMPLETE, cityNamesLoaded);


var response:XML = new XML (listCityLoader.data);

if ((response.error_code >= 1) && (response.error_code < 200))

{ // В приложении нет

trace ('Нет доступа к городам');.logThis ('Нет доступа к городам. Main.cityNamesLoaded. Код ошибки: ' + response.error_code + '.'

+ ' Текст из контакта: ' + String (listCityLoader.data), 2);

}

else

{ // если получен список городов

if (String(response)==»»)

{.logThis («Получен пустой список. Main.cityNamesLoaded. Полученные данные» + listCityLoader.data

+ «haveFullFriendsData=» + String (appData.haveFullFriendsData), 2);= true;

return;

}

else

{.setCityList(response);.haveCityList = true;

}

// Заполняем выпадающий список.removeAll();.addItem({label: «будь-яке місто», data: - 1});

//cityCb.addItem({label: «не указали город», data:0});

for (var j: Number=0; j<appData.cityList.length; j++)

{.addItem({label:appData.cityList[j].name, data:appData.cityList[j].id});

}

// Отмечаем данные.refreshData();

if (fullLog) {appData.logThis («Cписок городов загружен. Main.cityNamesLoaded.», 1)};

}

}

catch (e: Error)

{.logThis («Ошибка при обработке списока городов из контакта. Main.cityNamesLoaded» + e.message

+ «Данные:» + String (listCityLoader.data), 2);

}

}


function groupCbChange (event: Event):void

{

trace («Установлен фильтр по группам. Main.groupCbChange»);

//appData.logThis ('Выбран город. номер ' + event.target.selectedItem.data);.filter.group = event.target.selectedItem.data;.refreshData();.putButton(69);

};


function groupCbOpen (event: Event):void

{

trace («Раскрыт список групп. Main.groupCbOpen»);

if (! appData.haveGroupList)

{();

}

};


public function loadGroupNames():void

{

trace («Первоначальная загрузка списка групп. Main.loadGroupNames»);


var dp: DataProvider = new DataProvider();

var tempArray: Array = new Array();


var xml:XML = appData.getXmlFullFriendsData(false);


//trace(xml);

// Формируем список id городов

for (var i: Number=0; i<xml.user.length(); i++)

{

if (! (String (xml.user[i].lists)==»»))

{

for each (var group1:XML in xml.user[i].lists.list.item)

{.push (String(group1));

/*if (dp.length>xml.user.lists.list.length() - 2)

{

dp.merge (new Array (String(group1)));

}

else

{

dp.addItem({label: String(group1)});

}*/

}

};


}.sort (Array.NUMERIC);= 0;

while (i<tempArray.length-1)

{

if (tempArray[i]==tempArray [i+1])

{tempArray.splice (i+1, 1);}

else {i++};

}


var s: String = «»;.removeAll();.addItem({label: «будь-який список друзів», data: - 1});

for (i=0; i<tempArray.length; i++)

{.addItem({label: String (tempArray[i]), data: String (tempArray[i])});

if (i==0) {s = String (tempArray[i]);}

else {s = s + ', '+ String (tempArray[i]);}

};.haveGroupList = true;

}


// Получен список друзей нового пользователя

private function groupNamesLoaded (event: Event):void

{.removeEventListener (Event.COMPLETE, groupNamesLoaded);

//trace (listFriendsLoader.data);

var response:XML = new XML (listGroupLoader.data);



if ((response.error_code >= 1) && (response.error_code < 200))

{ // В приложении нет


trace ('Нет доступа к городам');.logThis ('Нет доступа к группам. error_code ' + response.error_code);

}

else

{ // если получен список городов

// Заполняем выпадающий список.removeAll();.addItem({label: «будь-який список друзів», data:0});

for (var j: Number=0; j<response.*.length(); j++)

{.addItem({label:response.list[j].name, data:response.list[j].lid});

}

// Отмечаем данные.haveGroupList = true;


};

}

// функция генерации сигнатуры

private function generate_signature (request_params):String

{

var signature = «;

// сортируем параметры в алфавитном порядке

var sorted_array: Array = new Array();

for (var key in request_params)

{_array.push (key + «=» + request_params[key]);

}_array.sort();


// создаем строку параметров;

for (key in sorted_array)

{+= sorted_array[key];

}= id_viewer + signature + secret;

return MD5.encrypt(signature);

}

}

}


public class Statistica extends MovieClip {


private var appData: Data;

private var statisticTitle: TextField;

private var btSex: Button;

private var btCity: Button;

private var btName: Button;

private var sexTitle: TextField;

private var sexText: TextField;

private var ageTitle: TextField;

private var ageText: TextField;

private var sexBar: Bar;

private var tTitle: TextField;

private var cityText: TextField;

private var cityBar: Bar;

private var facultyTitle: TextField;

private var facultyText: TextField;

private var facultyBar: Bar;

private var universityTitle: TextField;

private var tText: TextField;

private var universityBar: Bar;

private var viewBar:int=1;


private var colorList: Array = new Array (0x0000FF, 0xFF0000,0x00FF00,0xFF00FF, 0x00FFFF, 0xFFFF00,0xAA00AA, 0x00AAAA, 0xFFFF99,0xAAAAAA, 0xFFFF99,0x0000FF, 0xFF0000,0x00FF00,0xFF00FF, 0x00FFFF, 0xFFFF00,0xAA00AA, 0x00AAAA, 0xFFFF99,0xAAAAAA, 0xFFFF99,0x0000FF, 0xFF0000,0x00FF00,0xFF00FF, 0x00FFFF, 0xFFFF00,0xAA00AA, 0x00AAAA, 0xFFFF99,0xAAAAAA, 0xFFFF99,0x0000FF, 0xFF0000,0x00FF00,0xFF00FF, 0x00FFFF, 0xFFFF00,0xAA00AA, 0x00AAAA, 0xFFFF99,0xAAAAAA, 0xFFFF99);


public function Statistica (linkToAppData: Data) {

trace ('Создание блока статистики. Statistica()');= linkToAppData;

.addEventListener (Data.NEW_FULL_DATA, onRefreshData);= new Button();.x = -10;.y = 0;.width = 130;.label= «Стать і вік»;(btSex);

= new Button();.x = 130;.y = 0;.width = 130;.label= «Місто та ВНЗ»;(btCity);


.addEventListener (MouseEvent.CLICK, onBtSexClick);.addEventListener (MouseEvent.CLICK, onBtCityClick);.addEventListener (MouseEvent.CLICK, onBtNameClick);

}


// Получен или обновлен текущий список друзей

public function onRefreshData (event: Event):void

{

trace ('Расчет статистических графиков. Statistica.onRefreshData');


var xmlFull:XML;= appData.getXmlFullFriendsData();


var nAll: Number = xmlFull.user.length();

// Очистка блока

while (this.numChildren>3)

{(this.numChildren-1);

};

= new TextField();.x = 20;statisticTitle.y = 35;.width = 400;.height = 23;(statisticTitle);


if (viewBar==1)

{(xmlFull, 0,40);(xmlFull, 200,40);

}

else if (viewBar==2)

{

var f1Date: Date = new Date();

(xmlFull, 0,40);(xmlFull, 200,40);


var f2Date: Date = new Date();.logThis («Города» + String (f2Date.time - f1Date.time), 1,'Statistica');


}

else if (viewBar==3)

{

var f1Date: Date = new Date();

(xmlFull, 0,40);


var f2Date: Date = new Date();.logThis («Имена» + String (f2Date.time - f1Date.time), 1,'Statistica');

}


}


public function setViewBlock (n:int):void

{

if (n!=viewBar)

{=n;(null);

}

}


private function drawSexBlock (xmlFull:XML, x0:int, y0:int):void

{ // Распределение по полу

try

{

var nAll: Number = xmlFull.user.length();



var dataList: Array = new Array();

var nGroup: Number = 3;

var angleList: Array = new Array(nGroup);= new TextField();.x = x0 + 0;sexTitle.y = y0 + 30;.width = 200;.htmlText = '<P ALIGN= «CENTER»> <FONT SIZE= «+2» >За статтю</FONT></P>\n';(sexTitle);


if (nAll == 0)

{ // Нет выбранных данных

// Рисуем диаграмму= new Bar (angleList, colorList, true);.x = 100 + x0;.y = 140 + y0;(sexBar);

return;

}


// Заполняем значениями.push({id: 0, name: «Чоловіків: \t\t», n:0});.push({id: 1, name: «Жінок:\t\t», n:0});.push({id: 2, name: «Не вказано:\t», n:0});


for (var j=0; j<nAll; j++)

{

if (xmlFull.user[j].sex==2) {dataList[0].n = dataList[0].n+1;}

else if (xmlFull.user[j].sex==1) {dataList[1].n = dataList[1].n+1;}

else {dataList[2].n = dataList[2].n+1;}

};


// Выводим таблицу

var s: String;

var tBlock: Sprite;

for (var k:int = 0; k < nGroup; k++)

{= new Sprite();.x = x0+20; tBlock.y = y0 + 240 + 14*k;


.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);

= new TextField();.x = 20;tText.y = -5;.width = 170;.addChild(tText);

= dataList[k].name;

/*if (s.length<6) {s = s + '\t\t\t';}

else if (s.length<10) {s = s + '\t\t';}

else if (s.length<17) {s = s + '\t';}

else {s = s.substr (0,16) +»…\t»;}*/.appendText (s+ Math.round (100*Number (dataList[k].n)/nAll) + «% (» + dataList[k].n +»)\n»);


if (nAll>0) {

if (k==0) {angleList[k] = 360*Number (dataList[k].n)/nAll;}

else {angleList[k] = angleList [k-1] + 360*Number (dataList[k].n)/nAll;};

}

else if (k<nGroup) {angleList[k]=0;}

else {angleList[k]=360};

};


= new Bar (angleList, colorList);.x = 100 + x0;.y = 140 + y0;(sexBar);

}

catch (e: Error)

{.logThis («Ошибка при выводе статистики по полу в Statistica.drawSexBlock.» + e.message

+ «Данные:» + String(xmlFull), 2);

}


}


private function drawAgeBlock (xmlFull:XML, x0:int, y0:int):void

{ // Статистика по возрасту

var nAll: Number = xmlFull.user.length();

var nGroup: Number = 10;

var angleList: Array = new Array(nGroup);

var dataList: Array = new Array();

= new TextField();.x = x0 + 0;ageTitle.y = y0 + 30;.width = 200;.htmlText = '<P ALIGN= «CENTER»> <FONT SIZE= «+2» >За віком</FONT></P>\n';(ageTitle);



if (nAll == 0)

{ // Нет выбранных данных

// Рисуем диаграмму= new Bar (angleList, colorList, true);.x = 100 + x0;.y = 140 + y0;(sexBar);

return;

}


var i:int;

var m:int;.push({id: 0, name: «Не вказано\t\t», n:0});.push({id: 1, name: «<16 \t\t», n:0});.push({id: 2, name: «16-20\t\t», n:0});.push({id: 3, name: «21-25\t\t», n:0});.push({id: 4, name: «26-30\t\t», n:0});.push({id: 5, name: «31-35\t\t», n:0});.push({id: 6, name: «36-45\t\t», n:0});.push({id: 7, name: «41-45\t\t», n:0});.push({id: 8, name: «46-50\t\t», n:0});.push({id: 9, name: «>51 \t\t», n:0});


var nYear:int;


for (i=0; i<nAll; i++)

{


if (String (xmlFull.user[i].bdate)==»») {dataList[0].n=int (dataList[0].n)+1;}

else if (String (xmlFull.user[i].bdate).length<8) {dataList[0].n=int (dataList[0].n)+1;}

else

{

var er: Array = String (xmlFull.user[i].bdate).split(».»);

var dDate: Date = new Date();.setTime((new Date()).getTime() - (new Date (int (er[2]), int (er[1]), int (er[0]), 0,0,0,0)).getTime());= dDate.fullYear - 1970;

trace («nYear «+ nYear);

if (nYear<=15) {dataList[1].n=int (dataList[1].n)+1;}

else if (nYear<=20) {dataList[2].n=int (dataList[2].n)+1;}

else if (nYear<=25) {dataList[3].n=int (dataList[3].n)+1;}

else if (nYear<=30) {dataList[4].n=int (dataList[4].n)+1;}

else if (nYear<=35) {dataList[5].n=int (dataList[5].n)+1;}

else if (nYear<=40) {dataList[6].n=int (dataList[6].n)+1;}

else if (nYear<=45) {dataList[7].n=int (dataList[7].n)+1;}

else if (nYear<=50) {dataList[8].n=int (dataList[8].n)+1;}

else {dataList[9].n=int (dataList[9].n)+1;};


};

//ageText.appendText («-» + String (xmlFull.user[i].bdate) + «-» + «\n»);

};

// Сортируем по числу

//dataList.sortOn («n», Array.NUMERIC | Array.DESCENDING);

//for (var j=0; j<dataList.length; j++) {trace («2: «+ dataList[j].name +»: «+ dataList[j].n);}


var s: String;

var tBlock: Sprite;

for (var k:int = 0; k < nGroup; k++)

{= new Sprite();.x = x0+20; tBlock.y = y0 + 240 + 14*k;.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);= new TextField();.x = 20;tText.y = -5;.width = 170;.addChild(tText);= dataList[k].name;

/*if (s.length<6) {s = s + '\t\t\t';}

else if (s.length<10) {s = s + '\t\t';}

else if (s.length<17) {s = s + '\t';}

else {s = s.substr (0,16) +»…\t»;}*/.appendText (s+ Math.round (100*Number (dataList[k].n)/nAll) + «% (» + dataList[k].n +»)\n»);


if (nAll>0) {

if (k==0) {angleList[k] = 360*Number (dataList[k].n)/nAll;}

else {angleList[k] = angleList [k-1] + 360*Number (dataList[k].n)/nAll;};

}

else if (k<nGroup) {angleList[k]=0;}

else {angleList[k]=360};

};


// Рисуем диаграмму= new Bar (angleList, colorList);.x = 100 + x0;.y = 140 + y0;(sexBar);

}


private function drawCityBlock (xmlFull:XML, x0:int, y0:int):void

{

trace («Выводим статистику по городу. Statistica.drawCityBlock»);


if (! appData.haveCityList) {Main(parent).LoadCityNames();}


var dataList: Array = appData.cityList;

for (var j=0; j<dataList.length; j++) {dataList[j].n=0;}

var ss: String = «;

for (j=0; j<dataList.length; j++) {ss = ss + ' ' + j +»: «+ dataList[j].name;}

//appData.logThis (ss, 1);


var nAll: Number = xmlFull.user.length();

//var nCity: Number = xmlCityData.city.length();

= new TextField();.x = x0 + 0;tTitle.y = y0 + 30;.width = 200;.htmlText = '<P ALIGN= «CENTER»> <FONT SIZE= «+2» >За містами</FONT></P>\n';(tTitle);


if (nAll == 0)

{ // Нет выбранных данных

// Рисуем диаграмму= new Bar (null, colorList, true);.x = 100 + x0;.y = 140 + y0;(cityBar);

return;

}

var nGroup: Number = dataList.length;


var angleList: Array = new Array(nGroup);

var i:int;



var m:int;

for (i=0; i<nAll; i++)

{

if (String (xmlFull.user[i].city)==»») {m = 0;}

else {m = xmlFull.user[i].city;}


for (j=0; j<dataList.length; j++)

{

if (dataList[j].id==m) {dataList[j].n ++;};

}

};


// Формируем сжатый массив

if (nGroup>10)

{[9].name = «Інші»;

for (i=10; i<nGroup; i++)

{[9].n = dataList[9].n + dataList[i].n;

}=10;

}

for (j=0; j<dataList.length; j++) {trace («3: «+ dataList[j].name);}

// Выводим таблицу


var s: String;

var tBlock: Sprite;

for (var k:int = 0; k < nGroup; k++)

{= new Sprite();.x = x0+20; tBlock.y = y0 + 240 + 14*k;

.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);

= new TextField();.x = 20;tText.y = -5;.width = 170;.addChild(tText);

= dataList[k].name;

if (s.length>18) {s = s.substr (0,18) +»…»;}.appendText(s);

//trace («Номер «+k+» Ширина» + tText.textWidth);= «;

if (tText.textWidth<28) {s = '\t\t\t\t\t';}

else if (tText.textWidth<48) {s = '\t\t\t\t';}

else if (tText.textWidth<61) {s = '\t\t\t';}

else if (tText.textWidth<85) {s = '\t\t';}

else if (tText.textWidth<99) {s = '\t';}.appendText (s + Math.round (100*Number (dataList[k].n)/nAll) + «% (» + dataList[k].n +»)\n»);


if (nAll>0) {

if (k==0) {angleList[k] = 360*Number (dataList[k].n)/nAll;}

else {angleList[k] = angleList [k-1] + 360*Number (dataList[k].n)/nAll;};

}

else if (k<nGroup) {angleList[k]=0;}

else {angleList[k]=360};

};



// Рисуем диаграмму= new Bar (angleList, colorList);.x = 100 + x0;.y = 140 + y0;(cityBar);

}


private function drawFacultyBlock (xmlFull:XML, x0:int, y0:int):void

{

trace («Выводим статистику по факультетам. Statistica.drawFacultyBlock»);


var facultyList: Array = appData.facultyList;


for (var j=0; j<facultyList.length; j++) {facultyList[j].n=0;}


var nAll: Number = xmlFull.user.length();

var nFaculty: Number = facultyList.length;


var angleList: Array = new Array(nFaculty);

var i:int;


// Заполняем значениями

var m:int;

for (i=0; i<nAll; i++)

{


if (String (xmlFull.user[i].faculty)==»») {m = 0;}

else {m = xmlFull.user[i].faculty;}


for (j=0; j<facultyList.length; j++)

{

if (facultyList[j].faculty==m) {facultyList[j].n ++;};

}


};

// Сортируем по числу.sortOn («n», Array.NUMERIC | Array.DESCENDING);

for (j=0; j<facultyList.length; j++) {trace («2: «+ facultyList[j].faculty_name);}

// Формируем сжатый массив

if (nFaculty>10)

{[9].faculty_name = «Інші»;

for (i=10; i<nFaculty; i++)

{[9].n = facultyList[9].n + facultyList[i].n;

}=10;

}

for (j=0; j<facultyList.length; j++) {trace («3: «+ facultyList[j].faculty_name);}

// Выводим таблицу= new TextField();.x = x0 + 40;facultyTitle.y = y0 + 30;.width = 150;.htmlText = '<FONT SIZE= «+2» >За ВНЗ</FONT>\n';

//cityTitle.appendText(xmlCityData);(facultyTitle);

var tBlock: Sprite;

for (var k:int = 0; k < nFaculty; k++)

{= new TextField();.x = x0+5;facultyText.y = y0 + 234 + 14*k;.width = 170;(facultyText);.appendText (facultyList[k].faculty_name +'\t'+ Math.round (100*Number (facultyList[k].n)/nAll) + «% (» + facultyList[k].n +»)\n»);

= new Sprite();.x = tText.x - 10; tBlock.y = tText.y+5;.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);


if (nAll>0) {

if (k==0) {angleList[k] = 360*Number (facultyList[k].n)/nAll;}

else {angleList[k] = angleList [k-1] + 360*Number (facultyList[k].n)/nAll;};

}

else if (k<nFaculty) {angleList[k]=0;}

else {angleList[k]=360};

};


// Рисуем диаграмму= new Bar (angleList, colorList);.x = 80 + x0;.y = 140 + y0;(facultyBar);

}


private function drawUniversityBlock (xmlFull:XML, x0:int, y0:int):void

{

trace («Выводим статистику по вузам. Statistica.drawUniversityBlock»);

var dataList: Array = appData.universityList;


for (var j=0; j<dataList.length; j++) {dataList[j].n=0;}

= new TextField();.x = x0 + 0;universityTitle.y = y0 + 30;.width = 200;.htmlText = '<P ALIGN= «CENTER»> <FONT SIZE= «+2» >За ВНЗ</FONT></P>\n';(universityTitle);


var nAll: Number = xmlFull.user.length();

if (nAll == 0)

{ // Нет выбранных данных

// Рисуем диаграмму= new Bar (angleList, colorList, true);.x = 100 + x0;.y = 140 + y0;(universityBar);

return;

}


var nGroup: Number = dataList.length;


var angleList: Array = new Array(nGroup);

var i:int;


// Заполняем значениями

var m:int;

for (i=0; i<nAll; i++)

{

if (String (xmlFull.user[i].university)==»») {m = 0;}

else {m = xmlFull.user[i].university;}


for (j=0; j<dataList.length; j++)

{

if (dataList[j].id==m) {dataList[j].n ++;};

}

};

// Сортируем по числу.sortOn («n», Array.NUMERIC | Array.DESCENDING);

for (j=0; j<dataList.length; j++) {trace («2: «+ dataList[j].name);}

// Формируем сжатый массив

if (nGroup>10)

{[9].name = «Остальные»;

for (i=10; i<nGroup; i++)

{[9].n = dataList[9].n + dataList[i].n;

}=10;

}

for (j=0; j<dataList.length; j++) {trace («3: «+ dataList[j].name);}

// Выводим таблицу


var s: String;

var tBlock: Sprite;

for (var k:int = 0; k < nGroup; k++)

{= new Sprite();.x = x0+20; tBlock.y = y0 + 240 + 14*k;.graphics.beginFill (colorList[k], 1);.graphics.drawRect (0,0,9,9);.graphics.endFill();(tBlock);

= new TextField();.x = 20;tText.y = -5;.width = 170;.addChild(tText);

= dataList[k].name;

if (s.length>18) {s = s.substr (0,18) +»…»;}.appendText(s);

//trace («Номер «+k+» Ширина» + tText.textWidth);= «;

if (tText.textWidth<28) {s = '\t\t\t\t\t';}

else if (tText.textWidth<48) {s = '\t\t\t\t';}

else if (tText.textWidth<61) {s = '\t\t\t';}

else if (tText.textWidth<85) {s = '\t\t';}

else if (tText.textWidth<99) {s = '\t';}.appendText (s+ Math.round (100*Number (dataList[k].n)/nAll) + «% (» + dataList[k].n +»)\n»);


if (nAll>0) {

if (k==0) {angleList[k] = 360*Number (dataList[k].n)/nAll;}

else {angleList[k] = angleList [k-1] + 360*Number (dataList[k].n)/nAll;};

}

else if (k<nGroup) {angleList[k]=0;}

else {angleList[k]=360};

};

// Рисуем диаграмму= new Bar (angleList, colorList);.x = 100 + x0;.y = 140 + y0;(universityBar);

}


public function onBtSexClick (e: MouseEvent):void

{

// Показать статистики блок статистики

trace («Показать статистики. Statistica.onBtCityClick»);(1);.putButton(11);

}


public function onBtCityClick (e: MouseEvent):void

{

// Показать статистики блок статистики

trace («Показать статистики. Statistica.onBtCityClick»);(2);.putButton(12);

}= 0;


// подсчет погрешности

public function ci(obj) {

(obj.ssbox.value == «») {=0

}{= eval (obj.ssbox.value)

}

(obj.popbox.value == «») {=0

}{= eval (obj.popbox.value)

}


if (obj.popbox.value == «») {=0}{= eval (obj.popbox.value)}

(obj.perbox.value == «») {=0}{= eval (obj.perbox.value)}

(ss == 0 || perc < 1 || perc >99) {(«You must enter a Sample Size and a Percentage between 1 and 99»)

}{(pop == 0) {= 1}{= (pop - ss) / (pop - 1)}= Math.sqrt (zValC * (perc / 100) * (1 - perc / 100) / ss * pf) * 100

// round and display=parseInt(conInt);=Math.round((conInt-pf)*100);.cibox.value=pf+conInt/100

//obj.cibox.value=pf

}

}

public function onBtNameClick (e: MouseEvent):void

{

// Показать статистики блок статистики

trace («Показать статистики. Statistica.onBtNameClick»);(3);.putButton(13);

}

}


}

public class Bar extends MovieClip {


private var radius: Number = 70;

private var colorList: Array;


public function Bar (m: Array, cList: Array, empty: Boolean=false) {

trace («Cоздаем диаграмму Bar. Bar()»);

= cList;

this.graphics.lineStyle();



if (empty)

{

trace («Рисуем пустую диаграмму»);

this.graphics.beginFill (colorList[9], 1);

this.graphics.drawCircle (0,0, radius);

return;

}

//this.graphics.lineTo (radius, 0);

//var startAngle: Number=0;

//var endAngle: Number=10;

//var m: Array=new Array (20,150,210, 355,360);

var tAngle: Number;

// Заливаем сектора

for (var k: Number=0; k<m.length; k++) {


if (k==0) {tAngle = 0;} else {tAngle = m [k-1];};

this.graphics.beginFill (colorList [k% colorList.length], 1);(tAngle, m[k]);

this.graphics.endFill();

}

// Отрисовываем контуры

var lab: TextField;

var x, y: Number;

for (var i: Number=0; i<m.length; i++) {


if (i==0) {tAngle =0;} else {tAngle=m [i-1];};

if (((m[i] - tAngle)/3.6)<1.5) {

this.graphics.lineStyle();

}

if (((m[i] - tAngle)/3.6)<3) {

this.graphics.lineStyle (1,0xFFFFFF);

}

else if (((m[i] - tAngle)/3.6)<7) {

this.graphics.lineStyle (2,0xFFFFFF);

}

else if ((m[i] - tAngle)==360) {this.graphics.lineStyle();}

else {this.graphics.lineStyle (3,0xFFFFFF);};

(tAngle, m[i]);= new TextField();= (radius+15)*Math.sin((- (tAngle+m[i])/2+180)*Math.PI/180) - 10;= (radius+10)*Math.cos((- (tAngle+m[i])/2+180)*Math.PI/180) - 7;

//if ((((tAngle+m[i])/2)>45) && (((tAngle+m[i])/2)<135)) {;};

//if (((tAngle+m[i])/2)>225 && ((tAngle+m[i])/2)<315) {x = x - 20;};.x = x;.y = y;

if (((m[i] - tAngle)/3.6)>=2.5) {.appendText (String (Math.round((m[i] - tAngle)/3.6)) + «%»);

};

(lab);

}


//this.graphics.lineStyle (1,0x00FFFF);

}

private function drawSector (startAngle: Number, endAngle: Number) {

var xc, yc: Number;

this.graphics.lineTo (radius*Math.sin((-startAngle+180)*Math.PI/180), radius*Math.cos((-startAngle+180)*Math.PI/180));

for (var i: Number = startAngle; i<=endAngle; i++) {= radius*Math.sin((-i+180)*Math.PI/180);= radius*Math.cos((-i+180)*Math.PI/180);

this.graphics.lineTo (xc, yc);

}

this.graphics.lineTo (0,0);

}

}

public class FriendsFilter {


public var sex: Number = -1;

public var ageDown: Number = 0;

public var ageUp: Number = 0;

public var city: Number = -1;

public var university: Number = -1;

public var group: Number = -1;


public function FriendsFilter() {

trace («Создаем фильтр FriendsFilter()»);


}


public function toString():String

{

trace («Пишем строку. FriendsFilter.getString()»);

var s: String = «»;= s + «sex» + sex;= s + «ageDown» + ageDown;= s + «ageUp» + ageUp;= s + «city» + city;= s + «university» + university;= s + «group» + group;

return s;

}

}

}


class Data extends EventDispatcher

{


public var serverURL: String = «#"justify">; // Путь к серверу



private var xmlFriendsLoader:URLLoader = new URLLoader();

private var xmlMapLoader:URLLoader = new URLLoader();

private var xmlNamesLoader:URLLoader = new URLLoader();

private var xmlloader:URLLoader = new URLLoader()

private var xmlObjectLoader:URLLoader = new URLLoader();

private var xmlOffersLoader:URLLoader = new URLLoader();

public var viewer_id: Number;

private var auth_key: String;

private var secret: String;

private var sid: String;

private var api_id: String;

private var api_url: String;

public var player_name: String;

public var xmlFriendsData:XML; // Полученные данные об изменениях в друзьях

private var curr_id: Number = 0; // Текущий пользователь для сканирования, если 0 то сканирование не производиться

private var curr_loadind_friend: Number;(); // Список уникальных имен в данных

public var nNameList: Number = 0; // Счетчик попыток загрузки сопоставлений имен

public var xmlMapData:XML = <root/>;

private var myTimer: Timer;

private var xmlObjectsData:XML;

private var xmlObjectsPlaceData:XML;

private var xmlOffers:XML;

// Для сканирования друзей

public var showFriends: Boolean = false; // Режим показа статистики друзей

private var scanFriendsLoader:URLLoader;

private var sendScanLoader:URLLoader = new URLLoader(); // Для сканирования друзей

private var logLoader:URLLoader = new URLLoader(); // Для отсылки ошибок на сервер

private var logRrequest:URLRequest = new URLRequest (serverURL + «log_friends_error.php»);

private var listFriendsForScan:XML; // Список id для сканирования по списку

private var xmlFullFriendFriendsData:XML = <root/>; // Данные по друзьям друга

private var xmlShortFriendFriendsData:XML;

public var currPlayerName: String;

public var testMode: Number=0; // Тестовый или нет режим работы

public static const NOT_LOAD: String = «notLoad»;

public static const NEW_FULL_DATA: String = «newFullData»;

public static const NEW_DATA: String = «newData»;

public static const COSTRUCTION_DATA: String = «construstData»;

public static const ON_LOAD_OBJECTS: String = «onLoadObjects»;

public static const COSTRUCTION_COMPLITE: String = «construstionComplite»;

// Создаем объект

public function Data (id: Number, t_auth_key: String, t_secret: String, t_sid: String, t_api_id: String, t_api_url: String, t_player_name: String, t_testMode: String)

{

trace ('Создание панели данных о польз. Data ('+ String(id) +')');_id = id;_key = t_auth_key;= t_secret;= t_sid;_id = t_api_id;_url = t_api_url;_name = t_player_name;

if (t_testMode== «Test») {testMode = 1}

}

// Сводные данные о пользователе, для логов

public function StringData():String

{

var s: String = «»;

try

{= s + «<i>» + String (viewer_id) +:</i>»;= s + «<n>» + String(haveFullFriendsData)=»</n>»;= s + «<S>» + String(xmlFullFriendsData)+</s>»;


}

catch (e: Error)

{

return «Ошибка при сборе данных. Data. StringData.»;

}

return s;

}

// Загрузка с сервера

public function sendFriends (auth_key: String):void

{

trace ('Загружаем данные. Data.sendFriends().');

if (haveFullFriendsData &&! haveChangeFriendsData)

{

var requestloader:URLRequest = new URLRequest (serverURL + «list_friends.php»);.method = URLRequestMethod.POST;

var stat_vars:URLVariables = new URLVariables();_vars ['id_player'] = viewer_id;_vars['s'] = xmlShortFriendsData;_vars ['auth_key'] = auth_key;_vars['res'] = 1;

if (testMode==1) {stat_vars['type'] = 1;}.data = stat_vars;.load(requestloader);

xmlFriendsLoader.addEventListener (Event.COMPLETE, onCompleteFriends);.addEventListener (IOErrorEvent.IO_ERROR, onErrorConnectToServer);(new Event (Data.BEGIN_LOAD_CHANGES_DATA));

}

}

internal function logThis (s: String, type:int=1, place: String =»»):void

{ // Записываем данные в лог на сервере

trace ('Записываем данные в лог на сервере. Data.logThis(). ');

//trace ('Записываем данные в лог на сервере. Data.logThis(). '+s);

var stat_vars:URLVariables = new URLVariables();.method = URLRequestMethod.POST;_vars ['id_player'] = viewer_id;_vars['place'] = place;_vars['type'] = type;_vars['s'] = s;.data = stat_vars;.load(logRrequest);

}

}


Додаток Б


Запитання анкети

Варіанти відповіді так/ні/іноді на запитання 1-17.

.Чи використовуєте Ви соціальні мережі

.Чи спілкуєтесь Ви в чатах / блогах / форумах?

.Ви слухаєте музику в Інтернеті/Інтернет-радіо?

.Чи граєте Ви в онлайн ігри?

.Чи читаєте ви форуми та блоги?

.Чи заробляєте Ви гроші виробництвом контенту?

.Ви дивитесь фото та відео в Інтернеті?

.Ви шукаєте потрібну Інформацію в Інтернеті

.Ви займаєтесь маркетинговими дослідженнями в Інтернеті?

.Чи читаєте Ви в мережі Інтернет політичні та економічні новини?

.Чи шукаєте Ви в Інтернеті товари?

.Дивитесь ціни на різні товари та послуги в Інтернеті?

.Читаєте в Інтернеті новини культури і шоу-бізнеса?

.Чи шукаєте в Інтернеті інформацію для відпочинку чи туризму?

.Чи купуєте Ви в Інтернеті товари?

.Чи шукали Інформацію про роботу в мережі Інтернет?

.Чи користуєтесь Інтернетом для роботи?

.Чи користуєтесь Інтернетом для навчання?

.Де Ви зазвичай користуєтесь Інтернетом?.Вдома.На роботі / навчанні.У публічному місці.У родичів і друзів.Через мобільний Інтернет

.Вкажіть Ваш рід занять.Підприємець.Курівник.Спеціаліст.Службовець.Робочий.Навчаюся.Домогосподарка.Пенсіонер.Безробітний


ДИПЛОМНА РОБОТА Розробка програмного забезпечення для аналізу сучасного стану соціальних медіа Вступ

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ