にほ録

作業記録です。

blogger bookmarklet

2009-11-13 13:12:00 | Weblog
以前にblogger.comのgdata APIで作ったブックマークレットが、一昨日突然何もしてないのに動かなくなったが、昨日突然動くようになった。なんだったんだろう?
で、使っているうちに、Tunblrみたいな引用機能がほしくなったので、ちょっと改良してみた。テキストの引用しかできないけど。

これ↓をブックマークに登録し、(Firefox限定。IEは知らん、というか、ちょっと直すだけでいいはず。)
javascript:void%20window.open('https://www.example.com/blogthis.html?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&selection='+encodeURIComponent(document.getSelection()),'blogthis');

これ↓をどこかのサーバに置く。(localhostでも可)
<html>
<head>
<title>blog this page</title>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("gdata", "1.x");
google.setOnLoadCallback(init);
var BLOGGER_AUTH_URL = 'http://www.blogger.com/feeds';
var BLOGGER_LIST_URL = 'http://www.blogger.com/feeds/default/blogs';
var BlogPress =  {
  service: null,
  blogs: [],
  cuurrentBlogNum: 0  // modify this according your blog settings.
};

function el(id) { 
  return document.getElementById(id);
}

function changeStatus(status) {
  el('status').innerHTML = 'Status: ' + status;
};

function loginOrOut() {
  var token = google.accounts.user.checkLogin(BLOGGER_AUTH_URL);
  if(token) {
    google.accounts.user.logout();
    init();
  }
  else {
    google.accounts.user.login(BLOGGER_AUTH_URL);
  }
}

function init() {
  var param = new Array();
  var query = window.location.search.substring(1);
  var params = query.split('&');
  for(var i = 0; i < params.length; i++) {
    var pos = params[i].indexOf('=');
    if(pos > 0) {
      param[params[i].substring(0, pos)] = params[i].substring(pos + 1);
    }
  }
  el('title').value = decodeURIComponent(param['title']);
  el('url').value = decodeURIComponent(param['url']);
  if(undefined != param['selection'] && '' != param['selection']) {
    el('comment').value = '『' + decodeURIComponent(param['selection']) + '』';
  }
  var token = google.accounts.user.checkLogin(BLOGGER_AUTH_URL);
  if(token) {
    el('login').value = "logout";
    BlogPress.service = new google.gdata.blogger.BloggerService('GoogleInc-bloggerOffline-1');
    getBlogs();
    el('submit').disabled = false;
  }
  else {
    el('login').value = "login";
    el('submit').disabled = true;
  }
}

function getBlogs() {
  var query = new google.gdata.blogger.BlogQuery(BLOGGER_LIST_URL);
  BlogPress.service.getBlogFeed(query, handleBlogsFeed, handleError);
}

function handleBlogsFeed(resultsFeedRoot) {
  var blogsFeed = resultsFeedRoot.feed;
  BlogPress.blogs = blogsFeed.getEntries();
  var blog = BlogPress.blogs[BlogPress.cuurrentBlogNum];
  var title = blog.getTitle().getText();
  el('postTo').innerHTML = 'Post to ' + title;
}

function handleError(error) {
  changeStatus(error.cause ? error.cause.statusText : error.message);
};

function submit() {
  var title = el('title').value;
  var link = '<a href="'+el('url').value+'">'+el('url').value+'</a>';
  var content = link + "</br>\n" + el('comment').value;
  var blogPostEntry = new google.gdata.blogger.PostEntry();
  blogPostEntry.setTitle(google.gdata.atom.Text.create(title));
  blogPostEntry.setContent(google.gdata.atom.Text.create(content, 'html'));
  var blog = BlogPress.blogs[BlogPress.cuurrentBlogNum];
  var blogPostHref = blog.getEntryPostLink().getHref();
  BlogPress.service.insertEntry(blogPostHref, blogPostEntry, handleEntryPost, handleError);
}

function handleEntryPost(entryRoot) {
  changeStatus('Successfully added.');
}

</script>
</head>
<body>
<img src="pumpkin_64.png" alt="An image of the same domain is needed somehow." />
<div><input id="login" type="button" value="login" onClick="loginOrOut()" /></div>
<hr>
<div id="postTo"></div>
<div>Title: <input type="text" id="title" size=70 /></div>
<div>URL: <input type="text" id="url" size=70/></div>
<div>Commnet: <br/><textarea id="comment" rows=20 cols=50></textarea></div>
<div><input id="submit" type="button" value="submit" onClick="submit()" /></div>
<div id="status">Not posted yet.</div>
</body>
</html>

最新の画像もっと見る