Google DomainsのDDNSをアップデートするPythonスクリプト

Created 2019年3月31日15:39
Updated 2019年3月31日17:29
Categories Python 自宅サーバー

環境

  • Ubuntu 18.04 LTS 64bit
  • Python 3.6.7

スクリプト

sudo pip3 install requestsでrequestsを入れてください。

update.py

import requests
from requests.auth import HTTPBasicAuth
from pathlib import Path
import json
import logging

update_url = "https://domains.google.com/nic/update"
log_file = Path(__file__).parents[0] / "update.log"
logging.basicConfig(filename=log_file, level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")


def notyfi_ip(username, password, hostname):
    params = {"hostname": hostname}
    auth = HTTPBasicAuth(username, password)
    response = requests.get(update_url, auth=auth, params=params)
    logging.info(response.text)


def road_config_and_exec(conf_path=Path(__file__).parents[0] / "ddns_conf.json"):
    ddns_conf_list = json.loads(Path(conf_path).read_text())
    for ddns_conf in ddns_conf_list:
        username = ddns_conf.get("username")
        password = ddns_conf.get("password")
        hostname = ddns_conf.get("hostname")
        notyfi_ip(username, password, hostname)


if __name__ == "__main__":
    road_config_and_exec()

設定ファイル

実行ファイルと同じディレクトリに ddns_conf.json として配置してください。

Google Domainsの設定画面で表示される認証情報をリスト形式で登録します。

[
    {
        "username": "",
        "password": "",
        "hostname": ""
    }
]

crontab

0 * * * * python3 /path/to/update.py

ログ

実行ファイルと同じディレクトリに update.logとして残ります。

ローテーションとか実装してないので少し心配ですが、1回の実行で2行しかログは出ないですし問題ない・・・かな・・・と。

コメントを投稿

コメント