package weiboclient4j.examples;
import static java.util.Arrays.asList;
import weiboclient4j.AccountService;
import weiboclient4j.CommentService;
import weiboclient4j.StatusService;
import weiboclient4j.WeiboClient;
import weiboclient4j.WeiboClientException;
import weiboclient4j.model.Comment;
import weiboclient4j.model.CommentList;
import weiboclient4j.model.Status;
import weiboclient4j.model.Timeline;
import weiboclient4j.model.TimelineIds;
import weiboclient4j.oauth2.DisplayType;
import weiboclient4j.oauth2.ResponseType;
import weiboclient4j.oauth2.SinaWeibo2AccessToken;
import weiboclient4j.params.BaseApp;
import weiboclient4j.params.Cid;
import static weiboclient4j.params.CoreParameters.cid;
import static weiboclient4j.params.CoreParameters.id;
import static weiboclient4j.params.CoreParameters.mid;
import static weiboclient4j.params.CoreParameters.uid;
import weiboclient4j.params.Feature;
import weiboclient4j.params.Id;
import weiboclient4j.params.IsBase62;
import weiboclient4j.params.Mid;
import weiboclient4j.params.MidType;
import weiboclient4j.params.Paging;
import weiboclient4j.params.ScreenName;
import weiboclient4j.params.TrimUser;
import weiboclient4j.params.Uid;
import static weiboclient4j.utils.JsonUtils.writeObjectAsString;
import static weiboclient4j.utils.StringUtils.isBlank;
import static weiboclient4j.utils.StringUtils.isNotBlank;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Map;
import java.util.prefs.Preferences;
/**
* @author Hover Ruan
*/
public class OAuth2CommandLine {
public static final String API_KEY = "api_key";
public static final String API_SECRET = "api_secret";
private static final long STATUS_ID = 3436240135184587L;
private static final long ANOTHER_STATUS_ID = 3436255091659029L;
private static final long UID = 1834561765L;
private WeiboClient client;
private BufferedReader in;
private Status justPostStatus;
public OAuth2CommandLine(BufferedReader in) {
this.in = in;
}
public static void main(String[] args) throws Exception {
Preferences pref = Preferences.userRoot().node("/weiboclient4j/example/oauth2");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String savedKey = pref.get(API_KEY, "");
String defaultKey = isBlank(savedKey) ? "" : " [" + savedKey + "] ";
System.out.print("Input client id (api key)" + defaultKey + ": ");
String apiKey = in.readLine();
if (isNotBlank(apiKey)) {
pref.put(API_KEY, apiKey);
} else if (isNotBlank(savedKey)) {
apiKey = savedKey;
}
String savedSecret = pref.get(API_SECRET, "");
String defaultSecret = isBlank(savedSecret) ? "" : " [" + savedSecret + "] ";
System.out.print("Input client secret (api secret)" + defaultSecret + ": ");
String apiSecret = in.readLine();
if (isNotBlank(apiSecret)) {
pref.put(API_SECRET, apiSecret);
} else if (isNotBlank(savedSecret)) {
apiSecret = savedSecret;
}
WeiboClient client = new WeiboClient(apiKey, apiSecret);
OAuth2CommandLine cmd = new OAuth2CommandLine(in);
cmd.setClient(client);
cmd.retrieveAccessToken();
cmd.retrieveAccountUid();
cmd.retrievePublicTimeline();
cmd.retrieveFriendsTimeline();
cmd.retrieveHomeTimeline();
cmd.retrieveUserTimeline();
cmd.retrieveOtherTimeline();
cmd.retrieveIds();
cmd.updateStatus();
cmd.retrieveAndUpdateComments();
}
public void setClient(WeiboClient client) {
this.client = client;
}
private void retrieveAndUpdateComments() throws WeiboClientException, IOException {
StatusService statusService = client.getStatusService();
CommentService commentService = client.getCommentService();
commentService.getComments(id(STATUS_ID));
CommentList commentsByMe = commentService.getCommentsByMe();
long firstCommentId = commentsByMe.getComments().get(0).getId();
commentService.getCommentsToMe();
commentService.getCommentsTimeline();
commentService.getMentionsComments();
List<Cid> batchCids = asList(cid(firstCommentId));
commentService.getCommentsBatch(batchCids);
Comment comment = commentService.createComment(id(justPostStatus.getId()), "Create comment test");
Comment reply = commentService.replyComment(
id(justPostStatus.getId()),
cid(comment.getId()),
"Reply test");
commentService.destroyComment(cid(comment.getId()));
commentService.destroyComment(cid(reply.getId()));
statusService.destroy(id(justPostStatus.getId()));
}
private void updateStatus() throws WeiboClientException, IOException {
StatusService statusService = client.getStatusService();
justPostStatus = statusService.update("Update status api test");
Status repostStatus = statusService.repost(id(justPostStatus.getId()), "Repost test");
System.out.println();
System.out.println("Just post: " + writeObjectAsString(justPostStatus));
System.out.println("Repost: " + writeObjectAsString(repostStatus));
statusService.destroy(id(repostStatus.getId()));
// Need advanced permission
// Status uploadedStatusByImageUrl = statusService.uploadImageUrl("Post image test",
// new URL("https://a248.e.akamai.net/assets.github.com/images/modules/about_page/octocat.png?1306884373")
// );
// statusService.destroy(id(uploadedStatusByImageUrl.getId()));
}
private void retrieveIds() throws WeiboClientException {
StatusService statusService = client.getStatusService();
statusService.show(id(STATUS_ID));
statusService.queryMid(id(STATUS_ID), MidType.Status);
List<Id> idList = asList(id(STATUS_ID), id(ANOTHER_STATUS_ID));
Map<Long, String> midMap = statusService.queryMidList(idList, MidType.Status);
System.out.println();
System.out.println("Mid " + STATUS_ID + "=" + midMap.get(STATUS_ID) + ", "
+ ANOTHER_STATUS_ID + "=" + midMap.get(ANOTHER_STATUS_ID));
statusService.queryId(mid("yfcLPlKKn"), MidType.Message, IsBase62.Yes);
List<Mid> midList = asList(mid("yfcLPlKKn"), mid("yfd9X6XAx"));
Map<String, Long> idMap = statusService.queryIdList(midList, MidType.Message, IsBase62.Yes);
System.out.println();
System.out.println("Id yfcLPlKKn=" + idMap.get("yfcLPlKKn") + ", yfd9X6XAx=" + idMap.get("yfd9X6XAx"));
statusService.getStatusesCounts(idList);
}
private void retrieveOtherTimeline() throws WeiboClientException {
StatusService statusService = client.getStatusService();
statusService.getRepostTimeline(id(STATUS_ID));
statusService.getRepostTimelineIds(id(STATUS_ID));
statusService.getRepostByMe();
statusService.getMentions();
statusService.getMentionsIds();
statusService.getBilateralTimeline();
}
private void retrieveUserTimeline() throws WeiboClientException, IOException {
StatusService statusService = client.getStatusService();
Timeline userTimeline = statusService.getUserTimeline();
System.out.println();
System.out.println("User timeline: " + writeObjectAsString(userTimeline));
Timeline userTimelineTrimUser = statusService.getUserTimeline(TrimUser.No);
System.out.println();
System.out.println("User timeline that trim user: " + writeObjectAsString(userTimelineTrimUser));
statusService.getUserTimeline(ScreenName.EMPTY);
statusService.getUserTimeline(Uid.EMPTY);
statusService.getUserTimeline(Paging.EMPTY, TrimUser.Yes);
Timeline userTimelineFor1834561765 = statusService.getUserTimeline(
uid(UID), BaseApp.No, Feature.All, TrimUser.No);
System.out.println();
System.out.println("User timeline for 1834561765: " + writeObjectAsString(userTimelineFor1834561765));
statusService.getUserTimelineIds(ScreenName.EMPTY);
statusService.getUserTimelineIds(Uid.EMPTY);
statusService.getUserTimelineIds();
}
private void retrieveHomeTimeline() throws IOException, WeiboClientException {
StatusService statusService = client.getStatusService();
Timeline homeTimeline = statusService.getHomeTimeline();
System.out.println();
System.out.println("Home timeline: " + writeObjectAsString(homeTimeline));
}
private void retrieveFriendsTimeline() throws WeiboClientException, IOException {
StatusService statusService = client.getStatusService();
Timeline friendsTimeline = statusService.getFriendsTimeline();
System.out.println();
System.out.println("Friends timeline: " + writeObjectAsString(friendsTimeline));
TimelineIds friendsTimelineIds = statusService.getFriendsTimelineIds();
System.out.println();
System.out.println("Friends timeline ids: " + writeObjectAsString(friendsTimelineIds));
}
private void retrievePublicTimeline() throws WeiboClientException, IOException {
StatusService statusService = client.getStatusService();
Timeline publicTimeline = statusService.getPublicTimeline();
System.out.println();
System.out.println("Public timeline: " + writeObjectAsString(publicTimeline));
}
private void retrieveAccountUid() throws WeiboClientException {
AccountService accountService = client.getAccountService();
long uid = accountService.getUid();
System.out.println();
System.out.println("Got account uid: " + uid);
}
private void retrieveAccessToken() throws IOException, WeiboClientException {
String state = "__MY_STATE__";
String authorizationCallback = "http://demo.localhost.weiboclient4j.org/callback";
String url = client.getAuthorizationUrl(ResponseType.Code, DisplayType.Default, state, authorizationCallback);
System.out.println("Please visit: " + url);
System.out.print("Input code: ");
String code = in.readLine();
String accessTokenCallback = "http://demo.localhost.weiboclient4j.org/callback";
SinaWeibo2AccessToken accessToken = client.getAccessTokenByCode(code, accessTokenCallback);
System.out.println();
System.out.println("Access token: " + accessToken.getToken());
System.out.println("Uid: " + accessToken.getUid());
System.out.println("Expires in: " + accessToken.getExpiresIn());
System.out.println("Remind in: " + accessToken.getRemindIn());
accessToken = new SinaWeibo2AccessToken(accessToken.getToken());
client.setAccessToken(accessToken);
}
}