Fetching blogger posts using ajax.
For my showcase webpage, I wanted to show some of my blog posts as a demo. Now getting hold of rss-content is fairly easy in an rss-reader; but as JavaScript objects – not so much.
I came across different pieces and put them together in a solution that gave me a limited number of blog posts as JavaScript objects using ajax and the blogger API.
In the following snippet, I fetch the data using ajax and handle the response building an array of blog posts. Please see my inline comments...
I came across different pieces and put them together in a solution that gave me a limited number of blog posts as JavaScript objects using ajax and the blogger API.
In the following snippet, I fetch the data using ajax and handle the response building an array of blog posts. Please see my inline comments...
var customShapes = []; // First I need a container holding the data in a structured way. As I render the content, I traverse through the array handling each object var blogPosts = []; ... // As the query will change in different scenarios I keep part of the query string as an argument in the function call. loadBlogPostAndRender('alt=json-in-script&start-index=1'); ... ... function loadBlogPostAndRender(posts) { $.ajax({ url: 'http://www.someBloggerBlogUrl/feeds/posts/default?' + posts, // The blog url and the variable specifying the query arguments type: 'get', dataType: "jsonp", // It is VERY important that you use jsonp and not json to get around cross site scripting restrictions success: function (data) { try { var posturl = ""; // Initiating variables var postcontent = ""; var postCat = ""; // Traversing the responce handling each post for (var i = 0; i < data.feed.entry.length; i++) { // Getting the post url for (var j = 0; j < data.feed.entry[i].link.length; j++) { if (data.feed.entry[i].link[j].rel == "alternate") { posturl = data.feed.entry[i].link[j].href; break; } } // Fetch tags from the blog post for (var k = 0; k < data.feed.entry[i].category.length; k++) { postCat = data.feed.entry[i].category[k].term + " "; } // Fetching the content if ("content" in data.feed.entry[i]) { postcontent = data.feed.entry[i].content.$t; } else if ("summary" in data.feed.entry[i]) { postcontent = data.feed.entry[i].summary.$t; } else { postcontent = ""; } // As I want to show any image from the blog post as well, I look for the first image linked up to the blog post. var imgUrl = ""; try { imgUrl = $(data.feed.entry[i].content.$t).find('img:first').attr('src'); } catch (error) { imgUrl = "http://foo.com/missingimage.png"; // If there is no image, I keep a placeholder backup } // As I only need part of the blog post, I use regular expressions to filter the content and substring to limit the length. var re = /<\S[^>]*>/g; postcontent = postcontent.replace(re, ""); //reduce postcontent to 200 characters if (postcontent.length > 200) { postcontent = postcontent.substring(0, 400); } // Getting the title and publication date. var posttitle = data.feed.entry[i].title.$t; var postdate = data.feed.entry[i].published.$t; // I'm done and add the content as an object on to the array. blogPosts.push({ bUrl: posturl, bTitle: posttitle, bContent: postcontent, bDate: postdate, bCategory: postCat, bImgUrl: imgUrl }); } } catch (e) { } }, error: function () { // writeErrorMessage("blogCanvas"); }, complete: function () { // When the request is complete it is time to render the content. listAll(blogPosts); // In order to start the next request with a clean slate, I empty the array. blogPosts = []; } }); } ... ... ...
Comments
Post a Comment