package com
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import weibo4j.Oauth;
import weibo4j.Timeline;
import weibo4j.Weibo;
import weibo4j.examples.timeline.Upload;
import weibo4j.http.AccessToken;
import weibo4j.http.ImageItem;
import weibo4j.model.Status;
import weibo4j.util.WeiboConfig;
import com.xxx.common.UtilTools;
import com.xxx.frame.util.ApplicationResources;
/**
* @author 暗夜螃蟹
* 微博分享
*/
@SuppressWarnings("serial")
@Scope("prototype")
@Controller("WeiboAction")
public class WeiboAction extends BaseAction {
private static String code; // 登录返回的code
/** 存入session的webcode */
private static final String WEB_ACCESSTOKEN = "WEB_ACCESSTOKEN";
private String total_number="";//微博总用户数
public String token = "";
public String content = "";//发布微博的内容信息
String url="";//需要长链接变短链接的URL
private int count=30;//每页显示数量 默认* 位好友
/**
* 翻页的cursor
*/
private String cursor;//向前翻页为-1向后翻页为1
private int next_cursor=0;//下一页的下标
private int previous_cursor=0;//上一页的下标
private String weibo_url="";
/**
* 获得用户授权token
*/
public String getWeiboToken() {
try {
Oauth oauth = new Oauth();
AccessToken at = oauth.getAccessTokenByCode(code);
token = at.getAccessToken();
setSessionValue(WEB_ACCESSTOKEN, at);
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
/**
* 得到朋友互粉信息
*/
public String getFriendsBilateral(){
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
if (at != null) {
weibo_url=WeiboConfig.getValue("baseURL")+"friendships/bilateral.json?uid="+at.getUid()+"&access_token="+at.getAccessToken();
}
renderJson(returnStr(weibo_url));
return null;
}
/* 得到朋友互粉信息 SDK写法
public String getFriendsBilateral(){
Map<String,Object> map=new HashMap<String,Object>();
List<User> message=new ArrayList<User>();
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
try {
if (at != null) {
Weibo weibo = new Weibo();
weibo.setToken(at.getAccessToken());
Users user=new Users();
user.showUserById(at.getUid());
Friendships friends = new Friendships();
if(cursor!=null&&!cursor.equals("")){
if(cursor.equals("-1")){//向前翻页
next_cursor=next_cursor-count*2;
}else{//向后翻页
next_cursor=next_cursor+count;
}
}
String total=String.valueOf(count);
String page_cursor=String.valueOf(next_cursor);
message=friends.getFriendsBilateral(at.getUid(),page_cursor,total).getUsers();
if(page_cursor!=null&&page_cursor.equals("0")){
page_cursor=String.valueOf(message.size());
}
map.put("User", message);
map.put("next_cursor",page_cursor);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
renderJson(UtilTools.encodeObject2Json(message));
return null;
}
*/
/**
* 获取用户的粉丝列表
*/
public String getFollowersById(){
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
if (at != null) {
if(cursor!=null&&cursor.equals("-1")){
next_cursor=next_cursor-count;
if(next_cursor<0){
next_cursor=0;
}
}
weibo_url=WeiboConfig.getValue("baseURL")+"friendships/followers.json?uid="+at.getUid()+"&count="+count+"&cursor="+next_cursor+"&previous_cursor="+previous_cursor+"&access_token="+at.getAccessToken();
}
renderJson(returnStr(weibo_url));
return null;
}
/**
* 解析URL后返回Json字符串
* @param url
* @return
*/
public String returnStr(String post_url){
Map<String,Object> map=new HashMap<String,Object>();
if(post_url!=null&&!post_url.equals("")){
try {
String returnStr=getBackJson(post_url);
// 字符串转JSON对象
if(returnStr!=null&&!returnStr.equals("")){
map = jsonStrToMap(returnStr);
}
} catch (Exception e) {
System.out.println("error>>>>");
e.printStackTrace();
}
}
return UtilTools.encodeObject2Json(map);
}
/*获取用户的粉丝列表 SDK写法
public String getFollowersById(){
Map<String,Object> map=new HashMap<String,Object>();
List<User> message=new ArrayList<User>();
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
try {
if (at != null) {
Weibo weibo = new Weibo();
weibo.setToken(at.getAccessToken());
Users user=new Users();
user.showUserById(at.getUid());
Friendships friends = new Friendships();
if(cursor!=null&&!cursor.equals("")){
if(cursor.equals("-1")){//向前翻页
next_cursor=next_cursor-count*2;
}else{//向后翻页
next_cursor=next_cursor+count;
}
}
String total=String.valueOf(count);
String page_cursor=String.valueOf(next_cursor);
message=friends.getFollowersById(at.getUid(),page_cursor,total).getUsers();
if(page_cursor!=null&&page_cursor.equals("0")){
page_cursor=String.valueOf(message.size());
}
map.put("User", message);
map.put("next_cursor",page_cursor);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
renderJson(UtilTools.encodeObject2Json(map));
return null;
}*/
/**
* 获取用户的关注列表
* 解URL抓内容
*/
public String getFriendsByID(){
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
if (at != null) {
if(cursor!=null&&cursor.equals("-1")){
next_cursor=next_cursor-count;
if(next_cursor<0){
next_cursor=0;
}
}
weibo_url=WeiboConfig.getValue("baseURL")+"friendships/friends.json?uid="+at.getUid()+"&count="+count+"&cursor="+next_cursor+"&access_token="+at.getAccessToken();
}
renderJson(returnStr(weibo_url));
return null;
}
/*获取用户的关注列表 SDK写法
public String getFriendsByID(){
Map<String,Object> map=new HashMap<String,Object>();
List<User> message=new ArrayList<User>();
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
try {
if (at != null) {
Weibo weibo = new Weibo();
weibo.setToken(at.getAccessToken());
Users user=new Users();
user.showUserById(at.getUid());
Friendships friends = new Friendships();
if(cursor!=null&&!cursor.equals("")){
if(cursor.equals("-1")){//向前翻页
next_cursor=next_cursor-count*2;
}else{//向后翻页
next_cursor=next_cursor+count;
}
}
String total=String.valueOf(count);
String page_cursor=String.valueOf(next_cursor);
message=friends.getFriendsByID(at.getUid(),page_cursor,total).getUsers();
if(page_cursor!=null&&page_cursor.equals("0")){
page_cursor=String.valueOf(message.size());
}
map.put("User", message);
map.put("next_cursor",page_cursor);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
renderJson(UtilTools.encodeObject2Json(message));
return null;
}
*/
/**
* 发布微博
*/
public String sendWeibo() {
String message = "";
try {
if (content != null && !content.equals("")) {
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
if (at != null) {
Weibo weibo = new Weibo();
weibo.setToken(at.getAccessToken());
byte[] img = Upload.readFileImage(ServletActionContext.getServletContext().getRealPath("/")+ApplicationResources.getText("weibo.sharePic"));
ImageItem pic = new ImageItem("pic", img);
String text = java.net.URLEncoder.encode(content, "utf-8");
Timeline tl = new Timeline();
Status status =tl.UploadStatus(text, pic);
// 发布成功
if (null != status) {
message = "{\"success\":\"true\"}";
} else {
message = "{\"success\":\"false\"}";
}
} else {
message = "{\"success\":\"false\"}";
}
} else {
message = "{\"success\":\"false\"}";
}
} catch (Exception e) {
e.printStackTrace();
}
renderJson(message);
return null;
}
/**
* 变文件为字节
* @param file
* @return
*/
public static byte[] getBytesFromFile(File file) {
long length = file.length();
byte[] bytes = new byte[(int) length];
try {
InputStream is = new FileInputStream(file);
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+ file.getName());
}
// Close the input stream and return bytes
is.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
return bytes;
}
/**
* 解析获取短链接
* @param url
* @return
*/
public String getSortURL() {
String returnStr="";
String short_url = "";
AccessToken at = getSessionValue(WEB_ACCESSTOKEN) == null ? null: (AccessToken) getSessionValue(WEB_ACCESSTOKEN);
if (at != null) {
if (url != null && !url.equals("")) {
String urlSource = "https://api.weibo.com/2/short_url/shorten.json?url_long="+ url + "&access_token="+at.getAccessToken();
try {
returnStr=getBackJson(urlSource);
// 字符串转JSON对象
short_url = getURLFromJson(returnStr);
} catch (Exception e) {
System.out.println("error>>>>");
e.printStackTrace();
}
}
}
renderText(short_url);
return null;
}
/**
* Action中动态解析URL返回Json
* 只支持GET请求
*/
private String getBackJson(String url){
StringBuffer htmlBuffer = new StringBuffer();
String returnStr = null;
try {
InputStream inputSource = new URL(url).openStream();
int ch;
while ((ch = inputSource.read()) > -1) {
htmlBuffer.append((char) ch);
}
inputSource.close();
returnStr = new String(htmlBuffer);
returnStr = new String(returnStr.getBytes("ISO8859_1"),"UTF-8");
} catch (Exception e) {
System.out.println("error>>>>");
e.printStackTrace();
}
return returnStr;
}
/**
* JsonString to map
*/
public static Map<String, Object> jsonStrToMap(String jsonStr){
Map<String, Object> map = new HashMap<String, Object>();
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k : json.keySet()){
Object v = json.get(k);
//如果内层还是数组的话,继续解析
if(v instanceof JSONArray){
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Iterator<JSONObject> it = ((JSONArray)v).iterator();
while(it.hasNext()){
JSONObject json2 = it.next();
list.add(jsonStrToMap(json2.toString()));
}
map.put(k.toString(), list);
} else {
map.put(k.toString(), v);
}
}
return map;
}
/**
* 获得返回的JSON数据取短链接
* @param jsonString
* @return
*/
public static String getURLFromJson(String jsonString) {
String str="";
JSONObject jsonObject = JSONObject.fromObject(jsonString);
if(jsonObject.getJSONArray("urls")!=null){
JSONArray arr=jsonObject.getJSONArray("urls");
for(int i=0;i<arr.size();i++){
JSONObject c=arr.getJSONObject(i);
str=String.valueOf(c.get("url_short"));
}
}
return str;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public static String getWebAccesstoken() {
return WEB_ACCESSTOKEN;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getCursor() {
return cursor;
}
public void setCursor(String cursor) {
this.cursor = cursor;
}
public int getNext_cursor() {
return next_cursor;
}
public void setNext_cursor(int nextCursor) {
next_cursor = nextCursor;
}
public String getTotal_number() {
return total_number;
}
public void setTotal_number(String totalNumber) {
total_number = totalNumber;
}
public int getPrevious_cursor() {
return previous_cursor;
}
public void setPrevious_cursor(int previousCursor) {
previous_cursor = previousCursor;
}
}
分享到:
相关推荐
在Java调用新浪微博API时,开发者需要获取到应用的API Key和Secret Key,并通过这些信息获取Access Token,以便后续的API调用。 在"weibo4j-oauth2"这个库中,包含了对OAuth2流程的支持,包括获取请求令牌、授权URL...
c#,新浪微博api接口都有 发布微博,读取微博,评论、朋友微博
php新浪微博转发,发布微博apiSDK,里面有调用范例
1. 新浪微博API研究:了解新浪微博API的功能、限制和调用方式。 2. Java编程基础:复习Java语言的基本概念,学习Java网络编程和JSON数据解析。 3. 系统设计:根据需求设计应用程序的功能模块和界面。 4. 编码实现:...
Java调用新浪微博API接口是Java开发者与社交媒体进行交互的一个常见任务,主要涉及到网络请求、OAuth2.0授权机制以及微博平台提供的各种API服务。这里,我们深入探讨一下这个主题。 首先,`weibo4j-oauth2`这个...
【标题】:“新浪微博API OAuth认证”是一个关于使用OAuth授权机制与新浪微博API进行交互的技术主题。OAuth是一种开放标准,允许用户提供一个令牌,而不是用户名和密码来访问他们存储在特定服务提供者的数据。在微博...
ASP版新浪微博API登录是针对使用Active Server Pages (ASP)技术构建的网站,集成新浪微博登录功能的一种实现方式。这种登录方式允许用户通过他们的新浪微博账号直接登录到你的网站,从而提高用户体验,减少用户注册...
这里提到的是新浪微博API,它是由新浪提供的一个接口,让开发者能够通过编程方式访问和操作新浪微博的数据,例如发布微博、获取用户信息、评论、转发等。 Java是一种广泛使用的面向对象的编程语言,具有跨平台的...
新浪微博API开发Web应用是一项技术性强且充满挑战的任务,它涉及到互联网应用程序与社交媒体平台的深度集成。在这个过程中,开发者需要理解并掌握一系列关键概念和技术,以实现有效的数据交互和功能实现。以下是对...
在“新浪微博API-取消关注”这个主题中,我们将深入探讨如何利用API来批量取消关注,特别是在应对账号被盗后出现的大量恶意关注时,如何进行有效恢复。 首先,我们需要了解的是微博API的基本概念。API(Application...
《基于Java的新浪微博API个人信息提取技术详解》 在当今信息化社会,社交媒体已成为人们获取信息、交流思想的重要平台,其中新浪微博以其庞大的用户基础和丰富的互动功能,吸引了众多开发者进行二次开发。本文将...
本文将深入探讨如何在Android平台上使用新浪提供的API,特别是基于OAuth2.0授权机制的Android版新浪微博API。这个API允许开发者构建应用程序,与微博用户进行互动,包括发布和获取微博信息、管理用户关注关系、获取...
调用新浪微博API的代码整体有五部分,主代码是weibolist.php。通过相关配置,执行完代码之后,就会导出你粉丝所关注的所有人列表、你粉丝的粉丝列表等等。
【快速学习和使用新浪微博API开发WEB应用】 在Web开发中,有时我们需要集成社交媒体的功能,比如微博分享、评论等。新浪微博API提供了这样的接口,允许开发者构建与新浪微博互动的应用。本篇文章将详细讲解如何快速...
本压缩包文件集提供了一个针对毕业设计与课程设计的完整解决方案,旨在指导用户如何使用Java编程语言调用新浪微博API,进行数据的获取与处理。该文件集包含以下几个方面的重要知识点: 首先,了解新浪微博API的基本...
此次毕业设计的研究主题是关于如何利用新浪微博API进行Java编程,这涉及到Web服务接口的调用、Java网络编程技术、以及数据处理等方面的知识。 首先,新浪微博API提供了许多不同类型的数据接口,允许开发者获取用户...
调用新浪微博API的代码整体有五部分,主代码是weibolist.php。通过相关配置,执行完代码之后,就会导出你粉丝所关注的所有人列表、你粉丝的粉丝列表等等。
总的来说,"新浪微博数据调用实例"是一个涵盖API调用、数据处理、文件操作和错误管理等多个方面的综合实践。通过学习和理解这个实例,开发者不仅能掌握如何使用PHP与微博API交互,还能提升在数据处理和网络编程方面...
通过OAuth认证机制进行用户身份验证是使用新浪微博API的前提,开发者需要注册应用并获取相应的App Key和App Secret,这些凭证用于在程序中向新浪微博服务器证明身份,以便合法地调用API。 API的调用通常涉及RESTful...
让用户能够在自己的网站上嵌入和播放新浪微博和秒拍的视频,涉及到的技术点包括但不限于:视频流解析、Flash播放技术、PHP服务器端编程、JavaScript前端开发、跨域资源共享(CORS)以及API接口调用等。使用者需要...