Вдома
|
|
На
роботі, навчанні
|
|
У
публічному місці
|
|
У
родичів і друзів
|
|
Через
мобільний Інтернет
|
|
Рис. 4.6 Статистика за місцем користування
Інтернетом оброблена вручну
Рис. 4.7 Статистика відносно соціальних медіа
Вся актуальна інформація отримана в ході роботи
додатку весь час оновлюється і публікується на Інтернет-сторінці
http://smanalysis.wordpress.com/.
Висновки
Розроблене програмне забезпечення аналізує
сучасний стан соціальних медіа, користувачів соціальних медіа. Програмне
забезпечення дозволяє проводити дослідження соціальних медіа неодноразово і
давати актуальні результати кожного разу.
Згідно поставлених задач в роботі зроблено
наступне:
· Зібрано та структурувано
відомості про об’єкт аналізу;
· Визначена методика
аналізу соціальних медіа, а також інструменти;
· Визначені статистичні
методи обробки інформації, що отримається в ході аналізу;
· Визначено алгоритм роботи
програми;
· Створено програмне
забезпечення, що виконує аналіз сучасного стану соціальних медіа;
· Розроблено лаконічний
інтерфейс програмного забезпечення для гарної взаємодії з користувачем;
· Визначено кінцевий вигляд
результатів аналізу, те для чого результати можуть бути корисними;
· Організовано збір
інформації за допомогою створеного програмного додатку;
· Структурувано отриману
інформацію.
Отримані дані є корисними для подальшого аналізу
соціальних медіа. Також можливе їх використання певними організаціями в рамках
маркетингових досліджень, тому що в соціальних медіа присутня велика кількість
людей, що складають не абиякий споживацький ринок. Враховуючи події останніх
років, такі як розвиток Інтернету загалом, стрімке збільшення аудиторії
соціальних медіа, та, навіть, глобальна економічна криза 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. Режим доступу:
http://top10.ua/gadgets/2010/08/10/ukraina-idet-v-facebook
. Майк Далворт. Социальные сети. Руководство по эксплуатации // Добрая книга - 2010 г. - 248 с.
. Клара Ших. Эра Facebook. Как использовать возможности
социальных сетей. // Манн, Иванов и Фербер - 2010, 304 с.
. «В Контакте» [Електронний ресурс]; Опис сайту. // Дуров.
П., 2012. Режим доступу: http://vkontakte.ru/help.php? page=about
. WebNote [Електронний ресурс]; Количество украинских пользователей
ВКонтакте и Facebook // Стастика за даними TNS Ukraine, 2011. Режим
доступу: http://webnote.com.ua/note/short/292-vk-fb-ukr
. Колін Мук. ActionScript 3.0 для Flash. Подробное
руководство // Питер - 2009 - 992 с.
. BIGMIR-Internet [Електронний ресурс]; Глобальная статистика
интернета // Дані компанії Bigmir, 2012 Режим доступу: Режим доступу:
http://index.bigmir.net/
. Глобальная статистика украинского интернета.
BIGMIR-Internet // Новий друк - 2012 - 12 с.
. «В Контакте» [Електронний ресурс]; Розробникам // 2011
Режим доступу: /http://vkontakte.ru/developers.php/
. Р.Л. Агабекян, М.М. Кириченко, С.В. Усатиков
Математические методы в социологии. Анализ данных и логика вывода в
эмпирическом исследовании. Учебное пособие для вузов Серия: Высшее // Феникс -
2005 - 192 с.
. Справочные материалы Adobe [Електронний ресурс]; Adobe
Flash Professional CS5 & CS5.5 // Электронный справичник Adobe, 2011, Режим
доступу: http://help.adobe.com/ru_RU/flash/cs/using/index.html
15. Использование ADOBE FLASH PROFESSIONAL // Adobe. Технічна
документація - 2011 - 574 с.
16. Укрстат [Електронний ресурс]; Статистичны дані населення
України // Державна служба статистики України, 2012. Режим доступу:
http://www.ukrstat.gov.ua/738826res/
. КМІС [Електронний ресурс]; Динаміка проникнення Інтернету
в Україні // Київський міжнародний інститут соціології - 2012, Режим доступу:
http://kiis.com.ua/ua/news/view-153.html
Додаток А
Лістинг коду програми.
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 = 'http://api.vk.com/api.php';
private var serverURL: String = «http://grety.fvds.ru/»;
// Путь к серверу
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);
{_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
{
}*/
}
};
}.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 = «http://koroid.fvds.ru/»; // Путь к серверу
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.
. Чи використовуєте Ви соціальні мережі
. Чи спілкуєтесь Ви в чатах / блогах /
форумах?
. Ви слухаєте музику в
Інтернеті/Інтернет-радіо?
. Чи граєте Ви в онлайн ігри?
. Чи читаєте ви форуми та блоги?
. Чи заробляєте Ви гроші виробництвом
контенту?
. Ви дивитесь фото та відео в Інтернеті?
. Ви шукаєте потрібну Інформацію в
Інтернеті
. Ви займаєтесь маркетинговими
дослідженнями в Інтернеті?
. Чи читаєте Ви в мережі Інтернет
політичні та економічні новини?
. Чи шукаєте Ви в Інтернеті товари?
. Дивитесь ціни на різні товари та послуги
в Інтернеті?
. Читаєте в Інтернеті новини культури і
шоу-бізнеса?
. Чи шукаєте в Інтернеті інформацію для
відпочинку чи туризму?
. Чи купуєте Ви в Інтернеті товари?
. Чи шукали Інформацію про роботу в мережі
Інтернет?
. Чи користуєтесь Інтернетом для роботи?
. Чи користуєтесь Інтернетом для навчання?
. Де
Ви зазвичай користуєтесь Інтернетом?. Вдома. На роботі / навчанні. У
публічному місці. У родичів і друзів. Через мобільний Інтернет
. Вкажіть
Ваш рід занять. Підприємець. Курівник. Спеціаліст. Службовець. Робочий. Навчаюся. Домогосподарка. Пенсіонер. Безробітний