我试图从oauth2(仅针对应用程序的身份验证)从twitter获取用户时间轴,但结果始终为空.我没有OAUTH的经验,我已经看了几个教程和例子,但迄今没有运气.我需要在没有用户需要登录的情况下检索特定的用户时间表(在本例中为Twitter).

我有一个应用程序使用twitter API 1,我试图使我的现有代码适应新的API 1.1与oauth2应用程序唯一auth.所以代码应该工作,除了它没有从Twitter收到任何东西.如果我得到一个结果,那么它应该再次工作.

与Twitter的连接在asyncop下的函数twitterconnect中进行.

这是我的代码:

public class Twitteractivity extends Activity {

private ConfigurationBuilder builder;

// twitter consumer key and secret
static String TWITTER_CONSUMER_KEY = "**************";
static String TWITTER_CONSUMER_SECRET = "*************";

// twitter acces token and accestokensecret
static String TWITTER_ACCES_TOKEN = "************";
static String TWITTER_ACCES_TOKEN_SECRET = "************";

ArrayList<Tweet> tweets = new ArrayList<Tweet>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.twitter);

    new Asyncop().execute("test");

}

 //Async class... 
  public class Asyncop extends AsyncTask<String,Void,List<twitter4j.Status>> {

  protected List<twitter4j.Status> doInBackground(String... urls) {

  //auth with twitter  
      List<twitter4j.Status> statuses = null;
        try {
            Twitter twitter=twitterConnect();

            statuses = twitter.getUserTimeline("Twitter");

            return statuses;
        } catch (Exception ex) {

            Log.d("Main.displayTimeline","" + ex.getMessage());
        }
        return statuses;
  }


  protected void onPostExecute(List<twitter4j.Status> statuses) {

  try {

  String TWITTER="EEE MMM dd HH:mm:ss ZZZZZ yyyy"; SimpleDateFormat sf=new
  SimpleDateFormat(TWITTER,Locale.ENGLISH); sf.setLenient(true);

  for(int i=0;i<statuses.size();i++){

  twitter4j.Status stat = statuses.get(i); 
  User user=stat.getUser(); 
  Date datePosted=stat.getCreatedAt();
  String text=stat.getText();
  String name=user.getName();
  String profile_image_url=user.getProfileImageURL();
  Tweet t =new Tweet(datePosted,text,name,profile_image_url,twitterHumanFriendlyDate(datePosted));

  tweets.add(t);
  // logcat info
  Log.i("date",datePosted.toString());
  Log.i("text",text);
  Log.i("user",name);
  Log.i("userprofilepic",profile_image_url); 
  Log.i("timeofpost",twitterHumanFriendlyDate(datePosted));
  } 

  ListView listView = (ListView) findViewById(R.id.ListViewId);
  listView.setAdapter(new UserItemAdapter(Twitteractivity.this,R.layout.listitem,tweets)); 
  ProgressBar bar=(ProgressBar) findViewById(R.id.progressBar1); 
  bar.setVisibility(View.GONE); 
  } catch
  (Exception e) { e.printstacktrace(); } }

 }

public class UserItemAdapter extends ArrayAdapter<Tweet> {
    private ArrayList<Tweet> tweets;

    public UserItemAdapter(Context context,int textViewResourceId,ArrayList<Tweet> tweets) {
        super(context,textViewResourceId,tweets);
        this.tweets = tweets;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.listitem,null);
        }

        Tweet tweet = tweets.get(position);
        if (tweet != null) {
            TextView username = (TextView) v.findViewById(R.id.username);
            TextView message = (TextView) v.findViewById(R.id.message);
            ImageView image = (ImageView) v.findViewById(R.id.avatar);
            TextView date = (TextView) v.findViewById(R.id.date);
            if (username != null) {
                username.setText(tweet.username);
            }

            if (message != null) {
                message.setText(tweet.message);
            }

            if (image != null) {
                image.setimageBitmap(getBitmap(tweet.image_url));
            }

            if (date != null) {
                date.setText(tweet.hfdate);

            }
        }
        return v;
    }
}

public Bitmap getBitmap(String bitmapUrl) {
    try {
        URL url = new URL(bitmapUrl);
        return BitmapFactory.decodeStream(url.openConnection()
                .getInputStream());
    } catch (Exception ex) {
        return null;
    }
}


// build twitter

public Twitter twitterConnect() throws Exception
{

    // setup
    builder.setoAuthConsumerKey(TWITTER_CONSUMER_KEY).setoAuthConsumerSecret(TWITTER_CONSUMER_SECRET);
    OAuth2Token token = new TwitterFactory(builder.build()).getInstance().getoAuth2Token();


 // exercise & verify
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setUseSSL(true);
    cb.setApplicationOnlyAuthEnabled(true);

    Twitter twitter = new TwitterFactory(cb.build()).getInstance();

    twitter.setoAuthConsumer(TWITTER_CONSUMER_KEY,TWITTER_CONSUMER_SECRET);
    twitter.setoAuth2Token(token);

    return twitter;
}

