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

MAK*_*pon 5 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);
    }
Run Code Online (Sandbox Code Playgroud)

这里有问题

当我作为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)
Run Code Online (Sandbox Code Playgroud)

Jon*_*han 4

问题是您多次设置消费者秘密和令牌,如异常所示:

java.lang.IllegalStateException:消费者密钥/秘密对已设置。

发生这种情况是因为TwitterFactory.getInstance()返回了 的单例Twitter,然后每次向您的 Servlet 发出请求时都会对其进行调用setOAuthConsumersetOAuthAccessToken

您需要确保仅配置Twitter一次实例,而不是每次发出请求时都配置实例。

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

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

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