You may recall a post a while back where I used the 'sed' command to create a modified copy of my TwitPic feed so that a thumbnail would show up when I imported the feed into a Blog List gadget in Blogger.
Well, I recently switched from using TwitPic for uploading pictures from my phone to using Posterous for uploading pictures and video from my phone. There were many reasons in the "pros" column, but in the "cons" was the fact that, when I imported my feed into that same Blogger widget, no thumbnail appeared.
So, just like with the TwitPic feed, I set out to modify my Posterous feed in order to get the thumbnail to appear. One problem I encountered is that the feeds were totally different formats. I based my TwitPic feed modification on a feed I knew to be working (from Digg), but performing that same transformation on the Posterous feed proved to be problematic.
What I ended up doing was simply extracting the information I needed from the Posterous feed, and then creating a one-item feed in the known-good format. The feed looks nothing like the original Posterous feed, but that's just fine, since all it will be used for is pulling the latest post into my blog sidebar.
One improvement I'm considering working on is providing a useful thumbnail when I upload a video. Currently (at least with the 3gp format), the Posterous feed just sticks a generic blank file icon in the thumbnail field. What I would like is a still frame from the movie. In order to do this myself, I would need to download the enclosure link, process the video into a still image, post the image on the web, and then put the image URL into the feed. All very doable given the right tools.
I'll have to test out what happens when I use the MP4 format for video, which my phone is also capable of creating.
Here's my script (so far). Feel free to use it under the terms of the license listed below. If you have any questions or suggestions, please feel free to leave a comment.
posterous.sh (run as an hourly cron job):
#!/bin/sh # Copyright 2010 Tim "burndive" of http://burndive.blogspot.com/ # This software is licensed under the Creative Commons GNU GPL version 2.0 or later. # License informattion: http://creativecommons.org/licenses/GPL/2.0/ # This script was obtained from here: # http://tuxbox.blogspot.com/2010/03/posterous-blogger-sidebar-widget.html DOMAIN=$1 FEED_DIR=$2 FEED_TITLE=Posterous FEED_DESC="The purpose of this feed is to provide a thumbnail of the latest item in a Blogger sidebar widget." if [ -z $DOMAIN ]; then echo "You must enter a Posterous DOMAIN." exit fi if [ -z $FEED_DIR ]; then echo "You must supply a directory." exit fi if [ ! -d $FEED_DIR ]; then echo "You must supply a valid directory." exit fi FEED_URL="http://$DOMAIN/rss.xml" TMP_FILE="/tmp/posterous-$DOMAIN.xml" FEED_FILE="$FEED_DIR/posterous-$DOMAIN.xml" # Fetch the RSS feed wget -q $FEED_URL -O $TMP_FILE if [ ! -f $TMP_FILE ]; then echo "Failed to download $FEED_URL to $TMP_FILE" exit fi NEW_LATEST=`grep guid $TMP_FILE | head -n1` if [ ! -f $FEED_FILE ]; then FEED_LATEST="" else FEED_LATEST=`grep guid $FEED_FILE | head -n1` fi # Comment these out #echo "FEED_LATEST: $FEED_LATEST" #echo "NEW_LATEST : $NEW_LATEST" if [ "$FEED_LATEST" = "$NEW_LATEST" ]; then # echo "There is no change in the feed." # echo "FEED_LATEST: $FEED_LATEST" exit fi IMG_HTML=`grep -i "img src" $TMP_FILE | head -n1 | grep -Eo "<img src='[^']*'[^>]*>" | sed -e 's/\"/\"/g' -e 's/</\</g' -e 's/>/\>/g'` #echo "IMG_HTML: $IMG_HTML" IMG_URL=`grep -i "img src" $TMP_FILE | head -n1 | grep -Eo "http:[^']*" | tail -n1` #echo "IMG_URL: $IMG_URL" # Create a minimalist RSS feed echo "<?xml version='1.0'?> " > $FEED_FILE echo "<rss version='2.0' xmlns:media='http://search.yahoo.com/mrss/'>" >> $FEED_FILE echo "<channel>" >> $FEED_FILE echo "<title>$FEED_TITLE</title>" >> $FEED_FILE echo "<description>$FEED_DESC</description>" >> $FEED_FILE echo "<link>http://$DOMAIN/</link>" >> $FEED_FILE echo "<item>" >> $FEED_FILE grep "<title>" $TMP_FILE | head -n2 | tail -n1 >> $FEED_FILE grep "<pubDate>" $TMP_FILE | head -n1 >> $FEED_FILE echo "<description>$IMG_HTML</description>" >> $FEED_FILE grep "<link" $TMP_FILE | head -n3 | tail -n1 >> $FEED_FILE echo "$NEW_LATEST" >> $FEED_FILE echo "<media:thumbnail url=\"$IMG_URL\" height=\"56\" width=\"75\" />" >> $FEED_FILE echo "</item>" >> $FEED_FILE echo "</channel>" >> $FEED_FILE echo "</rss>" >> $FEED_FILE # Cean up rm $TMP_FILE
This software is licensed under the CC-GNU GPL version 2.0 or later.
Update: I went to fix my script because Posterous had changed their feed format, only to find that it now had the yahoo xmlns declaration and the media:thumbnail tag. Blogger wasn't recognizing it, so I changed the meat of my script to a single line to strip the media:content container from around the media:thumbnail tag.
ReplyDeleteHere it is:
grep -v "media:content" $TMP_FILE > $FEED_FILE
And that's it. It still doesn't work with video thumbnails, because the feed doesn't provide them.