如何使用 twitter API 1.1 和 java 搜索推文 [英] How to search for tweets using twitter API 1.1 and java

查看:45
本文介绍了如何使用 twitter API 1.1 和 java 搜索推文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Twitter API has been changed from 1.0 to 1.1. Now for any type of query it has to be authorized. I am using java for fetching tweets. Can anyone give me some java example of tweet fetching using OAuth authentication.

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

Using twitter4j api it is possible. http://twitter4j.org/en/. An example is given below

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 中进行测试时,它不起作用.它向我显示以下异常

Problems here

This example works independently when I ran as a Java class. But when I add this code in a JSP for testing in webapp it does not work. It shows me following exception

    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)

推荐答案

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

The problem is that you are setting the consumer secret and token multiple times, as indicated by the exception:

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

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

这是因为 TwitterFactory.getInstance() 正在返回 Twitter 的单例,然后在每次发出请求时调用 setOAuthConsumersetOAuthAccessToken你的小服务程序.

It's happening because TwitterFactory.getInstance() is returning a singleton of Twitter, this is then having setOAuthConsumer and setOAuthAccessToken invoked on it each time a request is made to your Servlet.

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

You need to ensure you only configure your Twitter instance once and not each time a request is made.

实现此目的的一种方法是要求 TwitterFactory 使用 TwitterFactory.getInstance(AccessToken):

One way of achieving this is by asking the TwitterFactory to give you an authenticated instance of Twitter by using TwitterFactory.getInstance(AccessToken):

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

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

An added benefit of this factory method is that it may return a cached, authenticated, instance of Twitter for you.

这篇关于如何使用 twitter API 1.1 和 java 搜索推文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