ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何使用twitter API 1.1和java搜索推文

2019-05-17 15:51:56  阅读:362  来源: 互联网

标签:java twitter twitter4j


Twitter API已从1.0更改为1.1.现在,对于任何类型的查询,都必须进行授权.我正在使用java来获取推文.任何人都可以给我一些使用OAuth身份验证获取推文的java示例.

更新

使用twitter4j api是可能的. http://twitter4j.org/en/.下面给出一个例子

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

    AccessToken accessToken = new AccessToken("Your-Access-Token", "Your-Access-Token-Secret");
    twitter.setOAuthConsumer("Consumer-Key", "Consumer-Key-Secret");
    twitter.setOAuthAccessToken(accessToken);

    try {
        Query query = new Query("#IPL");
        QueryResult result;
        result = twitter.search(query);
        List<Status> tweets = result.getTweets();
        for (Status tweet : tweets) {
            System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText());
        }
    }
    catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to search tweets: " + te.getMessage());
        System.exit(-1);
    }

这里有问题

当我作为Java类运行时,此示例独立工作.但是当我在JSP中添加此代码以便在webapp中进行测试时,它无法正常工作.它向我显示以下异常

    SEVERE: Servlet.service() for servlet [jsp] in context with path [/mypub] threw exception [java.lang.IllegalStateException: consumer key/secret pair already set.] with root cause
    java.lang.IllegalStateException: consumer key/secret pair already set.
        at twitter4j.TwitterBaseImpl.setOAuthConsumer(TwitterBaseImpl.java:264)
        at com.me.framework.tag.core.TweetFetch.doTag(TweetFetch.java:50)
        at org.apache.jsp.template.test_jsp._jspx_meth_wf_002dcore_005ftweetFetch_005f0(test_jsp.java:100)
        at org.apache.jsp.template.test_jsp._jspService(test_jsp.java:74)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

解决方法:

问题是您正在多次设置使用者密钥和令牌,如异常所示:

java.lang.IllegalStateException: consumer key/secret pair already set.

它正在发生,因为TwitterFactory.getInstance()正在返回Twitter的单例,然后每次向Servlet发出请求时都会调用setOAuthConsumer和setOAuthAccessToken.

您需要确保只配置一次Twitter实例,而不是每次请求时都配置.

实现这一目标的一种方法是通过使用TwitterFactory.getInstance(AccessToken)要求TwitterFactory为您提供经过身份验证的Twitter实例:

final AccessToken accessToken = new AccessToken("Your-Access-Token", "Your-Access-Token-Secret");
final Twitter twitter = TwitterFactory.getInstance(token);
...

这种工厂方法的另一个好处是它可以为您返回一个缓存的,经过身份验证的Twitter实例.

标签:java,twitter,twitter4j
来源: https://codeday.me/bug/20190517/1122182.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有