суббота, 29 января 2011 г.

За двумя зайцами.

И зачем я вечно влезаю во всякие споры на политические темы? Ведь это глупо! Вот и сегодня, влез в дискуссию на тему того что власть в России сама устраивает себе теракты с какой-то целью. Собственно говоря я не придерживаюсь такого мнения. Считаю это бредом. Но, между тем – влезаю. Так вот, коллега, в доказательство своей точки зрения прислал мне ссылку на сайт terror99.ru. Специально не делаю HREF с надеждой не дать им лишних очков в поисковиках Улыбка. Значит, прислали мне эту ссылку. Стоит иметь ввиду, что я во всем сомневаюсь. Если у кого-то есть некое мнение, то мне обязательно надо найти контраргумент. Опять же – глупо это, но часто ничего не могу с собой сделать. Вот точно так же и тут. Посмотрел я на этот сайт. Полез в about. Увидел там, что сайт создан при поддержке неких граней.ру. Никогда там не был до этого момента и в дальнейшем не пойду. Погуглил про эти самые грани. Оказалось – рупор либерастов. Новодворских всяких. Уже это заронило некую тень сомнения в адекватности этого ресурса. Кроме того натолкнулся на мнение, что грани эти спонсирует небезызвестный Березовский. Что тоже немного наводит на мысль. Далее, я поводил жалом мышью по страничке со ссылками. И у меня появилось стойкое ощущение, что большинство ссылок там ведут на эти самые грани. Поменьше – на другие либеральные издания. А на общие издания так – сверху пара ссылок, может, насыпана. И несомненно основной комок сами знаете чего на вентилятор набрасывают эти самые грани. Но ведь это надо как-то доказать! Никак ведь, без доказательств. И вот тут мне пришла в голову идея. Разобрать страницу со ссылками, и посмотреть, куда ведет большинство из них. Вот тут, собственно, я и убил второго зайца. Правда времени потратил много, ну да ничего.

Итого: я написал для этой задачки скрипт на powershell. Скрипт запрашивает страницу, выбирает из нее ссылки и рисует графичек. Для этогоя использовал MS Chart и COM объект Internet Explorer. Немного помучиться пришлось. Кроме того, я не вникал глубоко в устройство MS Chart, просто добился рабочего скрипта. Итак, скрипт:

cls

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")

[array]$hostnames = @()
[array]$chartData = @()
$count = 0

#тип данных для хранения информации о ссылках
Add-Type @'
public class chartDataEntry
{
public string key;
public int value;
public int percentVal;

}
'@

# создаем объект InternetExplorer.Application и запрашиваем страницу
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://terror99.ru/links.htm")
Start-Sleep -Milliseconds 2000 #волшебное число.ждем загрузки страницы
# разбираем страницу. достаем массив ссылок и выбираем только имена хостов
$doc = $ie.document
foreach ($link in $doc.links){
$hostnames += [string]$link.hostname
$count += 1
}

#формируем хэш-таблицу и подсчитываем
#сколько раз встречается один и тот же хост
$hostnames | % {$h=@{}} {$h[$_] += 1}

$ie.Quit() #если выйти раньше, проwесс IE не закроется

#заполняем массив данными по количеству ссылок и процентами
foreach ($item in $h.Keys){
[chartDataEntry] $entry = New-Object chartDataEntry
$entry.key = $item;
$entry.value = $h[$item];
$entry.percentVal = [int](($h[$item] / $count) * 100);
$chartData+=$entry
}

$Chart = $null
$Form = $null

# создание объекта Chart
$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 1024
$Chart.Height = 768
$Chart.BackColor= [System.Drawing.Color]::Transparent

# создание области для вывода объекта Chart
$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$ChartArea.AxisX.Interval=1
$Chart.ChartAreas.Add($ChartArea)

# привязка к данным и настройка отображения
$Chart.DataBindTable($chartData,'key')
$Chart.Series[0].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Bar
$Chart.Series[1].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Bar
$Chart.Series[0]["DrawingStyle"]=$Chart.Series[1]["DrawingStyle"]="Cylinder"
$Chart.Series[1].IsValueShownAsLabel = $true

# легенда
$Chart.Series[0].LegendText="Кол-во ссылок"
$Chart.Series[1].LegendText="Процентное кол-во ссылок"
$chart.Legends.Add("Default")

# отображение на форме
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right -bor
[System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left


$Form = New-Object Windows.Forms.Form
$Form.Text = "PowerShell Chart"
$Form.Width = 1024
$Form.Height = 768
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()

Все расписано в комментариях. И что же в итоге? А вот что:


links


Действительно – 30% ведет на грани (олд + сами грани), 9% сам на себя, еще 9% – НТВ, лента.ру и новая газета еще 7 и 6% соответственно. В общем, набор источников информации достаточно однобок. Выводы, я думаю, каждый сделает свои. Но как по мне – бред это все!

Отправить комментарий