Maison >Problème commun >L'adresse spécifique peut-elle être trouvée sur la base de l'adresse IP ?

L'adresse spécifique peut-elle être trouvée sur la base de l'adresse IP ?

青灯夜游
青灯夜游original
2020-11-06 12:06:31117453parcourir

L'adresse spécifique peut être trouvée en fonction de l'adresse IP ; l'adresse IP est une "carte d'identité" obtenue en fonction du point de connexion réseau de chaque ordinateur. L'interrogation de l'adresse IP nous permet de savoir efficacement où se trouve l'ordinateur. est. .

L'adresse spécifique peut-elle être trouvée sur la base de l'adresse IP ?

L'adresse IP est une "carte d'identité" obtenue en fonction du point de connexion réseau de chaque ordinateur. L'interrogation de l'adresse IP peut effectivement nous permettre de savoir où se trouve l'ordinateur. est.

Comment interroger un emplacement géographique spécifique en fonction de l'adresse IP

Baidu Map dispose d'une API pour interroger des adresses en fonction de l'IP

http://lbsyun.baidu.com/index.php?title=webapi/ip-api

1. Vérifiez directement l'adresse IP selon l'API Baidu Map.

L'API indique que la demande des deux adresses suivantes peut obtenir l'adresse spécifique en fonction de l'IP :

Les paramètres de la demande sont les suivants :

Si l'adresse IP de notre requête est 192.168.1.1, alors l'adresse de la requête est construite comme suit :

http://api.map.baidu.com/location/ip?ak=XXX(自己申请的API TOKEN)&ip=192.168.1.1

Python est utilisé comme langage expérimental ici, et le code et les commentaires sont les suivants :

from urllib import request
import json

# ak is bound with ip
baidu_api_ak = "ZX9QCmwzzItzRO5ssD7GNgEwD4OQduWR"
ip_addr = "xxx.xxx.xxx.xxx"
# Request url
url = "http://api.map.baidu.com/location/ip?ak=" + baidu_api_ak + "&ip=" + ip_addr
req = request.Request(url)
res = request.urlopen(req)
res = res.read()
# Bytes to str
n = res.decode(encoding='utf-8')
# str to json
s = json.loads(n)
t = json.dumps(s, ensure_ascii=False)
print(n)
print(t)

Le code ci-dessus La signification générale est que l'URL de la requête lit le flux renvoyé et le convertit au format json. Le résultat est comme indiqué dans la figure ci-dessous :

Remarquez que dans la figure ci-dessus, vous ne pouvez voir que Dans une vaste zone telle que la ville de Chengdu, province du Sichuan, les champs tels que « rue » sont vides lorsqu'ils sont interrogés. En d’autres termes, seule une plage approximative peut être interrogée.

PS : La valeur renvoyée contient également la latitude et la longitude, mais selon le document original, ces latitude et longitude sont la latitude et la longitude du point central de la ville où se trouve l'IP.

2. Vérifiez d'abord la longitude et la latitude, puis vérifiez l'adresse en fonction de la longitude et de la latitude.

Basé sur la requête de latitude et de longitude IP, Baidu Maps ne fournit pas d'API, mais il existe toujours des ressources hors du mur. Ce n'est pas posté ici, allez le chercher vous-même. . .

Si vous obtenez la latitude et la longitude, vous pouvez interroger l'adresse détaillée via l'API latitude et longitude + Baidu Map.

L'API globale de géocodage inversé de Baidu Map est la suivante :

http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

Comme indiqué ci-dessous, supposons que nous avons obtenu la latitude et la longitude. Selon les règles de l'API, ce qui suit le paramètre de localisation est la latitude et la longitude. Selon la latitude et la longitude, on peut trouver l'adresse détaillée.

Le code expérimental et les commentaires sont les suivants :

#! /usr/bin/env python
# coding=utf-8

from urllib import request
import json

# ak is bound with ip
baidu_api_ak = "ZX9QCmwzzItzRO5ssD7GNgEwD4OQduWR"
url = "http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=30.6667,104.0670&output=json&pois=1&ak=" + baidu_api_ak
req = request.Request(url)
res = request.urlopen(req)
res = res.read()
n = res.decode(encoding='utf-8')
# The result format is renderReverse&&renderReverse(json str). so....
n = n[len("renderReverse&&renderReverse") + 1:-1]
st = json.loads(n)
# st's structure
#   result: XXXX
#   status: XXXX
result = st["result"]
for i in result:
    print(i, result[i])

Les résultats sont les suivants :

L'adresse ici a été C'est très détaillé, mais il n'y a pas d'analyse détaillée et cela semble un peu brouillon. Si vous souhaitez obtenir les informations de localisation spécifiées, vous pouvez vous référer à l'API.

Cependant, les résultats de telles requêtes ne sont généralement pas corrects. Cela peut être dû au fait que l'opérateur garde les utilisateurs confidentiels et que l'adresse trouvée peut être l'adresse du serveur de l'opérateur. Les détails n'ont pas été étudiés en détail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn