30boxes.com

30boxes.com is another online calendar service, one that has won some rave reviews.[252]

For information about the 30boxes.com API, go here:

An End User Tutorial

Before programming 30boxes.com, it’s useful of course to view it as an end user:

  1. Sign up for an account if you don’t already have one:

    http://30boxes.com/signup

  2. Once you have an account, log into it:

    http://30boxes.com/login

  3. You can learn how to do various tasks at 30boxes.com by consulting the help section (http://30boxes.com/help).

One noteworthy feature from an end user’s point of view is that, in terms of sharing, it seems that all calendars are completely private by default. You can add buddies and set options as to how much a given buddy can see:

  • Buddies can see your entire calendar unless you mark an event as private.

  • Buddies can see events that are marked with a certain tag.

  • Buddies can see only the stuff on the buddy page.

30boxes.com API

The main documentation is at this location:

http://30boxes.com/api/

You have to get a key here:

http://30boxes.com/api/api.php?method=getKeyForUser

In this section, we’ll exercise the API. Please substitute your own [APIKEY] and [AUTHTOKEN]. You can do HTTP GET requests on the following URLs:

  • test.ping:[253]

    http://30boxes.com/api/api.php?method=test.Ping&apiKey={APIKEY}

  • user.FindByEmail:

    http://30boxes.com/api/api.php?method=user.FindByEmail&apiKey={APIKEY}&email=yee@Â

    berkeley.edu

  • user.Authorize: Many methods require authorization, which then yields an authorization token. In this example, I use a small picture of me as the application icon.[254]user.FindByEmail, I also drop the optional returnURL argument:

    http://30boxes.com/api/api.php?method=user.Authorize&apiKey={APIKEY}Â?&applicationName={application-name}&applicationLogoUrl={url}

    For example:

    http://30boxes.com/api/api.php?method=user.Authorize&apiKey={APIKEY}Â?&applicationName=Raymond+Yee&applicationLogoUrl=http%3A%2F%2Ffarm1.static.Â?flickr.com%2F4Â%2F5530475_48f80eece8_s.jpg

    You will get an authentication token, which I show here as {AUTHTOKEN}.

  • user.GetAllInfo:

    http://30boxes.com/api/api.php?method=user.GetAllInfo&apiKey={APIKEY}Â?&authorizedUserToken={AUTHTOKEN}

    to which you will get something like this:

                      <?xml version="1.0" encoding="utf-8"?>
                      <rsp stat="ok">
                        <user>
                          <id>40756</id>
                          <facebookId>1229336</facebookId>
                          <firstName>Raymond</firstName>
                          <lastName>Yee</lastName>
                          <avatar>http://farm1.static.flickr.com/4/5530475_48f80eece8_s.jpg</avatar>
                          <status>sweeping stuff under the carpet while he writes.</status>
                          <bio/>
                          <dateFormat>MM-DD-YYYY</dateFormat>
                          <timeZone>US/Pacific</timeZone>
                          <createDate>2006-03-17</createDate>
                          <startDay>0</startDay>
                          <use24HourClock>0</use24HourClock>
                          <feed>
                            <name>Raymond - MySpace Blog</name>
                            <url>http://blog.myspace.com/blog/rss.cfm?friendID=82943257</url>
                          </feed>
                          <email>
                            <address>yee@berkeley.edu</address>
                            <primary>1</primary>
                          </email>
                          <email>
                            <address>raymond.yee@gmail.com</address>
                            <primary>0</primary>
                          </email>
                          <otherContact>
                            <type>Yahoo</type>
                            <value>rdhyee</value>
                          </otherContact>
                          <otherContact>
                            <type>Personal Site</type>
                            <value>http://hypotyposis.net/blog</value>
                          </otherContact>
                      
                        </user>
                      </rsp>
                   
  • events.Get:

    http://30boxes.com/api/api.php?method=events.Get&apiKey={APIKEY}Â?&authorizedUserToken={AUTHTOKEN}&start=2007-01-01&end=2007-09-01

    to which you will get something like this:

                      <?xml version="1.0" encoding="utf-8"?>
                      <rsp stat="ok">
                        <eventList>
                          <userId>40756</userId>
                          <listStart>2007-01-01</listStart>
                          <listEnd>2007-06-30</listEnd>
                          <event>
                            <id>1767437</id>
                            <summary>Y!RB Brain Jam: A CHI2007 Sampler</summary>
                            <notes>[....]</notes>
                            <start>2007-04-27 14:00:00</start>
                            <end>2007-04-27 14:00:00</end>
                            <lastUpdate>2007-04-11 15:08:58</lastUpdate>
                            <allDayEvent>0</allDayEvent>
                            <repeatType>no</repeatType>
                            <repeatEndDate>0000-00-00</repeatEndDate>
                            <repeatSkipDates/>
                            <repeatICal/>
                            <reminder>-1</reminder>
                            <tags/>
                            <externalUID>http://upcoming.org/event/172254/</externalUID>
                            <privacy>shared</privacy>
                            <invitation>
                              <isInvitation>0</isInvitation>
                            </invitation>
                          </event>
                      [....]
                        </eventList>
                      
                      </rsp>
                   
    [Note]Note

     The end parameter cannot be more than 180 days after start.

  • events.GetDisplayList (to get an expanded and sorted list of events):

    http://30boxes.com/api/api.php?method=events.GetDisplayList&apiKey={APIKEY}Â?&authorizedUserToken={AUTHTOKEN}&start=2007-01-01&end=2007-09-01

  • todos.Get:

    http://30boxes.com/api/api.php?method=todos.Get&apiKey={APIKEY}&authorizedUserÂ?Token={AUTHTOKEN}

  • todos.Add:

    http://30boxes.com/api/api.php?method=todos.Add&apiKey={APIKEY}&authorizedUserÂ?Token={AUTHTOKEN}&text=Eat+more+veggies&externalUID=123456x

  • todos.Update:

    http://30boxes.com/api/api.php?method=todos.Update&apiKey={APIKEY}&authorizedÂ

    UserToken={AUTHTOKEN}&text=Eat+more+veggies+and+fruit&todoId=123110&externalUID=Â

    123456x

  • todos.Delete:

    http://30boxes.com/api/api.php?method=todos.Delete&apiKey={APIKEY}&authorizedÂ?UserToken={AUTHTOKEN}&text=Eat+more+veggies+and+fruit&todoId=123110

  • events.AddByOneBox:

    http://30boxes.com/api/api.php?method=events.AddByOneBox&apiKey={APIKEY}Â?&authorizedUserToken={AUTHTOKEN}&event=eat+some+sushi+tomorrow+at+7pm

    [Note]Note

     You can find a Python API wrapper for 30boxes.com at http://trentm.com/projects/?thirtyboxes/.