package com.xiaozhi.blog.web.others.sina;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.tianji.test.core.redis.LoginHelper;
import com.xiaozhi.blog.mongo.MongoUserDao;
import com.xiaozhi.blog.vo.SinaAccessToken;
import weibo4j.Friendships;
import weibo4j.model.Paging;
import weibo4j.model.User;
import weibo4j.model.UserWapper;
import weibo4j.model.WeiboException;
@Controller
@RequestMapping("/blog/sina/follow")
public class SinaFollowersController {
private static Log logger = LogFactory.getLog(SinaFollowersController.class);
@Autowired
private Friendships friendships;
@Autowired
private MongoUserDao retwis;
/**
* 粉丝管理列表首页
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "followers", method = RequestMethod.GET)
public String followers(@RequestParam(required = false,defaultValue="1") Integer page,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
UserWapper users = friendships.getFollowersById(accessToken.getUserid(), 10, (page-1)*10);
List<String> uids = Arrays.asList(friendships.getFriendsBilateralIds(accessToken.getUserid()));//获取互粉用户id
for(User user : users.getUsers()){
if(uids.contains(user.getId())){
user.setFollowMe(true);//借用此属性做为互粉标志
}else{
user.setFollowMe(false);
}
}
model.addAttribute("users",users);
model.addAttribute("pages", getPages (users.getTotalNumber(),10));
model.addAttribute("page",new Paging(page, 10));
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
if("expired_token".equals(e.getError())){
return "redirect:/bind/sina?callbackUrl=/blog/sina/hometimeline";
}else{
e.printStackTrace();
}
}
return "/blog/sina/fans";
}
/**
* 分页
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "followers/page", method = RequestMethod.GET)
public String followersPage(@RequestParam(required = false,defaultValue="1") Integer page,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
UserWapper users = friendships.getFollowersById(accessToken.getUserid(), 10, (page-1)*10);
List<String> uids = Arrays.asList(friendships.getFriendsBilateralIds(accessToken.getUserid()));//获取互粉用户id
for(User user : users.getUsers()){
if(uids.contains(user.getId())){
user.setFollowMe(true);//借用此属性做为互粉标志
}else{
user.setFollowMe(false);
}
}
model.addAttribute("users",users);
model.addAttribute("pages", getPages (users.getTotalNumber(),10));
model.addAttribute("page",new Paging(page, 10));
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
if("expired_token".equals(e.getError())){
return "redirect:/bind/sina?callbackUrl=/blog/sina/hometimeline";
}else{
e.printStackTrace();
}
}
return "/blog/sina/fanslist";
}
/**
* 关注管理列表首页
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "followings", method = RequestMethod.GET)
public String followings(@RequestParam(required = false,defaultValue="1") Integer page,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
UserWapper users = friendships.getFriendsByID(accessToken.getUserid(), 10, (page-1)*10);
List<String> uids = Arrays.asList(friendships.getFriendsBilateralIds(accessToken.getUserid()));//获取互粉用户id
for(User user : users.getUsers()){
if(uids.contains(user.getId())){
user.setFollowMe(true);//借用此属性做为互粉标志
}else{
user.setFollowMe(false);
}
}
model.addAttribute("users",users);
model.addAttribute("pages", getPages (users.getTotalNumber(),10));
model.addAttribute("page",new Paging(page, 10));
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
if("expired_token".equals(e.getError())){
return "redirect:/bind/sina?callbackUrl=/blog/sina/hometimeline";
}else{
e.printStackTrace();
}
}
return "/blog/sina/followings";
}
/**
* 分页
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "followings/page", method = RequestMethod.GET)
public String followingsPage(@RequestParam(required = false,defaultValue="1") Integer page,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
UserWapper users = friendships.getFriendsByID(accessToken.getUserid(), 10, (page-1)*10);
List<String> uids = Arrays.asList(friendships.getFriendsBilateralIds(accessToken.getUserid()));//获取互粉用户id
for(User user : users.getUsers()){
if(uids.contains(user.getId())){
user.setFollowMe(true);//借用此属性做为互粉标志
}else{
user.setFollowMe(false);
}
}
model.addAttribute("users",users);
model.addAttribute("pages", getPages (users.getTotalNumber(),10));
model.addAttribute("page",new Paging(page, 10));
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
if("expired_token".equals(e.getError())){
return "redirect:/bind/sina?callbackUrl=/blog/sina/hometimeline";
}else{
e.printStackTrace();
}
}
return "/blog/sina/followinglist";
}
/**
* 取消关注
* @param id
* @param model
* @return
*/
@RequestMapping(value = "stopfollowing/{id}", method = RequestMethod.GET)
public @ResponseBody boolean stopfollowing(@PathVariable String id,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
User user = friendships.destroyFriendshipsDestroyById(id);
return true;
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
e.printStackTrace();
}
return false;
}
/**
* 加关注
* @param id
* @param model
* @return
*/
@RequestMapping(value = "following/{id}", method = RequestMethod.GET)
public @ResponseBody boolean following(@PathVariable String id,Model model) {
SinaAccessToken accessToken = (SinaAccessToken)retwis.getAccessTokenByUser(LoginHelper.getUserId());
friendships.client.setToken(accessToken.getAccesstoken());
try {
User user = friendships.createFriendshipsById(id);
return true;
} catch (WeiboException e) {
logger.debug("--------------------------->error :"+e.getError());
e.printStackTrace();
}
return false;
}
private long getPages (long totalNumber,long pagesize){
long pages = totalNumber % pagesize;
if (pages == 0)
pages = totalNumber / pagesize;
else
pages = totalNumber / pagesize + 1;
return pages;
}
}