1

我正在尝试使用 twitter4J 通过处理设置 twitter 搜索。我有最新版本的处理 (2.0) 和最新版本的 twitter4j (3.0.3)。我在运行下面粘贴的代码时遇到错误(除了我 xxx'ed out twitter 特定字符串):“函数 setRpp(int) 不存在”

我在处理论坛中找到了类似的查询:https ://forum.processing.org/topic/twitter4j-for-a-noob

该线程的建议是:尝试找出 twitter4J 以及遇到类似的错误。

你可以切换到 twitter4J 的早期版本——v2.2.5——或者你必须弄清楚从 twitter4j 2.xx 到 3.xx 所做的更改

尝试将“setRpp(1)”更改为“count(1)”。

“推文”也可能不起作用——您可以尝试将其更改为“状态”。


当我切换 setRpp > count 和 Tweet > Status 时,处理似乎找不到函数,“getFromUser”错误:函数 getFromUser() 不存在

我假设 getFromUser 是 Tweet 类的一个函数,并且因为我将类从 Tweet 更改为 Status,处理无法再找到该函数。

有没有其他人遇到过这些问题?请告诉我,谢谢!

一个

我的代码:

/*

Just a simple Processing and Twitter thingy majiggy

RobotGrrl.com

Code licensed under:
CC-BY

*/

// First step is to register your Twitter application at dev.twitter.com
// Once registered, you will have the info for the OAuth tokens
// You can get the Access token info by clicking on the button on the
// right on your twitter app's page
// Good luck, and have fun!

// This is where you enter your Oauth info
static String OAuthConsumerKey = "xxx";
static String OAuthConsumerSecret = "xxx";

// This is where you enter your Access Token info
static String AccessToken = "xxx";
static String AccessTokenSecret = "xxxx;

// Just some random variables kicking around
String myTimeline;
java.util.List statuses = null;
User[] friends;
Twitter twitter = new TwitterFactory().getInstance();
RequestToken requestToken;
String[] theSearchTweets = new String[11];


void setup() {

  size(100,100);
  background(0);

  connectTwitter();
  sendTweet("Hey from Simple Processing woop woop #RobotGrrl");

}


void draw() {

  background(0);

}


// Initial connection
void connectTwitter() {

  twitter.setOAuthConsumer(OAuthConsumerKey, OAuthConsumerSecret);
  AccessToken accessToken = loadAccessToken();
  twitter.setOAuthAccessToken(accessToken);

}

// Sending a tweet
void sendTweet(String t) {

  try {
    Status status = twitter.updateStatus(t);
    println("Successfully updated the status to [" + status.getText() + "].");
  } catch(TwitterException e) { 
    println("Send tweet: " + e + " Status code: " + e.getStatusCode());
  }

}


// Loading up the access token
private static AccessToken loadAccessToken(){
  return new AccessToken(AccessToken, AccessTokenSecret);
}


// Get your tweets
void getTimeline() {

  try {
    statuses = twitter.getUserTimeline(); 
  } catch(TwitterException e) { 
    println("Get timeline: " + e + " Status code: " + e.getStatusCode());
  }

  for(int i=0; i<statuses.size(); i++) {
    Status status = (Status)statuses.get(i);
    println(status.getUser().getName() + ": " + status.getText());
  }

}


// Search for tweets
void getSearchTweets() {

  String queryStr = "@RobotGrrl";

  try {
    Query query = new Query(queryStr);    
    query.setRpp(10); // Get 10 of the 100 search results  
    QueryResult result = twitter.search(query);    
    ArrayList tweets = (ArrayList) result.getTweets();    

    for (int i=0; i<tweets.size(); i++) {   
      Tweet t = (Tweet)tweets.get(i);   
      String user = t.getFromUser();
      String msg = t.getText();
      Date d = t.getCreatedAt();    
      theSearchTweets[i] = msg.substring(queryStr.length()+1);

      println(theSearchTweets[i]);
    }

  } catch (TwitterException e) {    
    println("Search tweets: " + e);  
  }

}
4

2 回答 2

2

听起来你有新的 twitter4j 库。没问题,我使用的是 3.0.3 的 twitter4j,看起来情况有所改变。这就是我的工作:

TwitterFactory twitterFactory;  

一个新的公共 TwitterFactory twitterFactory,在 connectTwitter() 中,我基本上交换了你所拥有的东西。

ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey(OAuthConsumerKey);
cb.setOAuthConsumerSecret(OAuthConsumerSecret);
cb.setOAuthAccessToken(AccessToken);
cb.setOAuthAccessTokenSecret(AccessTokenSecret);
twitterFactory = new TwitterFactory(cb.build());
twitter = twitterFactory.getInstance();

创建我的 Twittertwitter对象。我很确定这就是我所做的全部更改,但如果我错过了什么,这里有一个要点https://gist.github.com/loadedsith/5113946

你的标题做得很好。

于 2013-03-08T03:18:31.433 回答
1

我也遇到了这个问题,getFromeUser() 不再是 Status 方法。现在您需要创建一个 User 类,然后使用 getName() 获取其名称。我确实喜欢这样:

Status t=(Status) tweets.get(i);
User u=(User) t.getUser();
String user=u.getName();

我希望这对你有所帮助。

H。

于 2013-02-01T17:54:38.270 回答