document.open();document.writeln('<div onmouseover="document.getElementById(\'snipt-6615\').style.display = \'block\'; return false;" onmouseout="document.getElementById(\'snipt-6615\').style.display = \'none\'; return false;" style="position: relative;">');document.writeln('<div class="highlight"><pre style="-moz-border-radius: 5px; border-radius: 5px; -webkit-border-radius: 5px; margin: 0; display: block; font: 11px Monaco, monospace !important; padding: 15px; background-color: #1C1C1C; overflow: auto; color: #D0D0D0;"><span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">syncr.flickr.models</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">Photo</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">syncr.twitter.models</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">Tweet</span>');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #447fcf; text-decoration: underline">pytz</span>');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">get_media_for_session</span><span style="color: #d0d0d0">(session):</span>');document.writeln('    <span style="color: #ed9d13">&quot;&quot;&quot;</span>');document.writeln('<span style="color: #ed9d13">        Collect Tweets &amp; Photos that were created between the session start &amp; end times</span>');document.writeln('<span style="color: #ed9d13">        </span>');document.writeln('<span style="color: #ed9d13">        Photos are sorted into batches by their owner, and then receive an index in the update</span>');document.writeln('<span style="color: #ed9d13">        timeline that is the datetime of the last photo in the set</span>');document.writeln('<span style="color: #ed9d13">        </span>');document.writeln('<span style="color: #ed9d13">        accepts session object</span>');document.writeln('<span style="color: #ed9d13">        returns updates=list(dicts), # of tweets, # of photos</span>');document.writeln('<span style="color: #ed9d13">    &quot;&quot;&quot;</span>');document.writeln('    <span style="color: #d0d0d0">updates</span> <span style="color: #d0d0d0">=</span> <span style="color: #24909d">list</span><span style="color: #d0d0d0">()</span>');document.writeln('');document.writeln('    <span style="color: #d0d0d0">tweets</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">Tweet.objects.filter(created__gte=session.session_start,</span> <span style="color: #d0d0d0">created__lte=session.session_end)</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">for</span> <span style="color: #d0d0d0">tweet</span> <span style="color: #6ab825; font-weight: normal">in</span> <span style="color: #d0d0d0">tweets:</span>');document.writeln('        <span style="color: #d0d0d0">updates.append({</span><span style="color: #ed9d13">&#39;type&#39;</span><span style="color: #d0d0d0">:</span><span style="color: #ed9d13">&#39;tweet&#39;</span><span style="color: #d0d0d0">,</span> <span style="color: #ed9d13">&#39;tweet&#39;</span><span style="color: #d0d0d0">:</span> <span style="color: #d0d0d0">tweet,</span> <span style="color: #ed9d13">&#39;datetime&#39;</span><span style="color: #d0d0d0">:tweet.local_pub_time()})</span>');document.writeln('    ');document.writeln('    <span style="color: #d0d0d0">photoset</span> <span style="color: #d0d0d0">=</span> <span style="color: #24909d">list</span><span style="color: #d0d0d0">()</span>');document.writeln('    <span style="color: #d0d0d0">counter</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span>');document.writeln('    <span style="color: #d0d0d0">photos</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">Photo.objects.filter(taken_date__gte=session.session_start,</span> <span style="color: #d0d0d0">taken_date__lte=session.session_end).order_by(</span><span style="color: #ed9d13">&#39;owner&#39;</span><span style="color: #d0d0d0">,</span><span style="color: #ed9d13">&#39;taken_date&#39;</span><span style="color: #d0d0d0">)</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">for</span> <span style="color: #d0d0d0">photo</span> <span style="color: #6ab825; font-weight: normal">in</span> <span style="color: #d0d0d0">photos:</span>');document.writeln('        <span style="color: #999999; font-style: italic"># this should be on the photo model as &#39;get_thumbnail_url&#39;</span>');document.writeln('        <span style="color: #d0d0d0">photo.thumbnail_url</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">&quot;http://farm%s.static.flickr.com/%s/%s_%s_s.jpg&quot;</span> <span style="color: #d0d0d0">%</span> <span style="color: #d0d0d0">(photo.farm,</span> <span style="color: #d0d0d0">photo.server,</span> <span style="color: #d0d0d0">photo.flickr_id,</span> <span style="color: #d0d0d0">photo.secret)</span>');document.writeln('        <span style="color: #d0d0d0">photoset.append(photo)</span>');document.writeln('        ');document.writeln('        <span style="color: #6ab825; font-weight: normal">try</span><span style="color: #d0d0d0">:</span>                <span style="color: #d0d0d0">nextOwner</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">photos_by_owner[counter+</span><span style="color: #3677a9">1</span><span style="color: #d0d0d0">].owner</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">except</span> <span style="color: #bbbbbb">IndexError</span><span style="color: #d0d0d0">:</span>  <span style="color: #d0d0d0">nextOwner</span> <span style="color: #d0d0d0">=</span> <span style="color: #24909d">False</span>');document.writeln('        ');document.writeln('        <span style="color: #6ab825; font-weight: normal">if</span> <span style="color: #d0d0d0">photo.owner</span> <span style="color: #d0d0d0">!=</span> <span style="color: #d0d0d0">nextOwner:</span>');document.writeln('            <span style="color: #d0d0d0">date_taken_tmz</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">photo.taken_date.replace(tzinfo=pytz.utc).astimezone(pytz.timezone(TIME_ZONE))</span>');document.writeln('            <span style="color: #d0d0d0">updates.append({</span><span style="color: #ed9d13">&#39;type&#39;</span><span style="color: #d0d0d0">:</span><span style="color: #ed9d13">&#39;photo&#39;</span><span style="color: #d0d0d0">,</span><span style="color: #ed9d13">&#39;photoset&#39;</span><span style="color: #d0d0d0">:</span> <span style="color: #d0d0d0">photoset,</span> <span style="color: #ed9d13">&#39;owner&#39;</span><span style="color: #d0d0d0">:</span> <span style="color: #d0d0d0">photo.owner,</span><span style="color: #ed9d13">&#39;owner_nsid&#39;</span><span style="color: #d0d0d0">:</span> <span style="color: #d0d0d0">photo.owner_nsid,</span> <span style="color: #ed9d13">&#39;count&#39;</span><span style="color: #d0d0d0">:</span><span style="color: #24909d">len</span><span style="color: #d0d0d0">(photoset),</span> <span style="color: #ed9d13">&#39;datetime&#39;</span><span style="color: #d0d0d0">:</span> <span style="color: #d0d0d0">date_taken_tmz})</span>');document.writeln('            <span style="color: #d0d0d0">photoset</span> <span style="color: #d0d0d0">=</span> <span style="color: #24909d">list</span><span style="color: #d0d0d0">()</span>');document.writeln('            ');document.writeln('        <span style="color: #d0d0d0">counter</span> <span style="color: #d0d0d0">+=</span> <span style="color: #3677a9">1</span>');document.writeln('    ');document.writeln('    <span style="color: #d0d0d0">updates.sort(key=</span><span style="color: #6ab825; font-weight: normal">lambda</span> <span style="color: #d0d0d0">x:x[</span><span style="color: #ed9d13">&#39;datetime&#39;</span><span style="color: #d0d0d0">])</span>');document.writeln('    ');document.writeln('    <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">updates,</span> <span style="color: #24909d">len</span><span style="color: #d0d0d0">(tweets),</span> <span style="color: #24909d">len</span><span style="color: #d0d0d0">(photos)</span>');document.writeln('</pre></div>');document.writeln('');document.writeln('<div style="background-color: #111; color: #D0D0D0; float: right; padding: 5px 10px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; font: 11px Arial,Sans-Serif; display: none; position: absolute; bottom: 0; right: 0;" id="snipt-6615">code hosted by <a href="http://snipt.net/pkarl/combine-tweets-photos-into-a-single-timeline" style="color: #0084FF; text-decoration: none;">snipt.net</a></div>');document.writeln('</div>');document.close();