- •Міністерство культури України
- •Аннотация
- •Annotation
- •Розділ 1.On-line контент. Основні поняття та визначення
- •1.1. On-line контент. Основні визначення
- •1.2. Класифікація on-line контенту
- •1.3. Використання on-line контенту
- •1.4. Розділ 2. Аналізon-lineконтенту
- •2.1. Концепції та методи аналізу
- •Потік e-mail
- •Оперативна база даних Ретроспективна база даних
- •2.2. Архітектура систем аналізу
- •Вилучення Веб-контенту
- •2.3. Технології аналізу
- •Тип, Значення
- •Лексичний аналізатор
- •3.1. Функціональні вимоги до програмного продукту
- •3.2. Нефункціональні вимоги до програмного продукту
- •3.3. Алгоритми аналізу
- •3.4. Інтерфейс програмного продукту
- •Пошук запиту
- •Завантаження результатів усіх запитів
- •Завантаження результатів поточного запиту
- •3.5. Тестування програмного продукту
- •3.6. Техніко-економічне обґрунтування
- •3.7. Охорона праці
- •3.7.1. Правові питання охорони праці
- •3.7.2. Організація і обладнання робочих місць користувачів пк з точки зору охорони праці
- •3.7.3. Характеристика виробничого середовища і чинники, що діють на оператора в процесі його праці
- •3.7.4. Вимоги електричної та пожежної безпеки
- •Висновки
- •Список використаних джерел
- •Додаток а Лістинг програми
Додаток а Лістинг програми
Головна сторінка (пошук, аналіз, аналітика запиту)
<?php header('Content-Type: text/html; charset=windows-1251'); ?>
<?php require_once 'lib/functions.php'; ?>
<html>
<head>
<title>Система інформаційного моніторингу</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<table align="center" width="35%">
<tr>
<td width="15%"><?php if(!$_REQUEST['act'] or $_REQUEST['act'] == 'work'){echo "<a href=\"index.php\"><b>Пошук</b></a>";}else echo "<a href=\"index.php\">Пошук</a>"; ?></td>
<td width="15%"><?php if($_REQUEST['act'] == 'analytics'){echo "<b><a href=\"analytics.php?act=show\">Аналітика</a></b>";}else echo "<a href=\"analytics.php?act=show\">Аналітика</a>"; ?></td>
<td></td>
</tr>
</table>
<table align="center" width="35%" class="main">
<form>
<input type="hidden" name="act" value="work" />
<tr><td width="85%">
<input type="text" name="keyword" style="font-family: Tahoma; font-size: 10px; width: 100%;" />
</td>
<td>
<input type="submit" name="ok" value="Знайти" />
</td>
</tr>
</form>
</table>
<?php
// Парсинг, запись в базу и выведение результатов поиска
if ($_REQUEST['act'] == 'work')
{
$keyword = $_REQUEST['keyword'];
$jobsua = GetUrl("http://www.jobs.ua/vacancy/search/?todo=search&keywords={$_REQUEST['keyword']}&city=0"); // отправка запроса на сайт
$handle=@fopen("jobsua.txt","a"); // запись страницы результатов в файл
fwrite($handle,$jobsua);
fclose($handle);
$jobukrnet = GetUrl("http://job.ukr.net/vacancy/?ShowSearchResults=1&CityId=0&RegionId=9&Keywords={$_REQUEST['keyword']}");
$handle=@fopen("jobsukr.net.txt","a");
fwrite($handle,$jobukrnet);
fclose($handle);
//$workua = GetUrl("http://www.work.ua/jobs/?search={$_REQUEST['keyword']}&ss=1®ion=39");
$links = GetVacancyArray($jobsua); // парсинг ссылок на вакансии
mysql_connect('localhost','chatlanin_umnik','5447221'); // подключение к базе
mysql_select_db('chatlanin_spy');
foreach($links as $url) // цикл перебора каждого файла с вакансией
{
$url = "http://www.jobs.ua".$url;
$vac_html = GetUrl($url);
file_put_contents("cache/".md5($url).".htm", $vac_html);
$file_name = "cache/".md5($url).".htm";
$file = file_get_contents($file_name);
$jobsua_company = GetCompany($file); // ок
$jobsua_city = GetCity($file); // ок
$jobsua_salary = GetSalary($file); // ок
$jobsua_sex = GetSex($file); // ок
$jobsua_post = GetPost($file); // ок
$jobsua_age = GetAge($file); // ок
$jobsua_education = GetEducation($file); // ок
$jobsua_experience = GetExperience($file); // ок
// ________Запрос в базу на запись _________
$query = "INSERT into report(company, city, salary, sex, post, age, education, experience, search_engine, search_query) values('".mysql_escape_string($jobsua_company)."','"
.$jobsua_city."','"
.$jobsua_salary."','"
.$jobsua_sex."','"
.$jobsua_post."','"
.$jobsua_age."','"
.$jobsua_education."','"
.$jobsua_experience."','jobs.ua','"
.$keyword."');";
mysql_query($query);
$query_select = "SELECT * from report where search_query = '".$keyword."';";
$result = mysql_query($query_select);
// проверка на существование результатов поиска
$fail = count($links);
}
if(!$links)
{
echo "<center>Не знайдено вакансій!</center>";
} else {
?>
<!--Вывод таблички с результатом-->
<table align="center" width="75%" class="main">
<tr>
<td>
Пошуковий запит: <b><?php $row1 = mysql_fetch_array($result); echo $row1['search_query']; ?></b>
</td>
<tr>
</tr>
<td>
Результати з сайту: <b><?php echo $row1['search_engine']; ?></b>
</td>
<td colspan="6" align="right">
<a href="index.php?act=analytics&keyword=<?php echo $_REQUEST['keyword'];?>"><img src="graf.png" /> Аналітика запиту</a>
<a href="stats.php?act=download&keyword=<?php echo $_REQUEST['keyword'];?>" target=_blank><img src="Excel.gif" /> Завантажити звіт</a>
</td>
</tr>
</table>
<table id="box-table-a" align="center" width="75%">
<thead>
<tr>
<th scope="col">Компанія</th>
<th scope="col">Місто</th>
<th scope="col">Зарплата</th>
<th scope="col">Стать</th>
<th scope="col">Посада</th>
<th scope="col">Вік</th>
<th scope="col">Освіта</th>
<th scope="col">Досвід роботи</th>
</tr>
</thead>
<tbody>
<?php
while($row = mysql_fetch_array($result))
{
echo "<tr><td>{$row['company']}</td><td>{$row['city']}</td><td>{$row['salary']}</td><td>{$row['sex']}</td><td>{$row['post']}</td><td>{$row['age']}</td><td>{$row['education']}</td><td>{$row['experience']}</td></tr>";
}
?>
</tbody>
</table>
<?php
}
} // Блок создания и вывода аналитики по поисковому запросу
if($_REQUEST['act'] == 'analytics')
{
echo "<p class=\"title_in_analytics\">Аналітика запиту <b>".$_REQUEST['keyword']."</b></p>";
mysql_connect('localhost', 'chatlanin_umnik', '5447221');
mysql_select_db('chatlanin_spy');
// Блок запросов к базе
$query = "SELECT education, count(*) FROM report WHERE search_query = '" .$_REQUEST['keyword']. "'GROUP BY education ORDER BY education DESC"; // Круговая диаграмма по образованию
$query_vacancy = "SELECT date, search_query, count(*) FROM report WHERE search_query = '" .$_REQUEST['keyword']. "' GROUP BY date ORDER BY date ASC"; // Столбики по вакансиям
$query_sex = "SELECT sex, count(*) FROM report WHERE search_query = '" .$_REQUEST['keyword']. "' GROUP BY sex ORDER BY sex DESC"; // Круговая диаграмма по половому признаку
$query_age = "SELECT age, count(*) FROM report WHERE search_query = '" .$_REQUEST['keyword']. "' GROUP BY age ORDER BY age DESC";
$query_city_salary = "SELECT city, AVG(salary) as 'avg' FROM report WHERE search_query = '" .$_REQUEST['keyword']. "' GROUP BY city";
$result = mysql_query($query);
$result_vacancy = mysql_query($query_vacancy);
$result_sex = mysql_query($query_sex);
$result_age = mysql_query($query_age);
$result_city_salary = mysql_query($query_city_salary);
// Блок формирования структурных массивов с данными для построения графиков
$rs[] = array(iconv('cp1251', 'utf-8', 'Освіта'), iconv('cp1251', 'utf-8', 'Кількість'));
while($row = mysql_fetch_assoc($result))
{
$row['education'] = iconv('cp1251', 'utf-8', $row['education']);
$rs[] = array($row['education'], intval($row['count(*)']));
}
echo "<script type=\"text/javascript\">var x = ".json_encode($rs).";</script>";
$rs_vacancy[] = array(iconv('cp1251', 'utf-8', 'Вакансія'), iconv('cp1251', 'utf-8', $_REQUEST['keyword']));
while($row_vacancy = mysql_fetch_assoc($result_vacancy))
{
$row_vacancy['search_query'] = iconv('cp1251', 'utf-8', $row_vacancy['search_query']);
$rs_vacancy[] = array(date("d.m.y", strtotime($row_vacancy['date'])), intval($row_vacancy['count(*)']));
}
echo "<script type=\"text/javascript\">var y = ".json_encode($rs_vacancy).";</script>";
$rs_sex[] = array(iconv('cp1251', 'utf-8', 'Стать'), iconv('cp1251', 'utf-8', 'Кількість'));
while($row_sex = mysql_fetch_assoc($result_sex))
{
$row_sex['sex'] = iconv('cp1251', 'utf-8', $row_sex['sex']);
$rs_sex[] = array($row_sex['sex'], intval($row_sex['count(*)']));
}
echo "<script type=\"text/javascript\">var z = ".json_encode($rs_sex).";</script>";
$rs_age[] = array(iconv('cp1251', 'utf-8', 'Вік'), iconv('cp1251', 'utf-8', 'Кількість'));
while($row_age = mysql_fetch_assoc($result_age))
{
$row_age['age'] = iconv('cp1251', 'utf-8', $row_age['age']);
$rs_age[] = array($row_age['age'], intval($row_age['count(*)']));
}
echo "<script type=\"text/javascript\">var a = ".json_encode($rs_age).";</script>";
$rs_city_salary[] = array(iconv('cp1251', 'utf-8', 'Місто'), iconv('cp1251', 'utf-8', 'Зарплата'));
while($row_city_salary = mysql_fetch_assoc($result_city_salary))
{
$row_city_salary['city'] = iconv('cp1251', 'utf-8', $row_city_salary['city']);
$rs_city_salary[] = array($row_city_salary['city'], intval($row_city_salary['avg']));
}
echo "<script type=\"text/javascript\">var b = ".json_encode($rs_city_salary).";</script>";
?>
<!--Формированиие и вывод графиков-->
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable(x);
var options = {
title: 'Освіта',
is3D: 'true'
};
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
<script type="text/javascript">
google.setOnLoadCallback(drawChart);
function drawChart() {
var data_post = google.visualization.arrayToDataTable(y);
var options_post = {
title: 'Результати пошукових запитів',
hAxis: {title: 'Вакансії', titleTextStyle: {fontName: 'Tahoma', fontSize: 11}},
fontName: 'Tahoma',
fontSize: 12
};
var chart_post = new google.visualization.ColumnChart(document.getElementById('chart_post'));
chart_post.draw(data_post, options_post);
}
</script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data_sex = google.visualization.arrayToDataTable(z);
var options_sex = {
title: 'Стать',
is3D: 'true'
};
var chart_sex = new google.visualization.PieChart(document.getElementById('chart_sex'));
chart_sex.draw(data_sex, options_sex);
}
</script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable(a);
var options = {
title: 'Вік',
is3D: 'true'
};
var chart = new google.visualization.PieChart(document.getElementById('chart_age'));
chart.draw(data, options);
}
</script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable(b);
var options = {
title: 'Зарплата по містам',
is3D: 'true'
};
var chart = new google.visualization.LineChart(document.getElementById('city_salary'));
chart.draw(data, options);
}
</script>
<table>
<tr>
<td><div id="chart_div"></div></td>
<td><div id="chart_sex"></div><td>
<td><div id="chart_age"></div><td>
</tr>
<tr>
<td><div id="chart_post" style="width: auto; height: 500px;"></div></td>
<td><div id="city_salary" style="width: auto; height: 500px;"></div></td>
</tr>
</table>
<?php
}
?>
</body>
</html>
Генерація звіту
<?php
// Формирование Excel файла со статистикой
$link = mysql_connect('localhost', 'chatlanin_umnik', '5447221');
//mysql_query("SET NAMES 'cp1251'");
//mysql_query("SET CHARACTER SET 'cp1251'");
mysql_select_db('chatlanin_spy');
$select = "SELECT company as 'Фірма',
city as 'Місто',
salary as 'Зарплата',
sex as 'Стать',
post as 'Посада',
age as 'Вік',
education as 'Освіта',
experience as 'Досвід роботи',
search_query as 'Пошукове слово',
date as 'Дата',
search_engine as 'Пошукова система' FROM report WHERE search_query = '".$_REQUEST['keyword']."'";
$export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{ //$value = iconv('utf-8', 'windows-1251', $value);
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );
if ( $data == "" )
{
$data = "\n(0) Records Found!\n";
}
header("Content-type: application/octet-stream;");
header("Content-Disposition: attachment; filename=report.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
Сторінка загальної аналітики
<?php header('Content-Type: text/html; charset=windows-1251'); ?>
<html>
<head>
<title>Система інформаційного моніторингу</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<table align="center" width="35%">
<tr>
<td width="15%"><?php if(!$_REQUEST['act'] or $_REQUEST['act'] == 'work'){echo "<a href=\"index.php\"><b>Пошук</b></a>";}else echo "<a href=\"index.php\">Пошук</a>"; ?></td>
<td width="15%"><?php if($_REQUEST['act'] == 'show'){echo "<b><a href=\"index.php?act=analytics\">Аналітика</a></b>";}else echo "<a href=\"index.php?act=analytics\">Аналітика</a>"; ?></td>
<td></td>
</tr>
</table>
<table align="center" width="35%">
<form>
<input type="hidden" name="act" value="work" />
<tr><td width="85%">
<input type="text" name="keyword" style="font-family: Tahoma; font-size: 10px; width: 100%;" />
</td>
<td>
<input type="submit" name="ok" value="Знайти" />
</td>
</tr>
</form>
</table>
<?php
// Блок формирования общей аналитики
if($_REQUEST['act'] == 'show')
{
echo "<center><h3>Загальна аналітика системи</h3></center>";
mysql_connect('localhost', 'chatlanin_umnik', '5447221');
mysql_select_db('chatlanin_spy');
// Блок запросов к базе
$query = "SELECT education, count(*) FROM report GROUP BY education ORDER BY education DESC"; // Круговая диаграмма по образованию
$query_vacancy = "SELECT search_query, count(*) FROM report GROUP BY search_query ORDER BY search_query DESC"; // Столбики по вакансиям
$result = mysql_query($query);
$result_vacancy = mysql_query($query_vacancy);
// Блок формирования структурных массивов с данными для построения графиков
$rs[] = array(iconv('cp1251', 'utf-8', 'Освіта'), iconv('cp1251', 'utf-8', 'Кількість'));
while($row = mysql_fetch_assoc($result))
{
$row['education'] = iconv('cp1251', 'utf-8', $row['education']);
$rs[] = array($row['education'], intval($row['count(*)']));
}
echo "<script type=\"text/javascript\">var x = ".json_encode($rs).";</script>";
$rs_vacancy[] = array(iconv('cp1251', 'utf-8', 'Вакансія'), iconv('cp1251', 'utf-8', 'Кількість'));
while($row_vacancy = mysql_fetch_assoc($result_vacancy))
{
$row_vacancy['search_query'] = iconv('cp1251', 'utf-8', $row_vacancy['search_query']);
$rs_vacancy[] = array($row_vacancy['search_query'], intval($row_vacancy['count(*)']));
}
echo "<script type=\"text/javascript\">var y = ".json_encode($rs_vacancy).";</script>";
?>
<!--Формированиие и вывод графиков-->
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable(x);
var options = {
title: 'Освіта',
is3D: 'true'
};
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
<script type="text/javascript">
google.setOnLoadCallback(drawChart);
function drawChart() {
var data_post = google.visualization.arrayToDataTable(y);
var options_post = {
title: 'Пошукові запити',
hAxis: {title: 'Вакансії', titleTextStyle: {fontName: 'Tahoma', fontSize: 11}},
fontName: 'Tahoma',
fontSize: 12
};
var chart_post = new google.visualization.BarChart(document.getElementById('chart_post'));
chart_post.draw(data_post, options_post);
}
</script>
<table width="70%">
<tr>
<td><div id="chart_div" style="width: 500px; height: 300px;"></div></td>
<td></td>
</tr>
<tr>
<td colspan="2"><center><div id="chart_post" style="width: auto; height: 500px;"></div></center></td>
</tr>
</table>
<?php
}
?>
</body>
</html>
Бібліотека регулярних виразів
<?php
function GetUrl($url) // отправка запроса на поисковый сайт и сохранение страницы результатов
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0); // потому что HTTP-header в ответе тебе не нужен
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // потому что надо результат в переменную, а не на вывод
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$result_page = curl_exec($curl);
curl_close($curl);
return $result_page;
}
function get_matches($text, $regex, $index = null) // поиск совпадений
{
$matches = array();
$cnt = preg_match_all($regex, $text, $matches);
if(is_null($index))
return $matches;
else
return $matches[$index];
}
function GetVacancyArray($html) // поиск ссылок на вакансии
{
return get_matches($html, '/<a\s*?href="([0-9a-z\/]*?)"\s*?class="def_bl_vac".*?>([^<>]*?)<\/a>/ims', 1);
}
function GetCompany($text) // поиск компании-работодателя
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = strip_tags($matches[1]);
return $matches[1];
}
function GetCity($text) // поиск города
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>.*?<\/li>.*?<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = strip_tags($matches[1]);
return $matches[1];
}
function GetSalary($text) // поиск зарплаты, приведение зарплат и валют к общему формату
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>.*?<\/li>.*?<li>.*?<\/li>.*?<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = strip_tags($matches[1]);
$pattern_currency = '/(\D*?)(\d*?)(\D+)/';
$result = preg_match($pattern_currency, $matches[1],$matches_currency);
$matches_currency[3] = trim($matches_currency[3]);
switch($matches_currency[3]){
case 'грн': return $matches_currency[2] * 1;
case '$': return $matches_currency[2] * 8;
case '€': return $matches_currency[2] * 11;
default: return $matches_currency[3];
}
return $matches_currency[1].'; '.$matches_currency[2].';lolol '.$matches_currency[3];
}
function GetExperience($text) // поиск опыта работы
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$res = $matches[1];
//$res = preg_replace('/[^0-9,;\+]/i', '', $res);
$res = trim($res);
return $res;
}
function GetSex($text) // поиск пола
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
//$pattern = '/viewcontcenter.*?<li>.*?</li><li>.*?</li><li><a.*?</a></li><li>(.*?)</li><li>опыт работы 1-2 года</li><li>полная занятость</li><li>2900 грн</li><li>Аналітик продаж,економіст</li></ul><div class="viewcontright">/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = strip_tags($matches[1]);
$matches[1] = trim($matches[1]);
return $matches[1];
}
function GetAge($text) // поиск возраста
{
$matches = array();
//$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>\D*?(\d+)?\D*?(\d+)?\D+<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
return $matches[1];
}
function GetEducation($text) // поиск образования
{
$matches = array();
//$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = trim($matches[1]);
return $matches[1];
}
function GetPost($text) // поиск должности
{
$matches = array();
$pattern = '/viewcontcenter.*?<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>.*?<\/li>\s*<li>(.*?)<\/li>/ims';
$result = preg_match($pattern, $text, $matches);
$matches[1] = strip_tags($matches[1]);
return $matches[1];
}
function ScreenSQL($sql) // экранирование кавычек (защита от атак)
{
return str_replace("'", "''", $sql);
}
?>