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)
问题是您多次设置消费者秘密和令牌,如异常所示:
java.lang.IllegalStateException:消费者密钥/秘密对已设置。
发生这种情况是因为TwitterFactory.getInstance()返回了 的单例Twitter,然后每次向您的 Servlet 发出请求时都会对其进行调用setOAuthConsumer。setOAuthAccessToken
您需要确保仅配置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为您返回一个缓存的、经过身份验证的实例。
| 归档时间: |
|
| 查看次数: |
20738 次 |
| 最近记录: |