2011年2月27日日曜日

AppEngineとBloggerをくっつける・その2

Blogに投稿したりデータを取得するためにはBlogIDが必要。

とりあえず、まずはBlogの一覧を表すEntryをあらわすメソッドを作成。
 /**
  * Blog一覧を取得
  * @return
  * @throws IOException
  * @throws ServiceException
  */
 public Map getBlogMap() throws IOException, ServiceException{
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = service.getFeed(feedUrl, Feed.class);

  Map blogMap = new HashMap();
  // Print the results
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
   Entry entry = resultFeed.getEntries().get(i);
   blogMap.put(entry.getTitle().getPlainText(), entry);
  }
  return blogMap;
 }
これで、Blog名をキーとしてBlogのEntryを取得できる。
ここからBlogIDを取得するメソッドは以下のとおり。
protected String toBlogId(Entry entry){
 Matcher m = Pattern.compile("blog-(.\\d+)$").matcher(entry.getId());
 if(m.find()){
  return m.group(1);
 }
 return "";
}
で、このBlogIDを使うとBlogに記事を書いたり、記事を取得したりできる。
 /**
  * 記事の一覧を取得する
  * @param blog
  * @throws ServiceException
  * @throws IOException
  */
 public List getEntryList(Entry blog) throws ServiceException, IOException {
  List entryList = new ArrayList();
  URL feedUrl = new URL("http://www.blogger.com/feeds/"+toBlogId(blog)+"/posts/default");
  Feed resultFeed = service.getFeed(feedUrl, Feed.class);

  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
   Entry entry = resultFeed.getEntries().get(i);
   entryList.add(entry);
  }
  return entryList;
 }

 /**
  * 記事を投稿する
  * 
  * @param blog
  * @param title
  * @param content
  * @throws IOException
  * @throws ServiceException
  */
 public void createPost(Entry blog, String title, String content)
   throws IOException, ServiceException {
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  URL postUrl = new URL("http://www.blogger.com/feeds/"+toBlogId(blog)+"/posts/default");
  service.insert(postUrl, myEntry);
 }
 

0 件のコメント: