Advanced Dynamic DNS script (DynDNS, Dynu) UPDATED

ddns.rsc The script will update your dynamic dns and will create scheduler and netwatch for updates, You can update several proviaders (DynDNS and Dynu for now) and via specific interface (if you use several wan connections).

:local ddns do={
	:local dynhost
	:local dynurlv

	:if (([:len $provider]=0) or ([:len $host]=0) or ([:len $username]=0) or ([:len $password]=0)) do={
		:error "missing parameters"
	}

	:if ($provider="dynu") do={
		:set dynhost "api.dynu.com"
		:set dynurlv "/nic/update?hostname=$host"
	}
	:if ($provider="dyndns") do={
		:set dynhost "members.dyndns.org"
		:set dynurlv "/nic/update?hostname=$host&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
	}
	:set dynhost [:resolve $dynhost];

   :local WanToIp do={
    	:if ([:len [/ip dhcp-client find where interface=[:tostr $1]]]>0) do={
    		:return [/ip dhcp-client get [find interface=[:tostr $1]] gateway]
    	} else={
    		:return [$1]
    	}
    }

	:log warning ("Updating dynamic dns '".$host."' ...");
	:if (([:len [/interface find name=$interface]]>0) and ([/interface get value-name=disabled $interface]=no)) do={
		/ip route add distance=1 gateway=[$WanToIp $interface] dst-address=$dynhost comment="updating '$host' via '$interface'"
		:delay 800ms;
	}
	:do {
		/tool fetch address=$dynhost src-path=$dynurlv mode=http user=$username password=$password dst-path=("$dynprov.".$host)
	} on-error={
		:log error ("Update dynamic dns '".$host."' failed...");
	}
	/ip route remove [/ip route find where comment="updating '$host' via '$interface'"]
}

:do {
	## Configuration file
	:local fconfig [:parse [/system script get "ddns.cfg" source]]
	:local cfg [$fconfig]
	:local HOSTS ($cfg->"hosts")
	:local ACCOUNTS ($cfg->"accounts")
	## Foreach HOSTS
	:foreach Host in=[:toarray $HOSTS] do={
		:local wan
		:local dynprov
		:local dynhost
		:local dynuser
		:local dynpass
		:if ([:len [:pick $Host (-1) ([:find $Host "|"])]]>0) do={
			:set wan [:pick $Host 0 ([:find $Host "|"])]
			:set dynprov [:pick $Host ([:find $Host "|"]+1) [:find $Host "@"]]
			:set dynhost [:pick $Host ([:find $Host "@"]+1) [:len $Host]]
		} else={
			:set dynprov [:pick $Host 0 [:find $Host "@"]]
			:set dynhost [:pick $Host ([:find $Host "@"]+1) [:len $Host]]
		}
		:if ([:len [:pick $ACCOUNTS (-1) ([:find $ACCOUNTS "|"])]]>0) do={
			:foreach account in=[:toarray $ACCOUNTS] do={
				:if ([:pick $account 0 [:find $account "|"]]=$dynprov) do={
					:set dynuser [:pick $account ([:find $account "|"]+1) [:find $account "@"]]
					:set dynpass [:pick $account ([:find $account "@"]+1) [:len $account]]
				}
			}
		} else={
			:set dynuser [:pick $ACCOUNTS 0 [:find $ACCOUNTS "@"]]
			:set dynpass [:pick $ACCOUNTS ([:find $ACCOUNTS "@"]+1) [:len $ACCOUNTS]]
		}
		:log info ("\$ddns provider=$dynprov host=$dynhost username=$dynuser password=$dynpass interface=$wan")
		$ddns provider=$dynprov host=$dynhost username=$dynuser password=$dynpass interface=$wan
	}
}

Configuration file code (“ddns.cfg”)

:log info "ddns.cfg has been loaded";

:local config {
	"hosts"="dynu@YOURDOMAIN,dyndns@YOURDOMAIN,INTERFACE|dynu@YOURDOMAIN";
	"accounts"="dyndns|USERNAME@PASSWORD,dynu|USERNAME@PASSWORD";
	"storage"="";
}
return $config

Hello,
I need to run the script only for Dyn DNS…
How can I modify it?
Thank you.