blob: 18b153b5791c9af0f366edb410e69be6bb22b981 [file] [log] [blame]
avm9996304def3e2016-11-27 22:53:05 +01001const APPKEY = '1350884563';
2const AUTHORIZE_URL = 'https://api.weibo.com/oauth2/authorize';
3const REDIRECT_URL = 'https://api.weibo.com/oauth2/default.html'
4const SINA_USER_INFO_URL = 'https://api.weibo.com/2/users/show.json';
5const SINA_PHOTO_UPLOAD_URL = 'https://upload.api.weibo.com/2/statuses/upload.json';
6const SINA_LOGOUT_URL = 'https://api.weibo.com/2/account/end_session.json';
7
8var SinaMicroblog = {
9 siteId: 'sina',
10 currentUserId: null,
11 accessTokenCallback: null,
12
13 isRedirectUrl: function() {},
14
15 getAccessToken: function(callback) {
16 SinaMicroblog.accessTokenCallback = callback;
17 var url = AUTHORIZE_URL + '?client_id=' + APPKEY +
18 '&redirect_uri=' + REDIRECT_URL + '&response_type=token';
19 chrome.tabs.create({url: url});
20 },
21
22 parseAccessToken: function(url) {
23 var result = 'failure';
24 var msgOrUser = 'sina_failed_to_get_access_token';
25 var hash = url.split('#')[1];
26 if (hash && typeof hash == 'string') {
27 var keyValues = hash.split('&');
28 var response = {};
29
30 for (var keyValue, i = 0, l = keyValues.length; i < l; i++) {
31 keyValue = keyValues[i].split('=');
32 response[keyValue[0]] = keyValue[1];
33 }
34
35 if (!response.error && response.access_token && response.uid) {
36 result = 'success';
37 msgOrUser = new User({
38 id: response.uid,
39 accessToken: response.access_token
40 });
41 }
42 }
43
44 SinaMicroblog.accessTokenCallback(result, msgOrUser);
45 SinaMicroblog.accessTokenCallback = null;
46 },
47
48 getUserInfo: function(user, callback) {
49 ajax({
50 url: SINA_USER_INFO_URL,
51 parameters: {
52 access_token: user.accessToken,
53 uid: user.id
54 },
55 success: function(data) {
56 if (callback) {
57 user.name = data.screen_name;
58 callback('success', user);
59 }
60 },
61 status: {
62 others: function(data) {
63 callback('failure', 'failed_to_get_user_info');
64 }
65 }
66 });
67 },
68
69 upload: function(user, caption, imageData, callback) {
70 caption = encodeURIComponent(caption);
71 var params = {
72 access_token: user.accessToken,
73 status: caption
74 };
75 var binaryData = {
76 boundary: MULTIPART_FORMDATA_BOUNDARY,
77 name: 'pic',
78 value: 'test.png',
79 data: imageData,
80 type: 'image/png'
81 };
82
83 ajax({
84 url: SINA_PHOTO_UPLOAD_URL,
85 parameters: params,
86 multipartData: binaryData,
87 success: function(microblog) {
88 callback('success', microblog.id);
89 },
90 status: {
91 others: function(res) {
92 var message = 'failed_to_upload_image';
93 var errorCode = res.error_code;
94 var invalidAccessTokenCodes =
95 [21332, 21314, 21315, 21316, 21317, 21319, 21327];
96 if (invalidAccessTokenCodes.indexOf(errorCode) >= 0) {
97 message = 'bad_access_token';
98 }
99 callback('failure', message);
100 }
101 }
102 });
103 },
104
105 getPhotoLink: function(user, microblogId, callback) {
106 var photoLink = 'http://weibo.com/' + user.id + '/profile';
107 callback('success', photoLink);
108 },
109
110 logout: function(callback) {
111 var params = {source: APPKEY};
112 ajax({
113 url: SINA_LOGOUT_URL,
114 parameters: params,
115 complete: function(statusCode, data) {
116 // Response status 403 means no user signed in
117 if ((statusCode == 200 || statusCode == 403) && callback)
118 callback(data);
119 }
120 });
121 }
122};