今日、Bing AI の順番が回ってきたから ChatGPT と同じ質問で DDNS のアドレス更新スクリプトを作ってみた。
何はともあれ、まずは Ubuntu 用の Microsoft Edge をダウンロード、インストール。
続いて ChatGPT と同じ質問をしてみた。
最初の質問
- DDNSとしてMyDNSを使っている環境で、自宅のグローバルIPアドレスが変わったことを検出してDDNSを更新するPythonスクリプトを書いて。
-
こんにちは、これはBingです。😊
DDNSとしてMyDNSを使っている環境で、自宅のグローバルIPアドレスが変わったことを検出してDDNSを更新するPythonスクリプトを書くのは難しいことではありません。以下のようなスクリプトを参考にしてください。
# 必要なモジュールをインポート import requests import os import time # MyDNSのユーザーIDとパスワードを設定 MYDNS_USER = "your_user_id" MYDNS_PASS = "your_password" # 前回のIPアドレスを保存するファイル名を設定 LAST_IP_FILE = "last_ip.txt" # IPアドレスの変更をチェックする間隔を秒で設定 CHECK_INTERVAL = 60 # 現在のIPアドレスを取得する関数 def get_current_ip(): # https://ipv4.mydns.jp/ にアクセスしてIPアドレスを取得 response = requests.get("https://ipv4.mydns.jp/") # レスポンスのテキストを返す return response.text # 前回のIPアドレスを取得する関数 def get_last_ip(): # ファイルが存在するかチェック if os.path.exists(LAST_IP_FILE): # ファイルを読み込む with open(LAST_IP_FILE, "r") as f: # ファイルの内容を返す return f.read() else: # ファイルが存在しない場合は空文字を返す return "" # 前回のIPアドレスを保存する関数 def save_last_ip(ip): # ファイルにIPアドレスを書き込む with open(LAST_IP_FILE, "w") as f: f.write(ip) # MyDNSにIPアドレスを通知する関数 def update_mydns(ip): # MyDNSの更新用URLを作成 url = f"https://ipv4.mydns.jp/login.html?username={MYDNS_USER}&password={MYDNS_PASS}&updatehost=1" # URLにアクセスしてレスポンスを取得 response = requests.get(url) # レスポンスのステータスコードを返す return response.status_code # 無限ループ while True: # 現在のIPアドレスを取得 current_ip = get_current_ip() # 前回のIPアドレスを取得 last_ip = get_last_ip() # IPアドレスが変わったかチェック if current_ip != last_ip: # IPアドレスが変わった場合 print(f"IPアドレスが変わりました: {last_ip} -> {current_ip}") # MyDNSにIPアドレスを通知 status = update_mydns(current_ip) # 通知の結果を表示 if status == 200: # 通知に成功した場合 print("MyDNSにIPアドレスを更新しました。") else: # 通知に失敗した場合 print(f"MyDNSにIPアドレスを更新できませんでした。ステータスコード: {status}") # 前回のIPアドレスを保存 save_last_ip(current_ip) else: # IPアドレスが変わっていない場合 print(f"IPアドレスは変わっていません: {current_ip}") # 指定した間隔だけ待つ time.sleep(CHECK_INTERVAL)
おお、最初から IP アドレスを保存して比較するスクリプトになっている。
でも IP アドレスの保存時にアドレス以外の文字が残っていて、そのままの状態で通知しようとして失敗している。
質問をもっと正確に書かないとダメだね。
ということでやり直してみる。
2回めの質問
- DDNSとしてMyDNSを使っている環境で、自宅のグローバルIPアドレスが変わったことを検出してDDNSを更新するPythonスクリプトを書いて。ただし、現在のIPアドレスは"http://checkip.dyndns.org"から取得すること。また、取得したIPアドレスの保存時は、正規表現にマッチする文字だけとすること。
-
以下のPythonスクリプトを書きました。これは、自宅のグローバルIPアドレスが変わったことを検出して、MyDNSに登録したドメインのIPアドレスを更新するものです。現在のIPアドレスは"http://checkip.dyndns.org"から取得し、正規表現にマッチする文字だけを保存します。このスクリプトは、定期的に実行する必要があります。
# 必要なライブラリをインポート import requests import re import os # MyDNSのマスターIDとパスワードを設定 MYDNS_ID = "your_master_id" MYDNS_PASSWORD = "your_password" # IPアドレスを取得するURLを設定 IP_URL = "http://checkip.dyndns.org" # IPアドレスを保存するファイル名を設定 IP_FILE = "ip.txt" # IPアドレスの正規表現を設定 IP_REGEX = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" # IPアドレスを取得する関数を定義 def get_ip(): # URLにアクセスしてレスポンスを取得 response = requests.get(IP_URL) # レスポンスのテキストからIPアドレスを抽出 ip = re.search(IP_REGEX, response.text).group() # IPアドレスを返す return ip # IPアドレスを更新する関数を定義 def update_ip(ip): # MyDNSの更新用URLを設定 update_url = f"https://www.mydns.jp/directip.html?MID={MYDNS_ID}&PWD={MYDNS_PASSWORD}&IPV4ADDR={ip}" # URLにアクセスしてレスポンスを取得 response = requests.get(update_url) # レスポンスのステータスコードを返す return response.status_code # 現在のIPアドレスを取得 current_ip = get_ip() # IPアドレスを保存するファイルが存在するか確認 if os.path.exists(IP_FILE): # ファイルが存在する場合、ファイルから前回のIPアドレスを読み込む with open(IP_FILE, "r") as f: previous_ip = f.read() else: # ファイルが存在しない場合、前回のIPアドレスを空文字にする previous_ip = "" # 現在のIPアドレスと前回のIPアドレスが異なるか確認 if current_ip != previous_ip: # IPアドレスが変わっている場合、MyDNSにIPアドレスを更新する status_code = update_ip(current_ip) # 更新の結果を表示 if status_code == 200: print(f"IPアドレスを更新しました: {current_ip}") else: print(f"IPアドレスの更新に失敗しました: {status_code}") # 現在のIPアドレスをファイルに保存する with open(IP_FILE, "w") as f: f.write(current_ip) else: # IPアドレスが変わっていない場合 print(f"IPアドレスは変わっていません: {current_ip}")
今度は大丈夫だった。
感想
ChatGPT もそうだけど、質問は意図する内容をできるだけ正確に記述することが大切。
回答(スクリプト)を確認して、場合によっては何度も試行を繰り返すことで必要なスクリプトを完成させることができるのは便利。
どっちがパワフル?なのか判らないけど、質問の修正と、質問回答の履歴をそのまま残すことができる ChatGPT は便利だと思った(残す必要があるかどうかは別として)。
コメント