HomeLập trìnhPythonCách lấy thông...

Cách lấy thông tin vị trí của địa chỉ IP bằng Python


Đô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:

  1. ipify: API này sẽ giúp chúng ta biết được địa chỉ IP từ đâu mà request đến.
  2. 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()get_location(). Hãy thảo luận về từng người trong số họ một cách riêng biệt.

Đọc thêm  Cách sử dụng Elaticsearch, Logstash và Kibana để trực quan hóa nhật ký trong Python trong thời gian thực

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, regioncountry. Đó 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.

Đọc thêm  Các hàm trong Python – Được giải thích bằng các ví dụ về mã

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.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status