httpbin.org は無料の HTTP リクエストとレスポンスサービスであり、公開 IP アドレスを取得する機能を含む API のセットを提供しています。
httpbin.org/ip にアクセスすることで、公開 IP アドレスを取得することができます。応答は JSON 形式のデータであり、公開 IP アドレス情報が含まれています。
httpbin.org の無料 IP アドレスサービスの利点は次のとおりです:
無料:httpbin.org の IP アドレスサービスは無料で提供されており、いつでも公開 IP アドレスを取得するために使用することができます。料金は必要ありません。
簡単:httpbin.org/ip に対して HTTP GET リクエストを送信するだけで、公開 IP アドレスを取得することができます。複雑な設定や認証プロセスは必要ありません。
信頼性の高さ:httpbin.org は安定した信頼性のあるサービスであり、その API は常に利用可能であり、応答速度も良好です。
import requests
import time
def get_public_ip():
response = requests.get('https://httpbin.org/ip')
ip_info = response.json()
return ip_info['origin']
def get_city_from_ip(ip):
url = f'http://ip-api.com/json/{ip}?fields=city'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return data.get('city', '未知の都市')
else:
return '都市情報を取得できません'
if __name__ == '__main__':
public_ip = get_public_ip()
print(f'公開IP: {public_ip}')
city = get_city_from_ip(public_ip)
print(f'都市: {city}')
while True:
time.sleep(1)
グラフィカルバージョン:
import requests
from tkinter import Tk, Label, Button
from tkinter import ttk
def get_public_ip():
try:
response = requests.get('https://httpbin.org/ip')
ip_info = response.json()
return ip_info['origin']
except requests.RequestException as e:
return str(e)
def get_city_from_ip(ip):
try:
url = f'http://ip-api.com/json/{ip}?fields=city'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return data.get('city', '未知の都市')
else:
return '都市情報を取得できません'
except requests.RequestException as e:
return str(e)
def update_city():
public_ip = get_public_ip()
city = get_city_from_ip(public_ip)
ip_label.config(text=f'公開IP: {public_ip}')
city_label.config(text=f'都市: {city}')
# メインウィンドウを作成
root = Tk()
root.title("公開IPと都市の取得")
root.geometry("450x150")
# ラベルを作成
ip_label = Label(root, text="公開IP: 取得待ち...")
city_label = Label(root, text="都市: 取得待ち...")
ip_label.pack(pady=10)
city_label.pack(pady=10)
# ボタンを作成
style = ttk.Style()
style.configure("TButton", font=("Arial", 12))
get_button = ttk.Button(root, text="IPと都市を取得", command=update_city, style="TButton")
get_button.pack(pady=10)
# メインループを実行
root.mainloop()