diff --git a/src/js/sina_microblog.js b/src/js/sina_microblog.js
new file mode 100644
index 0000000..18b153b
--- /dev/null
+++ b/src/js/sina_microblog.js
@@ -0,0 +1,122 @@
+const APPKEY = '1350884563';
+const AUTHORIZE_URL = 'https://api.weibo.com/oauth2/authorize';
+const REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
+const SINA_USER_INFO_URL = 'https://api.weibo.com/2/users/show.json';
+const SINA_PHOTO_UPLOAD_URL = 'https://upload.api.weibo.com/2/statuses/upload.json';
+const SINA_LOGOUT_URL = 'https://api.weibo.com/2/account/end_session.json';
+
+var SinaMicroblog = {
+  siteId: 'sina',
+  currentUserId: null,
+  accessTokenCallback: null,
+
+  isRedirectUrl: function() {},
+
+  getAccessToken: function(callback) {
+    SinaMicroblog.accessTokenCallback = callback;
+    var url = AUTHORIZE_URL + '?client_id=' + APPKEY +
+      '&redirect_uri=' + REDIRECT_URL + '&response_type=token';
+    chrome.tabs.create({url: url});
+  },
+  
+  parseAccessToken: function(url) {
+    var result = 'failure';
+    var msgOrUser = 'sina_failed_to_get_access_token';
+    var hash = url.split('#')[1];
+    if (hash && typeof hash == 'string') {
+      var keyValues = hash.split('&');
+      var response = {};
+
+      for (var keyValue, i = 0, l = keyValues.length; i < l; i++) {
+        keyValue = keyValues[i].split('=');
+        response[keyValue[0]] = keyValue[1];
+      }
+
+      if (!response.error && response.access_token && response.uid) {
+        result = 'success';
+        msgOrUser = new User({
+          id: response.uid,
+          accessToken: response.access_token
+        });
+      }
+    }
+
+    SinaMicroblog.accessTokenCallback(result, msgOrUser);
+    SinaMicroblog.accessTokenCallback = null;
+  },
+
+  getUserInfo: function(user, callback) {
+    ajax({
+      url: SINA_USER_INFO_URL,
+      parameters: {
+        access_token: user.accessToken,
+        uid: user.id
+      },
+      success: function(data) {
+        if (callback) {
+          user.name = data.screen_name;
+          callback('success', user);
+        }
+      },
+      status: {
+        others: function(data) {
+          callback('failure', 'failed_to_get_user_info');
+        }
+      }
+    });
+  },
+
+  upload: function(user, caption, imageData, callback) {
+    caption = encodeURIComponent(caption);
+    var params = {
+      access_token: user.accessToken,
+      status: caption
+    };
+    var binaryData = {
+      boundary: MULTIPART_FORMDATA_BOUNDARY,
+      name: 'pic',
+      value: 'test.png',
+      data: imageData,
+      type: 'image/png'
+    };
+    
+    ajax({
+      url: SINA_PHOTO_UPLOAD_URL,
+      parameters: params,
+      multipartData: binaryData,
+      success: function(microblog) {
+        callback('success', microblog.id);
+      },
+      status: {
+        others: function(res) {
+          var message = 'failed_to_upload_image';
+          var errorCode = res.error_code;
+          var invalidAccessTokenCodes = 
+            [21332, 21314, 21315, 21316, 21317, 21319, 21327];
+          if (invalidAccessTokenCodes.indexOf(errorCode) >= 0) {
+            message = 'bad_access_token';
+          }
+          callback('failure', message);
+        }
+      }
+    });
+  },
+
+  getPhotoLink: function(user, microblogId, callback) {
+    var photoLink = 'http://weibo.com/' + user.id + '/profile';
+    callback('success', photoLink);
+  },
+  
+  logout: function(callback) {
+    var params = {source: APPKEY};
+    ajax({
+      url: SINA_LOGOUT_URL,
+      parameters: params,
+      complete: function(statusCode, data) {
+        // Response status 403 means no user signed in
+        if ((statusCode == 200 || statusCode == 403) && callback)
+          callback(data);
+      }
+    });
+  }
+};
\ No newline at end of file
