Đôi khi, bạn sẽ cần biết vị trí của địa chỉ IP, cho dù đó là địa chỉ của riêng bạn hay của trang web bạn đang sử dụng.
Một trường hợp sử dụng cho điều này là khi bạn muốn gửi thông tin đăng nhập cho người dùng trang web của mình.
Trong bài viết này, chúng ta sẽ xem cách bạn có thể tìm thấy vị trí của địa chỉ IP bằng Python.
Để hoàn thành mục tiêu này, chúng tôi sẽ sử dụng hai API được đề cập bên dưới:
- ipify: API này sẽ giúp chúng ta biết được địa chỉ IP từ đâu mà request đến.
- ipapi: API này sẽ giúp chúng tôi tìm nạp thông tin vị trí cho một địa chỉ IP cụ thể.
Để tương tác với các API này, chúng tôi sẽ sử dụng requests
thư viện bằng Python. Nếu bạn chưa quen với API, hãy nhớ xem hướng dẫn này để tìm hiểu về chúng.
Bạn có thể cài đặt thư viện này bằng cách sử dụng pip
lệnh như thế này:
$ pip install requests
Sau khi thư viện được cài đặt, chúng ta đã sẵn sàng!
Như chúng ta đã thảo luận, trước tiên chúng ta sẽ tìm nạp địa chỉ IP của mình từ API đầu tiên. Sau đó, chúng tôi sẽ sử dụng địa chỉ IP này để tìm nạp thông tin vị trí cho địa chỉ IP cụ thể này. Vì vậy, chúng ta sẽ có hai chức năng:
import requests
def get_ip():
response = requests.get('https://api64.ipify.org?format=json').json()
return response["ip"]
def get_location():
ip_address = get_ip()
response = requests.get(f'https://ipapi.co/{ip_address}/json/').json()
location_data = {
"ip": ip_address,
"city": response.get("city"),
"region": response.get("region"),
"country": response.get("country_name")
}
return location_data
print(get_location())
Trong đoạn mã trên, chúng ta có hai chức năng – get_ip()
và get_location()
. Hãy thảo luận về từng người trong số họ một cách riêng biệt.
get_ip()
chức năng
Theo tài liệu API của ipify, chúng tôi cần tạo một ĐƯỢC yêu cầu trên https://api.ipify.org?format=json
để nhận được phản hồi JSON trông như thế này:
{
"ip": "117.214.109.137"
}
Chúng tôi lưu trữ phản hồi này trong một response
biến không gì khác ngoài một loại từ điển Python với một cặp khóa-giá trị. Vì vậy, chúng tôi đã trả về giá trị của khóa ip
như response["ip"]
.
get_location()
chức năng
Theo tài liệu API của ipapi, chúng ta cần tạo một ĐƯỢC yêu cầu trên https://ipapi.co/{ip}/{format}/
để lấy thông tin vị trí cho một địa chỉ IP cụ thể. {ip}
được thay thế bằng địa chỉ IP và {format}
có thể được thay thế bằng bất kỳ trong số này – json
, jsonp
, xml
, csv
, yaml
.
Chức năng này gọi nội bộ get_ip()
để lấy địa chỉ IP và sau đó tạo một ĐƯỢC yêu cầu trên URL có địa chỉ IP. API này trả về một phản hồi JSON giống như sau:
{
"ip": "117.214.109.137",
"version": "IPv4",
"city": "Gaya",
"region": "Bihar",
"region_code": "BR",
"country": "IN",
"country_name": "India",
"country_code": "IN",
"country_code_iso3": "IND",
"country_capital": "New Delhi",
"country_tld": ".in",
"continent_code": "AS",
"in_eu": false,
"postal": "823002",
"latitude": 24.7935,
"longitude": 85.012,
"timezone": "Asia/Kolkata",
"utc_offset": "+0530",
"country_calling_code": "+91",
"currency": "INR",
"currency_name": "Rupee",
"languages": "en-IN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc",
"country_area": 3287590,
"country_population": 1352617328,
"asn": "AS9829",
"org": "National Internet Backbone"
}
Chúng tôi nhận được rất nhiều dữ liệu trong phản hồi. Bạn có thể sử dụng bất cứ điều gì làm việc cho bạn. Đối với hướng dẫn này, chúng ta sẽ chỉ sử dụng city
, region
và country
. Đó là lý do tại sao chúng tôi tạo ra một từ điển gọi là location_data
và lưu trữ tất cả dữ liệu bên trong nó và trả về như vậy.
Cuối cùng, chúng tôi gọi get_location()
chức năng và in đầu ra. Đầu ra của chúng tôi sẽ trông như thế này:
{
"ip": "117.214.109.137",
"city": "Gaya",
"region": "Bihar",
"country": "India"
}
Trong bài viết này, chúng tôi đã tìm hiểu cách chúng tôi có thể tương tác với các dịch vụ web để lấy thông tin vị trí cho một địa chỉ IP cụ thể.
Cảm ơn vì đã đọc! Để biết thêm các bài viết như vậy, hãy xem blog của tôi, iRead.