Tiwtter4j 授权 推图片

本文介绍如何使用Java和twitter4j库实现图片上传至Twitter的功能。首先申请Twitter API密钥,接着通过OAuth认证获取访问令牌,最后利用这些令牌上传图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司要求做一个东西,点击一个图片,弹出一个框,填好图片信息直接推到twitter上。

这就需要通过第三方应用。我是用Java的,所以用了jar包twitter4j,这个jar包可以在https://dev.twitter.com/docs/twitter-libraries下载。

当然,在做这个之前,你首先要申请一个twitter帐号,然后再申请一个API Key(consumerkey & consumerkeysecret)。

1. 通过http://127.0.0.1:8080/toAuth.action,得到request token, 并跳转到授权页面

private static RequestToken requestToken;
private static Map<String,Object> userMap=new HashMap<String, Object>();

public synchronized void toAuth(){    
  ActionContext actx = ActionContext.getContext();
  HttpServletRequest request = (HttpServletRequest) actx
    .get(ServletActionContext.HTTP_REQUEST);
  User user=(User)request.getSession().getAttribute("loginUser");  String consumerKey="consumerKey";
  String consumerSecret="consumerSecret";
  TwitterFactory tf = new TwitterFactory();
  Twitter twitter=tf.getInstance();
  twitter.setOAuthConsumer(consumerKey, consumerSecret);

  String callbackUrl="http://127.0.0.1:8080/authUser.action
  try {
   requestToken = twitter.getOAuthRequestToken(PropertiesUtil.pps.getProperty("callbackUrl")); //这个callbackUrl必须是一个你能接收的url,
  } catch (TwitterException e1) {
   // TODO Auto-generated catch block
   logger.info("toAuth: "+e1.getMessage());
  }
  String token=requestToken.getToken();
  userMap.put(token, user);
  Map<String,String> rMap=new HashMap<String, String>();
  rMap.put("url", requestToken.getAuthorizationURL());
  try {
   this.setJsonResult(rMap);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   logger.info("toAuth: "+e.getMessage());
  }
  
 }

2. 跳转到授权页面后,会要求你输入twitter用户名和密码,意味着你要给第三方用户授权。然后twitter会返回一个url给你,这个url就是你之前定义的callbackUrl加上一些参数
http://127.0.0.1:8080/authUser.action?oauth_token=xxx&oauth_verifier=yyyyy. 再通过requestToken和oauth_verifier得到accessToken。

consumerkey & consumerkeysecret & accesstoken & accesstokensec就可以推图片了。


 public synchronized void authUser(){
  Map<String,String> para=this.getPara();
  String consumerKey=PropertiesUtil.pps.getProperty("consumerKey");
  String consumerKeySec=PropertiesUtil.pps.getProperty("consumerSecret");
  TwitterFactory tf = new TwitterFactory();
  Twitter twitter=tf.getInstance();
  twitter.setOAuthConsumer(consumerKey, consumerKeySec);
  AccessToken accessToken=null;
  try {
   accessToken=twitter.getOAuthAccessToken(requestToken,para.get("oauth_verifier"));
  
} catch (TwitterException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  User user=(User)userMap.get(requestToken.getToken());
  Map<String,String> rMap=new HashMap<String, String>();
  String info="";
  if(accessToken==null){
   logger.info("authUser: accessToken is null");
   info="try";
  }else{
   user.setConsumerKey(consumerKey);
   user.setConsumerKeySec(consumerKeySec);
   user.setTokenKey(accessToken.getToken());
   user.setTokenKeySec(accessToken.getTokenSecret());
   user.setTwitterUser(accessToken.getScreenName());
   try {
    rMap=this.getAdminService().upUserKey(user);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    logger.info("authUser:"+e.getMessage());
   }
  }

3. 推图片

public void twitterPic() throws Exception{
  Map<String,String> para=this.getPara();
  ActionContext actx = ActionContext.getContext();
  HttpServletRequest request = (HttpServletRequest) actx
    .get(ServletActionContext.HTTP_REQUEST);
  User user=(User)request.getSession().getAttribute("loginUser");
  String consumerKeyStr = user.getConsumerKey();
  String consumerSecretStr = user.getConsumerKeySec();
  String accessTokenStr = user.getTokenKey();
  String accessTokenSecretStr = user.getTokenKeySec();
  
  Map<String,String> rMap=new HashMap<String, String>();
  
  if(null==consumerKeyStr||consumerKeyStr.equals("")||null==consumerSecretStr||consumerSecretStr.equals("")
    ||null==accessTokenStr||accessTokenStr.equals("")||null==accessTokenSecretStr||accessTokenSecretStr.equals("")){
   rMap.put("info", "notAuth");   
  }else{
   String picPath=PropertiesUtil.pps.getProperty("picPath");
   String picInfo=para.get("picInfo")==null?"":para.get("picInfo");
   
   ConfigurationBuilder cb=new ConfigurationBuilder();
   
   cb.setDebugEnabled(true)
    .setOAuthConsumerKey(consumerKeyStr)
    .setOAuthConsumerSecret(consumerSecretStr)
    .setOAuthAccessToken(accessTokenStr)
    .setOAuthAccessTokenSecret(accessTokenSecretStr);
   
   ImageUploadFactory imageFactory=new ImageUploadFactory(cb.build());
   ImageUpload upload=imageFactory.getInstance(MediaProvider.TWITTER);
   File file=new File(picPath+para.get("picname"));
   upload.upload(file, picInfo);
   rMap.put("info", "ok"+user.getTwitterUser());
  }
  this.setJsonResult(rMap);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值