2015-08-28 47 views
0
import twitter4j.FilterQuery; 
import twitter4j.StallWarning; 
import twitter4j.Status; 
import twitter4j.StatusDeletionNotice; 
import twitter4j.StatusListener; 
import twitter4j.TwitterException; 
import twitter4j.TwitterFactory; 
import twitter4j.TwitterStream; 
import twitter4j.TwitterStreamFactory; 
import twitter4j.conf.ConfigurationBuilder; 

import java.util.ArrayList; 
import java.util.Arrays; 


public class winning { 

    public static ConfigurationBuilder cb; 
    public static TwitterFactory tf; 
    public static twitter4j.Twitter tw; 


    public static void main(String[] args) throws TwitterException { 

     ConfigurationBuilder cb = new ConfigurationBuilder(); 
     cb.setDebugEnabled(true) 
      .setOAuthConsumerKey("") 
      .setOAuthConsumerSecret("") 
      .setOAuthAccessToken("-") 
      .setOAuthAccessTokenSecret("");   

     tf= new TwitterFactory(cb.build()); 
     tw= tf.getInstance();  


     if (args.length > 1) { 
      System.out.println("Usage: java twitter4j.examples.PrintFilterStream [follow(comma separated numerical user ids)] [track(comma separated filter terms)]"); 
      System.exit(-1); 
     } 

     StatusListener listener = new StatusListener() { 
      @Override 
      public void onStatus(Status status) { 
       System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText()); 
      } 

      @Override 
      public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { 
       System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId()); 
      } 

      @Override 
      public void onTrackLimitationNotice(int numberOfLimitedStatuses) { 
       System.out.println("Got track limitation notice:" + numberOfLimitedStatuses); 
      } 

      @Override 
      public void onScrubGeo(long userId, long upToStatusId) { 
       System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId); 
      } 

      @Override 
      public void onStallWarning(StallWarning warning) { 
       System.out.println("Got stall warning:" + warning); 
      } 

      @Override 
      public void onException(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 

     TwitterStream twitterStream = new TwitterStreamFactory().getInstance(); 
     twitterStream.addListener(listener); 
     ArrayList<Long> follow = new ArrayList<Long>(); 
     ArrayList<String> track = new ArrayList<String>(); 
     for (String arg : args) { 
      if (isNumericalArgument(arg)) { 
       for (String id : arg.split(",")) { 
        follow.add(Long.parseLong(id)); 
       } 
      } else { 
       track.addAll(Arrays.asList(arg.split(","))); 
      } 
     } 
     long[] followArray = new long[follow.size()]; 
     for (int i = 0; i < follow.size(); i++) { 
      followArray[i] = follow.get(i); 
     } 
     String[] trackArray = track.toArray(new String[track.size()]); 

     // filter() method internally creates a thread which manipulates TwitterStream and calls these adequate listener methods continuously. 
     twitterStream.filter(new FilterQuery(0, followArray, trackArray)); 
    } 

    private static boolean isNumericalArgument(String argument) { 
     String args[] = argument.split(","); 
     boolean isNumericalArgument = true; 
     for (String arg : args) { 
      try { 
       Integer.parseInt(arg); 
      } catch (NumberFormatException nfe) { 
       isNumericalArgument = false; 
       break; 
      } 
     } 
     return isNumericalArgument; 
    } 
} 

这是来自twitter4j的示例代码。流媒体过滤器示例代码使用问题

每次我尝试运行此我不断收到

“用法:JAVA twitter4j.examples.PrintFilterStream [遵循(逗号分隔数字用户ID)] [轨道(逗号分隔的过滤条件)]”

即使我添加了轨道数组,并与之分隔开来,所以它可以分割并将其添加到列表索引。

还是我想不明白用法?

任何帮助表示赞赏。

回答

0

winning类(请下面的命名规则,并开始与一个大写字母类名),接受命令行参数的字符串String[] args

if (args.length > 1) { 

你有这个上面的代码中的数组, (用逗号隔开的数字用户ID)] [轨迹(逗号分隔的过滤条件)]“(这里的条件显然是真的,因为你提到你看到sysout ”用法:java twitter4j.examples.PrintFilterStream [在输出和程序出口。

所以,你必须确保你只传递一个参数输入到你的程序,所以args.length只保留

看你的代码,你以后使用ARGS把它与,分开。 所以你输入到程序必须看起来像

“1,2,3,4,5,6”

“A,B,C,d,E,F”

在命令行

你的程序调用应该是这个样子:

java winning "1,2,3,4,5,6" 

供您参考和学习 Command line arguments Command args