Export your Facebook Friends’ Birthdays to any Calendar:
An alternative to DDNS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# An alternative to DDNS | |
# | |
# What if you want to access your local home server from the internet but have a dynamic ip address? | |
# Typically you use dynamic domain name resolution (ddns) for this. There are serveral providers out | |
# there offering you a ddns subdomain. However, you have to create an account, spent money or accept | |
# limitations of the provider. | |
# | |
# So, here an alternative: | |
# – Create a Google Formular containing one input field: your ip address. | |
# – From your local server, determine your current external ip address (e.g. by retrieving it from | |
# a website). | |
# – Whenever your ip changes, paste it to your google formular. | |
# – Now, you only have to store/know a permanent link to your google sheet to read the current ip of | |
# your home server. | |
# – The python script below implements the idea. Feel free to run it on your home server. | |
# | |
# – Dependencies: Python, curl, google account | |
# – Usage: Make sure to edit the variables formular_url and field_name according to your formular. | |
#!/usr/bin/env python | |
import subprocess | |
import time | |
if __name__ == '__main__': | |
# The url to the formular | |
formular_url = 'https://docs.google.com/forms/d/1POTEbzxEou_ZKpMM6M*************K5fNrkFX4/formResponse' | |
# Inspect the source code of your Google Formular website to get the name of your field | |
field_name = 'entry.1461371975'#my example | |
old_ip = '' | |
while True: | |
try: | |
current_ip = subprocess.check_output(['curl', 'ipecho.net/plain']) | |
if old_ip != current_ip: | |
subprocess.call(['curl', '–data', field_name + '=' + current_ip, formular_url]) | |
old_ip = current_ip | |
except Exception as e: | |
pass | |
time.sleep(10*60) |
Content moved
I uploaded my projects to github: