Question

I'm trying to upload a post to my Blogger blog, yet I'm having an error. I'm using Eclipse and the libraries referesed are: google-oauth-java-client-1.17.0-rc and gdata-src.java-1.47.1.

Code:

import com.google.gdata.client.GoogleService;
import com.google.gdata.data.Entry;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.util.ServiceException;
import java.io.IOException;
import java.net.URL;

public class Blogger {
    public static void createPost(GoogleService myService) throws ServiceException, IOException {
         // Create the entry to insert
        Entry myEntry = new Entry();
        // POST Title
        myEntry.setTitle(new PlainTextConstruct("INDIA DEFEATED PAKISTAN "));
        // Post description
        myEntry.setContent(new PlainTextConstruct("INDIA Defeated pakistan in only 4 seconds . Hindustan Jindabad "));
        // Blogger URL
        URL postUrl = new URL("http://www.myblogspotsite.com/");
        myService.insert(postUrl, myEntry);
    }

    public static void main(String ar[]) throws ServiceException, IOException {
        //creating Google service required to access and update Blogger post
        GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
        myService.setUserCredentials("MY_GMAIL", "MY_PASSWORD");
        createPost(myService);
    }
}

Error:

Exception in thread "main" com.google.gdata.util.ServiceException: Method Not Allowed
<HTML>
<HEAD>
<TITLE>Method Not Allowed</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Method Not Allowed</H1>
<H2>Error 405</H2>
</BODY>
</HTML>

    at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:632)
    at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
    at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
    at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
    at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
    at com.google.gdata.client.Service.insert(Service.java:1409)
    at com.google.gdata.client.GoogleService.insert(GoogleService.java:613)
    at Blogger.createPost(Blogger.java:27)
    at Blogger.main(Blogger.java:35)
Was it helpful?

Solution

The URL you are using to post, is not correct, the url should have the Blog Id,the format of the url is:

http://www.blogger.com/feeds/BLOG_ID/posts/default

So in java, you can do this as follows:

        GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
        myService.setUserCredentials("EMAIL", "PWD");
        Entry myEntry = new Entry();
        myEntry.setTitle(new PlainTextConstruct("TITLE post update"));
        myEntry.setContent(new PlainTextConstruct("STATUS POST"));
        URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
        Feed resultFeed = myService.getFeed(feedUrl, Feed.class);
        String blog_name = "blog_name"; //the name of the blog where you want to post status
        String BLOG_ID = "";
        for (int i = 0; i < resultFeed.getEntries().size(); i++) {
            Entry entry = resultFeed.getEntries().get(i);
            if (entry.getTitle().getPlainText().equalsIgnoreCase(blog_name)) {
                String[] split = entry.getId().split("-");
                BLOG_ID = split[split.length - 1];
            }
            System.out.println("Posting to:" + " " + "Blog id: " + BLOG_ID + " " + "Blog name: " + blog_name);
        }
        URL postUrl = new URL("http://www.blogger.com/feeds/" + BLOG_ID + "/posts/default");
        Entry insert = myService.insert(postUrl, myEntry);
        System.out.println(insert.getHtmlLink().getHref());
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top