Søke telefonnummer via PowerShell

Har laget to små eksperiment med PowerShell der jeg sjekker om jeg kan bruke 1881.no uten API og Gulesider.no (Eniro) med API.

Man kan undre at man ikke vil bruke API. Det er to grunner. Det er for å lære hvordan man kan trekke ut informasjon fra en resultat webside, det andre er at det er kost for på bruke hos API 1881.no.

NB! Det man må være på vakt er å ikke sende for mange søk etter hverandre, ellers kan man bli blokkert. Fordi den vil anta at det er ikke en person som sender inn søkning mot 1881.no

PowerShell nummeroppslag via Eniro.no

For å kunne bruke Eniro sin API må man registere seg på via denne web-linken https://api.eniro.com/

Her registrere man seg via å etablere et profilnavn og får tildelt en API nøkkel som vi trenger videre.

Powershell kode for Eniro (Gulesider)

# powershell -ExecutionPolicy ByPass -File .\SearchEniro.ps1
# powershell -ExecutionPolicy ByPass -File .\SearchEniro.ps1 - search xxxxxxxx

# registrering via https://api.eniro.com/

param (
       [string] $profile = 'DinProfil', 
        [string] $key = 'DinAPInøkkel',    
        [string] $search = 'standardverdi' 
) 

$uri = 'https://api.eniro.com/partnerapi/cs/search/basic?profile='+$profile+'&key='+$key+'&country=no&version=1.1.3&search_word='+$search +' ' 

$response = Invoke-RestMethod -Uri $uri 

$json = $response[0] | Select-Object -Property adverts | ConvertTo-Json 

$x = $json | ConvertFrom-Json | select -expand adverts | select companyInfo, address -first 1

$name = $x.companyInfo -replace '@{companyName=', '' -split ';' 

$addr = $x.address -replace '@{streetName=', '' -replace '}', '' -replace 'postCode=', '' -replace 'postArea=', '' -replace 'postBox=', '' -replace ';', ',' 

$search 
$name[0] 
$addr

I dette eksempel vil man vise kun det første resultat som API kilden sendte tilbake. Her viser man navn og adresse.

Denne vil kun fungere mot søk mot bedrifter. For å kunne få den til å fungere mot privat personer må man abonnere på den tjenesten.

Last ned kode her.

PowerShell nummeroppslag via 1881.no

Siden man ikke benytter API som kilde, må man analysere og trekke ut ønskelige informasjonen i html-filen. Nedenfor er det kommentert i koden som viser hva man skal lete etter og trekke ut ønsket data. Det er selvsagt navn og adresse. Som et pluss er at man også få kart via en link.

Powershell kode for 1881.no

# powershell -ExecutionPolicy ByPass -File .\Search1881.ps1 søkestreng

# metode som benyttes https://www.1881.no/?query=32323232

param ([string] $search = 'standardverdi') 

$uri = 'https://www.1881.no/?query='+$search 

$response = Invoke-RestMethod -Uri $uri | Out-String 

$containsWord = $response | %{$_ -match '<h2 class="details-person-name">'} 

if ($containsWord -contains $true) { 

# <h2 class="details-person-name">xxxx</h2> 

$a = $response -replace '<h2 class="details-person-name">','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '</h2>', 'xxx_xxx' -split 'xxx_xxx' 

$name = $b[0] 

# <p class="details__address"> 
# <a href="https://kart.1881.no/xxx/xxx/xxxx"> 
# xxxxxx, <span> xxxx</span> 
# <span class="details__map-link">Vis kart</span> 
# </a> 
# </p> 

$a = $response -replace '<p class="details__address">','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '</p>', 'xxx_xxx' -split 'xxx_xxx'

$a = $b[0] -replace '<a href="','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '">', 'xxx_xxx' -split 'xxx_xxx' 
$map = $b[0] 

$a = $b[1].Trim() -replace '</span>', 'xxx_xxx' -split 'xxx_xxx' 
$b = $a[0] -replace '<span>', '' 

$a = $b -replace '(^\s+|\s+$)','' 
$addr = $a -replace ' ', '' 

$search 
$name 
$addr 
$map
} 

$containsWord = $response | %{$_ -match '<h2 class="listing__name">'} 

if ($containsWord -contains $true) { 

#<h2 class="listing__name"> 
# <a href="/person/xxx/xxx/xxxx/?query=xxxxx">xxxx</a> 
#</h2> 

$a = $response -replace '<h2 class="listing__name">','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '</h2>', 'xxx_xxx' -split 'xxx_xxx' 

$a = $b[0] -replace '</a>', 'xxx_xxx' -split 'xxx_xxx' 
$b = $a[0] -split '">' 
$name = $b[1] 

# <p class="listing__address"> 
# <a onclick="LogAction('xxx', 'Map')" href="https://kart.1881.no/xxx/xxx/xxxx"> # xxxxx, # <span>xxxxx</span> # <span class="listing__map-link">Vis kart</span> 
# </a> 
#</p> 

$a = $response -replace '<p class="listing__address">','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '</p>', 'xxx_xxx' -split 'xxx_xxx' 
$a = $b[0] -replace '" href="','xxx_xxx' -split 'xxx_xxx' 
$b = $a[1] -replace '">', 'xxx_xxx' -split 'xxx_xxx' 
$map = $b[0] 

$a = $b[1] -replace '</span>', 'xxx_xxx' -split 'xxx_xxx' 
$b = $a[0] -replace '<span>', '' 
$a = $b.Trim() -replace '\r*\n', '' 
$addr = $a -replace ' ', '' 

$search 
$name 
$addr 
$map 

} 

else 

{ Write-Host "Fant ikke noen"}
    

I dette eksempel vil man motta en HTML fil. Den blir analysert og her får man innhentet ut navn, adresse og kart-link.

Last ned koden her.

Frontbilde av ROBIN WORRALL (Unsplash)

Vennligst registrer deg for nyheter!

Nå abonnert du på mine nye artikler. Tusen takk!

Det oppstod en feil under din registrering. Vær så snill, prøv på nytt.