Что нового

геолокация по IP парсинг с сайта

RockMan

Новичок
Сообщения
67
Репутация
0
Подскажите с какого сайте проще всего спарсить геолокацию и провайдера текущего по IP? или как это определить возможно есть готовое решение простое, желательно не используя функции IE а как то через Inetread, inetgetsource
 

hedji

Продвинутый
Сообщения
409
Репутация
94
2ip.ru

Код:
$str=BinaryToString(InetRead("https://2ip.ru/", 1), 4)
$location = StringRegExp($str, 'geoip/"/>(.*)</a', 3)
$isp = StringRegExp($str, 'href="/isp/(.*)/">', 3)
MsgBox(0, "", "Локация: " & $location[0] & @CRLF & "Провайдер: " &  $isp[0])
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
hedji
Немного неправильно возвращает провайдер, так будет корректнее:

Код:
$sHtml = BinaryToString(InetRead('https://2ip.ru/', 1), 4)

$sLocation = StringRegExpReplace($sHtml, '(?si).*?geoip/"/>(.*?)</a>.*', '\1')
$sProvider = StringRegExpReplace($sHtml, '(?si).*?<a href="/isp/.*?">\s*(.*?)\s*</a>.*', '\1')

MsgBox(64, '2ip.ru results', StringFormat('Откуда вы: %s\nВаш провайдер: %s', $sLocation, $sProvider))
 
Автор
R

RockMan

Новичок
Сообщения
67
Репутация
0
подскажите а если сложится такая ситуация что нету доступа к сайту 2ip.ru, можно как то сделать чтобы переменные заполнились цифрой 0, или знаком каким то? именно заполнились, а не завершение скрипта...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
Global $sWebsite = 'https://2ip.ru/'
Global $sLocation = 0
Global $sProvider = 0

$bRead = InetRead($sWebsite, 1)

If $bRead = '' Then
	MsgBox(48, 'Error', $sWebsite & ' does not responding')
Else
	$sHtml = BinaryToString($bRead, 4)
	
	$sLocation = StringRegExpReplace($sHtml, '(?si).*?geoip/"/>(.*?)</a>.*', '\1')
	$sProvider = StringRegExpReplace($sHtml, '(?si).*?<a href="/isp/.*?">\s*(.*?)\s*</a>.*', '\1')
EndIf

MsgBox(64, 'Results', StringFormat('Откуда вы: %s\nВаш провайдер: %s', $sLocation, $sProvider))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
С использованием http://ip-api.com/json:

Код:
Global $sWebsite = 'http://ip-api.com/json'
Global $sLocation = 0
Global $sProvider = 0

$bRead = InetRead($sWebsite, 1)

If $bRead = '' Then
	MsgBox(48, 'Error', $sWebsite & ' does not responding')
Else
	$sHtml = BinaryToString($bRead, 4)
	
	$sLocation = StringRegExpReplace($sHtml, '(?si).*?"city":"(.*?)","country":"(.*?)".*', '\1, \2')
	$sProvider = StringRegExpReplace($sHtml, '(?si).*?"isp":"(.*?)".*', '\1')
EndIf

MsgBox(64, 'Results', StringFormat('Откуда вы: %s\nВаш провайдер: %s', $sLocation, $sProvider))
 
Верх