public String twitterHumanFriendlyDate(Date dateCreated) {
    // parse Twitter date
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "EEE MMM dd HH:mm:ss ZZZZZ yyyy",Locale.ENGLISH);
    dateFormat.setLenient(false);
    Date created = dateCreated;

    // today
    Date today = new Date();

    // how much time since (ms)
    Long duration = today.getTime() - created.getTime();

    long second = 1000;
    long minute = second * 60;
    long hour = minute * 60;
    long day = hour * 24;

    if (duration < second * 7) {
        return "right Now";
    }

    if (duration < minute) {
        int n = (int) Math.floor(duration / second);
        return n + " seconds ago";
    }

    if (duration < minute * 2) {
        return "about 1 minute ago";
    }

    if (duration < hour) {
        int n = (int) Math.floor(duration / minute);
        return n + " minutes ago";
    }

    if (duration < hour * 2) {
        return "about 1 hour ago";
    }

    if (duration < day) {
        int n = (int) Math.floor(duration / hour);
        return n + " hours ago";
    }
    if (duration > day && duration < day * 2) {
        return "yesterday";
    }

    if (duration < day * 365) {
        int n = (int) Math.floor(duration / day);
        return n + " days ago";
    } else {
        return "over a year ago";
    }
}

}

我的问题是否是oauth方法?或者说getusertimeline?
如果任何人有一些示例代码或教程oauth2与twitter4j,将不胜感激

解决方法

经过漫长的一天寻找问题,我找到了一个解决方案.我仍然不确定这可以为多个用户同时工作.但是当我测试它,我得到了我指定的用户的最后一个tweet.

我删除了connecttwitter功能,并在DoInBackground中声明了我的asynctask的Twitter对象.要获得Oauth2身份验证,您需要获取一个承载令牌.这是由您的消费者密钥和秘密(所以这个HAS设置在您的twitter对象上)这里是更改的代码(代码从我的connecttwitter到doinbackground的异步任务)与一些修改

ConfigurationBuilder builder=new ConfigurationBuilder();
            builder.setUseSSL(true);
            builder.setApplicationOnlyAuthEnabled(true);

            // setup
            Twitter twitter = new TwitterFactory(builder.build()).getInstance();

            // exercise & verify
            twitter.setoAuthConsumer(TWITTER_CONSUMER_KEY,TWITTER_CONSUMER_SECRET);
           // OAuth2Token token = twitter.getoAuth2Token();
            twitter.getoAuth2Token();
    statuses = twitter.getUserTimeline("Twitter");

twitter应用程序只认证java android与twitter4j的更多相关文章

  1. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  2. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  3. ios – 通过Fabric安装的Twitter,登录工作,请求推文的持久性错误

    我没有想法.解决方法当你请求推文时,我想你的代码如下所示,对吗?原来他们的文档不完整,应该是这样的客户端对象需要您的用户信息来完成它的工作.我遇到过同样的问题.

  4. 如何在IOS中以编程方式创建TTTAttributedLabel对齐中心

    我正在开发一个应用程序,其中我有一个字符串,其中包含前缀为#的标签.我正在使用TTTAttribute标签添加指向给定字符串中具有前缀#的单词的链接.当我添加到TTTAttribute标签的链接时.它成功添加,当点击它时,我能够在该字符串中获得具有前缀#的所选单词.但我无法根据字符串长度对齐TTTAttribute标签的中心.默认属性attributedLabel.verticalAlignmen

  5. 我可以在iOS中自定义Twitter工具包的登录按钮吗?

    我已经下载了Twitter工具包框架并添加了用Twitter登录的代码.但是,我不希望登录按钮看起来像那样.我想要一个用于登录的自定义按钮.我能这样做吗?我只想使用这个框架,因为这也适用于iOS系统帐户.解决方法根据document:在按下按钮中添加代码:Objective-C的迅速

  6. iOS在社交网络上分享图片

    我的应用程序让用户拍摄照片,并在保存前添加叠加层.我想让用户使用任何能够处理图像的应用程序(即电子邮件,Facebook,Twitter等)分享他的照片,就像Android上的Intent一样.我试图使用UIDocumentController,但它并不像官方的画廊那样显示Facebook或Twitter.这也使得我的应用程序在拍摄第二张照片后崩溃.有没有简单的方法呢?我不会使用FacebookS

  7. iOS 5.1模拟器Twitter登录问题

    我开始开发一些应用程序惠普Twitter整合,但是当尝试登录Twitter…

  8. 无法使用iOS 7.1中的UIActivityViewController在Facebook和Twitter上共享URL

    我正在使用UIActivityViewController进行分享按钮.当我从列表中选择邮件选项时它显示文本和网址但是当我选择Facebook或Twitter时它只显示文本而不是网址.我搜索了很多但没有得到我的问题的解决方案.我得到了在url中添加“http”的另一个解决方案,但这可能不在url中添加http.我的代码是–解决方法我相信这个链接确实没有显示出来.但是,当您发布它时,该链接将添加到您

  9. 通过iOS App在Twitter上分享视频

    是否可以使用SLRequest共享视频?

  10. 使用 Parse 是一个糟糕的主意

    Parse是一个后端云服务,前不久刚刚被Facebook收购。我保证之后会继续讨论Parse和Facebook,Meerkat的故事也是发生在同样的背景下,所以稍稍忍耐一下吧。在2015年,赢家是一个名为Meerkat的项目。Twitter关闭了Meerkat,因为Twitter自己开发了一个应用叫Periscope,是Meerkat的竞争对手,我拒绝给出链接。当我看到Parse的免费使用范围如何巨大时,我特别担心。说白了,Parse后端基于javascript,和NodeJS在表达上还是有一些相似的

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部