Занятный пример на PowerShell — генерируем слова и проверяем их популярность в Bing

Приведу короткий пример скрипта на Windows PowerShell, генерирующего слова и проверяющего их популярность в поисковой системе Bing. Будет очень интересно всем, кто имел опыт программирования.

Скрипт будет генерировать случайные слова и проверять количество запросов слов в Bing, выделяя их цветом: белый (не найдено в интернете), зеленый (от 1 до 1000 просмотров в интернете), желтый (от 1000 до 1 000 000 просмотров в интернете) и красный (более 1 000 000 просмотров). Это будет полезно при выборе имени сайта или подбора себе уникального ника в интернете.

В примере рассматривается использование объекта Internet Explorer и поиск по веб-страницам по ID, работа с массивами, строками и функциями.

 

#
# Random words and their popularity with Bing
#

#
# Defines array with common vowels, consonants and endings
#

[array] $Vowels = «a;a;a;a;e;e;e;e;i;i;i;o;o;o;u;u;y» -split «;»
[array] $Consonants = «b;b;br;c;c;c;ch;cr;d;f;g;h;j;k;l;m;m;m;n;n;p;p;ph;qu;r;r;r;s;s;s;sh;t;tr;v;w;x;z» -split «;»
[array] $Endings = «r;r;s;r;l;n;n;n;c;c;t;p» -split «;»

#
# Functions for random vowels, consonants, endings and words
#

function Get-RandomVowel
{ return $Vowels[(Get-Random($Vowels.Length))] }

function Get-RandomConsonant
{ return $Consonants[(Get-Random($Consonants.Length))] }

function Get-RandomEnding
{ return $Endings[(Get-Random($Endings.Length))] }

function Get-RandomSyllable ([int32] $PercentConsonants, [int32] $PercentEndings)
{
[string] $Syllable = «»
if ((Get-Random(100)) -le $PercentConsonants)
{ $Syllable+= Get-RandomConsonant }
$Syllable+= Get-RandomVowel
if ((Get-Random(100)) -le $PercentEndings)
{ $Syllable+= Get-RandomEnding }
return $Syllable
}

function Get-RandomWord ([int32] $MinSyllables, [int32] $MaxSyllables)
{
[string] $Word = «»
[int32] $Syllables = ($MinSyllables) + (Get-Random(($MaxSyllables — $MinSyllables + 1)))
for ([int32] $Count=1; $Count -le $Syllables; $Count++)
{ $Word += Get-RandomSyllable 70 20 } <# Consonant 70% of the time, Ending 20% #>
return $Word
}

#
# Function to see how many pages Bing finds for a given term
#

Function Get-BingCount([string] $Term) {

# Navigate to the Bing page to query the $term
$ie.Navigate(«http://bing.com/search?q=%2B»+$term);

# Wait for the page to load
$timeout = 0
while ($ie.Busy) {
# Write-Host «Waiting for Bing page for $term to load»
Start-Sleep -Milliseconds 100
$timeout++
If ($timeout -gt 100) {
return «L-Error»
}
}

# Wait for the document to be ready
$timeout = 0
$element1 = $ie.Document.IHTMLDocument3_getElementById(«b_tween»).innertext
$element2 = $ie.Document.IHTMLDocument3_getElementById(«b_content»).innertext
While ($element1 -eq $null -and $element2 -eq $null) {
# Write-Host «Waiting for Bing document for $term to be ready»
Start-Sleep -Milliseconds 100
$timeout++
If ($timeout -gt 100) {
return «D-Error»
}
$element1 = $ie.Document.IHTMLDocument3_getElementById(«b_tween»).innertext
$element2 = $ie.Document.IHTMLDocument3_getElementById(«b_content»).innertext
}

# Get the count of pages
If ($element1 -ne $null) { $result = $element1.split(» «)[0] }
else { $result = «0» }
# Return the count
return $result
}

#
# Main code
#

# Create Internet Explorer object
$ie = New-Object -ComObject «InternetExplorer.Application»

# Show initial message
Write-Host
Write-Host «Here are 20 random words and their popularity»
Write-Host

1..20 | % {
# Get a random word
$word = Get-RandomWord 2 5

# Check the popularity with Bing
$count = ([string] (Get-BingCount $word)).Padleft(12)
$countint = [int] $count

# Select Color based on popularity.
if ($countint -eq 0) { $color = «white» }
elseif ($countint -lt 1000) { $color = «green» }
elseif ($countint -lt 1000000) { $color = «yellow» }
else { $color = «red» }

# Write the info with the right color
Write-Host «$count —> $word» -ForegroundColor $color
}

# Quit Internet Explorer
$ie.quit();

После выполнения скрипт выдаст подобный отчет:

image_65F462F6

 

Источник: Jose Barreto’s Blog

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
Website