Занятный пример на 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