It just happened today that I wanted to know if I had already published a post with a given title in one of the blogs I publish: http://jes4us.blogspot.com. During translation (I translate the posts from English to Portuguese) I had a feeling that I had already worked on a similar text… well, it turns out I was mistaken!
Instead of going through the extensive list of posts looking one by one I thought why not leverage the power of Google Data API? You may say: why not do a simple Google search instead? Good point. As I like to play with code I couldn’t resist.
So here it is. A simple and faster way of knowing if I have a post with a given title. Bellow you’ll find the codez to both the .NET client API and the Java one.
Blogger Data API for .NET
1 - Download the client library here: http://code.google.com/p/google-gdata/downloads/list
2 - Install the .msi package Google_Data_API_Setup_1.9.0.0.msi.
3 - Create a new Console project and reference the DLL Google.GData.Client that’s in this folder: C:\Google Data API SDK\Redist
using System; using System.Linq; using Google.GData.Client; namespace BlogPostsSearcher { class Program { static void Main(string[] args) { Service bloggeService = AcquireService(); AtomFeed feed = AcquireAndSetupFeed(bloggeService); // Search posts that contain the word "StringToSearchFor" in their titles var query = feed.Entries.Where(p => p.Title.Text.Contains("StringToSearchFor"); // Writes the Blog's Title Console.WriteLine(feed.Title.Text); // Prints each post found... foreach (AtomEntry entry in query) { Console.WriteLine(string.Format("Post Title: {0} - Date Published: {1}", entry.Title.Text, entry.Published.ToShortDateString())); } } private static AtomFeed AcquireAndSetupFeed(Service service) { FeedQuery blogFeedUri = new FeedQuery("http://www.blogger.com/feeds/" + YourBlogID + "/posts/default"); // Setting the number of posts to retrieve blogFeedUri.NumberToRetrieve = 1000; AtomFeed feed = service.Query(blogFeedUri); return feed; } private static Service AcquireService() { Service service = new Service("blogger", "YourCompanyName-BloggerPostsSearcher"); service.Credentials = new GDataCredentials("YourEmailAddress@gmail.com", "YourPassword"); GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory)service.RequestFactory; return service; } } }
Blogger Data API for Java
1 - Download the client library here: http://code.google.com/p/gdata-java-client/downloads/list
2 - Unzip the file http://code.google.com/p/gdata-java-client/downloads/detail?name=gdata-src.java-1.46.0.zip
3 - Create a new Java Project and add references to:
- gdata-client-1.0.jar that’s in this path: gdata/java/lib/
- google-collect-1.0-rc1 that’s in this path: gdata/java/deps/
import java.io.IOException; import java.net.URL; import java.util.List; import com.google.gdata.client.GoogleService; import com.google.gdata.data.Entry; import com.google.gdata.data.Feed; import com.google.gdata.util.AuthenticationException; import com.google.gdata.util.ServiceException; /** * @author Leniel Macaferi * @date 11-21-2011 */ public class BloggerClient
{ public static void main(String[] args) throws IOException, ServiceException { try { GoogleService bloggerService = new GoogleService("blogger", "YourCompanyName-BloggerPostsSearcher"); bloggerService.setUserCredentials("YourEmailAddress@gmail.com", "YourPassword"); searchPosts(bloggerService, "YourBlogID", "StringToSearchFor"); } catch (AuthenticationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void searchPosts(GoogleService myService, String blogId, String search) throws ServiceException, IOException { // Request the feed URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogId + "/posts/default"); Feed resultFeed = myService.getFeed(feedUrl, Feed.class); // Setting the number of posts to retrieve... resultFeed.setTotalResults(1000); List<Entry> posts = resultFeed.getEntries(); // Print the results System.out.println(resultFeed.getTitle().getPlainText()); for (Entry post : posts) { if(post.getTitle().getPlainText().contains(search)) { System.out.println("\t" + post.getTitle().getPlainText()); } } System.out.println(); } }
In the code above you need to replace accordingly the following parts:
- YourEmailAddress
- YourPassword
- YourBlogID
References
Blogger Client Libraries and Sample Code