<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Little Off &#187; Google Data</title>
	<atom:link href="http://www.bemasher.net/archives/tag/google-data/feed" rel="self" type="application/rss+xml" />
	<link>http://www.bemasher.net</link>
	<description>Code, Computers, Photography and Guns</description>
	<lastBuildDate>Mon, 21 Nov 2011 06:38:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Google Data API</title>
		<link>http://www.bemasher.net/archives/89?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-data-api</link>
		<comments>http://www.bemasher.net/archives/89#comments</comments>
		<pubDate>Tue, 17 Feb 2009 19:58:56 +0000</pubDate>
		<dc:creator>bemasher</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[gData]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Calendar]]></category>
		<category><![CDATA[Google Data]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.bemasher.net/?p=89</guid>
		<description><![CDATA[I've got a friend who has been doing a lot of web development for the UA Baja Racing Club and I've been offering ideas for developing certain things he wanted on the website like electronic time sheet submission. I suggested he just make a pdf form and have that post to a php script on [...]]]></description>
			<content:encoded><![CDATA[<p>I've got a friend who has been doing a lot of web development for the UA Baja Racing Club and I've been offering ideas for developing certain things he wanted on the website like electronic time sheet submission. I suggested he just make a pdf form and have that post to a php script on his site which would then add the vales submitted to a table in his mysql database for the site. The reason I suggested a pdf form is that it would automatically do form validation for him without having to write or find extra code to do that in javascript or in the php part himself.</p>
<p>That ended up being a little too complicated for what he was looking at and wasn't a very feasible solution since he had no real experience with sql. So I started thinking about a few other ways he could do this that would be easier for him to implement himself. Eventually I remembered I wrote a python script for this very thing a few weeks ago that I use to tally up the amount of time I worked in the last pay period for when i'm getting ready to submit my time sheets at work.</p>
<p>The python script uses the gdata api to access my calendars and tally up the total amount of time I worked each day and displays it in a user-friendly format for entering into the website I submit the ETR to.</p>
<p>My grand idea was to simply use their master google account for the club to create calendars for each person//team, share them with each person such that they have permission to modify//create events. Then modify the python script I wrote to spit out CSV files for each shared calendar for easy import into excel (where they manage all of the info for each team and their members).</p>
<p>If you're interested in the script I could post it, it's mostly been kludged together from the python gdata tutorials I found so it's by no means original and I've only been programming in python for a couple of weeks so forgive any glaring mistakes:</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">try</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">xml</span>.<span style="color: black;">etree</span> <span style="color: #ff7700;font-weight:bold;">import</span> ElementTree <span style="color: #808080; font-style: italic;"># for Python 2.5 users</span><br />
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">from</span> elementtree <span style="color: #ff7700;font-weight:bold;">import</span> ElementTree<br />
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">service</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: black;">service</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> atom.<span style="color: black;">service</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> gdata.<span style="color: #dc143c;">calendar</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> atom<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">getopt</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">string</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">base64</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">operator</span><br />
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> date<br />
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> gCalLogin<span style="color: black;">&#40;</span><span style="color: #dc143c;">email</span><span style="color: #66cc66;">,</span> password<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; calendar_service <span style="color: #66cc66;">=</span> gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">service</span>.<span style="color: black;">CalendarService</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; calendar_service.<span style="color: #dc143c;">email</span> <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">email</span><br />
&nbsp; &nbsp; calendar_service.<span style="color: black;">password</span> <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">base64</span>.<span style="color: black;">b64decode</span><span style="color: black;">&#40;</span>password<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; calendar_service.<span style="color: black;">source</span> <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'PythonETR'</span><br />
&nbsp; &nbsp; calendar_service.<span style="color: black;">ProgrammaticLogin</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> calendar_service<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> FindCalendar<span style="color: black;">&#40;</span>calendar_service<span style="color: #66cc66;">,</span> title<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; feed <span style="color: #66cc66;">=</span> calendar_service.<span style="color: black;">GetOwnCalendarsFeed</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i<span style="color: #66cc66;">,</span> a_calendar <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>feed.<span style="color: black;">entry</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>a_calendar.<span style="color: black;">title</span>.<span style="color: black;">text</span> <span style="color: #66cc66;">==</span> title<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> a_calendar.<span style="color: #008000;">id</span>.<span style="color: black;">text</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span><br />
&nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">def</span> DateRangeQuery<span style="color: black;">&#40;</span>calendar_service<span style="color: #66cc66;">,</span> calendar_id<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'default'</span><span style="color: #66cc66;">,</span> start_date<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'2009-01-01'</span><span style="color: #66cc66;">,</span> end_date<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'2009-01-30'</span><span style="color: #66cc66;">,</span> event_title<span style="color: #66cc66;">=</span><span style="color: #483d8b;">'Work for ARL'</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; result <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; parseISO8601 <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;(<span style="color: #000099; font-weight: bold;">\d</span>+)-(<span style="color: #000099; font-weight: bold;">\d</span>+)-(<span style="color: #000099; font-weight: bold;">\d</span>+)T(<span style="color: #000099; font-weight: bold;">\d</span>+):(<span style="color: #000099; font-weight: bold;">\d</span>+):(<span style="color: #000099; font-weight: bold;">\d</span>+).(<span style="color: #000099; font-weight: bold;">\d</span>+)([+-]<span style="color: #000099; font-weight: bold;">\d</span>+:<span style="color: #000099; font-weight: bold;">\d</span>+)&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; query <span style="color: #66cc66;">=</span> gdata.<span style="color: #dc143c;">calendar</span>.<span style="color: black;">service</span>.<span style="color: black;">CalendarEventQuery</span><span style="color: black;">&#40;</span>calendar_id<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'private'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'full'</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; query.<span style="color: black;">start_min</span> <span style="color: #66cc66;">=</span> start_date<br />
&nbsp; &nbsp; query.<span style="color: black;">start_max</span> <span style="color: #66cc66;">=</span> end_date<br />
&nbsp; &nbsp; feed <span style="color: #66cc66;">=</span> calendar_service.<span style="color: black;">CalendarQuery</span><span style="color: black;">&#40;</span>query<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i<span style="color: #66cc66;">,</span> an_event <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>feed.<span style="color: black;">entry</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>an_event.<span style="color: black;">title</span>.<span style="color: black;">text</span> <span style="color: #66cc66;">==</span> event_title<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: black;">&#40;</span>an_event.<span style="color: black;">event_status</span>.<span style="color: black;">value</span> <span style="color: #66cc66;">!=</span> <span style="color: #483d8b;">&quot;CANCELED&quot;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> when <span style="color: #ff7700;font-weight:bold;">in</span> an_event.<span style="color: black;">when</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current_when <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span>parseISO8601.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>when.<span style="color: black;">start_time</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> parseISO8601.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>when.<span style="color: black;">end_time</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>current_when <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> result<span style="color: black;">&#41;</span>: <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span style="color: black;">append</span><span style="color: black;">&#40;</span>current_when<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> result<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> FindWeekBounds<span style="color: black;">&#40;</span>today<span style="color: #66cc66;">,</span> weekday<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; weekstart <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: black;">timedelta</span><span style="color: black;">&#40;</span>days<span style="color: #66cc66;">=</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>weekday<span style="color: black;">&#41;</span> + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; weekend <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: black;">timedelta</span><span style="color: black;">&#40;</span>days<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span> - <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>weekday<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span>today - weekstart<span style="color: #66cc66;">,</span> today + weekend<span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; <br />
calendar_service <span style="color: #66cc66;">=</span> gCalLogin<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;emailaddress@gmail.com&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;passwordb64encoded&quot;</span><span style="color: black;">&#41;</span><br />
work_calendar <span style="color: #66cc66;">=</span> FindCalendar<span style="color: black;">&#40;</span>calendar_service<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;maincalendarnamehere&quot;</span><span style="color: black;">&#41;</span><br />
p <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'[<span style="color: #000099; font-weight: bold;">\w</span><span style="color: #000099; font-weight: bold;">\d</span>]*?%40group.calendar.google.com'</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">IGNORECASE</span><span style="color: black;">&#41;</span><br />
work_calendar <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>p.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>work_calendar<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'%40'</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">'@'</span><span style="color: black;">&#41;</span><br />
today <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: black;">date</span>.<span style="color: black;">today</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
work_week <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><br />
start<span style="color: #66cc66;">,</span> end <span style="color: #66cc66;">=</span> FindWeekBounds<span style="color: black;">&#40;</span>date.<span style="color: black;">today</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> date.<span style="color: black;">today</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">weekday</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
work_events <span style="color: #66cc66;">=</span> DateRangeQuery<span style="color: black;">&#40;</span>calendar_service<span style="color: #66cc66;">,</span> calendar_id<span style="color: #66cc66;">=</span>work_calendar<span style="color: #66cc66;">,</span> start_date<span style="color: #66cc66;">=</span><span style="color: black;">&#40;</span>start - <span style="color: #dc143c;">datetime</span>.<span style="color: black;">timedelta</span><span style="color: black;">&#40;</span>days<span style="color: #66cc66;">=</span><span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>.<span style="color: black;">isoformat</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> end_date<span style="color: #66cc66;">=</span>end.<span style="color: black;">isoformat</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">for</span> event <span style="color: #ff7700;font-weight:bold;">in</span> work_events:<br />
&nbsp; &nbsp; start <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> event<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">if</span> x<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;+&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; end <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>x<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> x <span style="color: #ff7700;font-weight:bold;">in</span> event<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">if</span> x<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;+&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; start_datetime <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: #dc143c;">datetime</span><span style="color: black;">&#40;</span>start<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> start<span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; end_datetime <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">datetime</span>.<span style="color: #dc143c;">datetime</span><span style="color: black;">&#40;</span>end<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> end<span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; duration <span style="color: #66cc66;">=</span> end_datetime - start_datetime<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">try</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; work_week<span style="color: black;">&#91;</span>start_datetime.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%x&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> +<span style="color: #66cc66;">=</span> duration<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyError</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; work_week<span style="color: black;">&#91;</span>start_datetime.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%x&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> duration<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
days <span style="color: #66cc66;">=</span> work_week.<span style="color: black;">keys</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
days.<span style="color: black;">sort</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">for</span> day <span style="color: #ff7700;font-weight:bold;">in</span> days:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> day<span style="color: #66cc66;">,</span> work_week<span style="color: black;">&#91;</span>day<span style="color: black;">&#93;</span></div></td></tr></tbody></table></div>
<p>I did a little more work on the script since I posted the code on pastebin and I found a much simpler method for retrieving lists of calendars:</p>
<div class="codecolorer-container python default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> GetAllCalendars<span style="color: black;">&#40;</span>calendar_service<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; feed <span style="color: #66cc66;">=</span> calendar_service.<span style="color: black;">GetAllCalendarsFeed</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">map</span><span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> x: x<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>feed.<span style="color: black;">entry</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> GetUserCalendars<span style="color: black;">&#40;</span>calendar_service<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; feed <span style="color: #66cc66;">=</span> calendar_service.<span style="color: black;">GetOwnCalendarsFeed</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">map</span><span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> x: x<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>feed.<span style="color: black;">entry</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <br />
<span style="color: #ff7700;font-weight:bold;">def</span> GetSharedCalendars<span style="color: black;">&#40;</span>calendar_service<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">filter</span><span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> x: x.<span style="color: black;">title</span>.<span style="color: black;">text</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">map</span><span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> y: y.<span style="color: black;">title</span>.<span style="color: black;">text</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GetUserCalendars<span style="color: black;">&#40;</span>calendar_service<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; GetAllCalendars<span style="color: black;">&#40;</span>calendar_service<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.bemasher.net/archives/89/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

