Get calendar data using google-cli (Python) for easy scripting!

I needed to backup my Google Drive documents to my NAS at home and while i was at it i also used this stuff to export my calendar to a nice plain-text list for later scripting. So if anyone is interested this is how i did it on my mac to get all events from my calendar to a nice formatted list to create your own todo-list or motd message when open your terminal or whatever you like to do!

 

Get the needed files, assumed you have python already installed on your machine:

wget http://gdata-python-client.googlecode.com/files/gdata-2.0.14.tar.gz
wget http://googlecl.googlecode.com/files/googlecl-0.9.13.tar.gz

 

Unpack and install:

tar -zxvf gdata-2.0.14.tar.gz && cd gdata-2.0.14 && sudo python setup.py install
tar -zxvf googlecl-0.9.13.tar.gz && cd googlecl-0.9.13 && sudo python
setup.py install

 

Locate where google-cli ended up, on my mac:

/opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin/google (On my linux box it ended up in /usr/local/bin/)

Create symlink or copy to /usr/local/bin/ (or add to PATH)

 

Next, make a test run, you’ll need to authenticate first time and allow your computer to access the calendar (or tasks, drive etc etc):

cn-macbook-w:~ christian$google calendar today

 

follow the instructions to authenticate and create tokens (very easy!) On osx the default browser pops up and wants you to authenticate, if no x-server it will print out a http-url you need to copy-paste in a browser and allow your computer to access the info.

 

run it again:

cn-macbook-w:~ christian$google calendar today
[christian@sodermalm.net]
testing,Oct 20 11:00 - Oct 20 12:00

 

Sweet, now i want to get the whole month of october as a list:

cn-macbook-w:~ christian$ google calendar list --date
2013-04-01,2013-04-30 --fields title,when,where
Admin,Oct 29 00:00 - Oct 30 00:00,Home
Massage,Oct 29 17:30 - Oct 29 18:30,Stockholm

… ETC …

 

Been using different methods of accessing googles APIs before (javascript directly from spreadsheets etc) but with these packages it makes scripting and automating stuff a breeze 🙂 If anyone have a better way of doing this i would like to know more so write me a comment! 🙂

/Christian

Send Prowl notifications from op5 Monitor or Nagios

Install the Prowl iPhone app and register for an API-key so you can associate your push-notifications to your phone.

Create a new contact (example):

define contact{
 contact_name <Your-name>-push
 alias <Your-name> push notifications
 service_notification_period 24x7
 host_notification_period 24x7
 service_notification_options w,u,c,r
 host_notification_options d,u,r
 service_notification_commands notify-service-by-prowl
 host_notification_commands notify-host-by-prowl
 _prowl_apikey <Your API key>
 }

Add following notification commands:

define command{
 command_name host-notify-by-prowl
 command_line /usr/bin/perl -w /usr/local/bin/prowl.pl -apikey="$_CONTACTPROWL_APIKEY$" -priority=1 -application="Nagios-RPI" -event="$HOSTNAME$ is $HOSTSTATE$" -notification="Status: $HOSTOUTPUT$"
 }
define command{
 command_name service-notify-by-prowl
 command_line /usr/bin/perl -w /usr/local/bin/prowl.pl -apikey="$_CONTACTPROWL_APIKEY$" -priority=1 -application="Nagios-RPI" -event="$SERVICEDESC$ on $HOSTNAME$ is $SERVICESTATE$" -notification="Status: $SERVICEOUTPUT$"
 }

And install the perl push-notification plugin from prowlapp.com https://www.prowlapp.com/static/prowl.pl

If you like me run Nagios on a Raspberry Pi and wish to avoid to execute perl-code to save resources there are a C version as well which more or less don’t have much overhead.

Not very detailed instructions but the main parts are there so good luck!

/Christian

Loopia DDNS in dd-wrt

There’s a few posts all over the internet when you try to find information about how to use DDNS in dd-wrt
with Loopia as your DNS provider. I found this post in one of the forums by “Codetracer” (Thanks!) pointing me in the right direction although didn’t manage to get it to work at first and the reason for that was that my build 16994 had a broken Inadyn daemon. Updated to 18024 and all worked fine.

For this to work your WAN interface needs to be your external interface and have your external
IP as we fetch that information from NVRAM. In other cases you need to fetch this information
using a external page (Example below).

Do the following (Copy paste from the forum):

– DDNS Service can be disabled. At least thats how I do it.

– Add your info to the code. Change *USERNAME*, *PASSWORD*, *FQDN_HOST_NAME* (zzz.yyy.com)
Where username usually is your primary domain

– Open DD-WRT web interface and go to “Administration” –> “Commands”

– Paste code in “Command Shell” and make sure the string is

– Click “Save Startup”

– Reboot router.

– Done!

– Check /tmp/ddns/ddns.log for messages about last update.

#DDNS(inadyn) for Loopia
sleep 10
mkdir /opt/tmp/ddns 
/usr/sbin/inadyn -u *USERNAME* -p *PASSWORD* --background --dyndns_system \
custom@http_svr_basic_auth -a *FQDN_HOST_NAME* --update_period_sec 600 \
--forced_update_period 864000 --log_file /tmp/ddns/ddns.log --cache_dir \
/tmp/ddns --exec ddns_success --dyndns_server_name dns.loopia.se \
--dyndns_server_url /XDynDNSServer/XDynDNS.php?system=custom\&myip=$(nvram get wan_ipaddr)\&hostname=

There are a few thing worth mentioning. As cache and logs are stored i /tmp this will be cleared when
the router reboots and this will force a update of your DNS at startup. Not sure about Loopia but several
other providers simply blocks your IP for a period of time. To be on the safe side use persistent storage
for example a USB stick to store cache data and logs.

If your WAN interface isn’t you external interface and doesn’t have your external ip (you are on LAN) add the following option to fetch the public IP

--ip_server_name dns.loopia.se/checkip/checkip.php

Over and out!

/Christian

Loopia DDNS på Synology ds211j

Finns så fantastisk lite info på webben om hur man kan få igång loopias DDNS i routers eller i mitt fall min Synology NAS.

Så som en reminder till mig själv när jag ska få in DDNS i min dd-wrt router så skriver jag ner hur jag fick igång det i min NAS.

Editera /etc.defaults/ddns_provider.conf och lägg till entry för loopia:

[Loopia.se]
 modulepath=DynDNS
 queryurl=dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname=__HOSTNAME__&myip=__MYIP__

gå sedan in i DDNS i Control panel och välj i listan “Loopia.se”
Hostname:mindomän.se
Username:mindomän.se
Password:lösenord

Håll koll på statusen under rutan så att det kommer upp “Normal” så är DNS:en uppdaterad.

Additional DDNS providers in Synology ds211j

Translated an old post so it will be easier to find for others who are interested in this topic.

This was actually a workaround when writing the original post. I didn’t manage to get Loopia DDNS updates to work on my DD-WRT so i added this to my NAS instead to update my domain.

It later turned out that Inady on the build i was using was broken and is corrected in later builds. I have written a post about that topic earlier.

As a reminder to self i’ll write down the information here for later use and for others interested in doing this.

Access your Synology NAS using SSH

Edit /etc.defaults/ddns_provider.conf and simply add the following entry (for Loopia in this case) :

[Loopia.se]
 modulepath=DynDNS
 queryurl=dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname=__HOSTNAME__&myip=__MYIP__

Now you can select Loopia.se option in the DDNS configuration in the control panel.

Add your information:

Hostname:mydomain.com
Username:yourusername
Password:yourpassword

Save and keep an eye on the status box and when it states “Normal” you DNS should be updated.