2012-02-22 20 views
5

से ट्वीट ट्वीट जानकारी का लक्ष्य मेरा लक्ष्य "फ्रांस" और "जर्मनी" शब्द वाली सभी ट्वीट्स एकत्र करना है और संबंधित मेटाडेटा (उदाहरण के लिए, ट्वीट से जुड़ी भौगोलिक निर्देशांक) एकत्र करना है। मुझे पता है कि इस मेटाडाटा उपलब्ध है, लेकिन मैं कैसे जावा पुस्तकालय मैं उपयोग कर रहा हूँ के साथ इसे उपयोग करने को समझ नहीं सकता: "twitter4j"।twitter4j - स्ट्रीमिंग एपीआई

ठीक है, तो क्या मैं है अब तक twitter4j साइट पर कोड नमूने से लिया जाता है। यह, मेरे चुने हुए कीवर्ड वाले सभी ट्वीट्स बाहर प्रिंट के रूप में वे ट्विटर की स्ट्रीमिंग एपीआई द्वारा वास्तविक समय में प्रदान की जाती हैं। मैं अपने ट्विटरस्ट्रीम ऑब्जेक्ट पर फ़िल्टर विधि को कॉल करता हूं, और यह स्ट्रीम प्रदान करता है। लेकिन मुझे अधिक नियंत्रण की जरूरत है। अर्थात्, मैं सक्षम करने के लिए करना चाहते हैं:

1) एक फाइल करने के लिए ट्वीट लिखने; 2) केवल बाहर पहले 1000 ट्वीट्स प्रिंट; 3) का उपयोग अन्य ट्वीट से जुड़ी मेटाडाटा (फिल्टर विधि सिर्फ उपयोगकर्ता नाम और ट्वीट में ही) बाहर प्रिंट करता है।

import twitter4j.FilterQuery; 
import twitter4j.Status; 
import twitter4j.StatusDeletionNotice; 
import twitter4j.StatusListener; 
import twitter4j.TwitterException; 
import twitter4j.TwitterStream; 
import twitter4j.TwitterStreamFactory; 
import twitter4j.conf.ConfigurationBuilder; 

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

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

    TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance(); 
    StatusListener listener = new StatusListener() { 

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

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

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

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

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

    FilterQuery fq = new FilterQuery(); 
    String keywords[] = {"France", "Germany"}; 

    fq.track(keywords); 

    twitterStream.addListener(listener); 
    twitterStream.filter(fq);  
} 
} 
+0

एक मदद चाहिए। मुझे यह निम्न त्रुटि मिल रही है। 'नया स्टेटस लिस्टनर() {} टाइप किया गया विरासत अमूर्त विधि StatusListener.onStallWarning (StallWarning) को लागू करना होगा' –

उत्तर

5

ताजा आँखों से इस को देखने के बाद मैं समाधान (जो बहुत स्पष्ट था) का एहसास:

यहाँ मैं अब तक है कोड है। कोड के निम्नलिखित भाग को संपादित करना:

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

मुझे अन्य मेटाडेटा तक पहुंचने की अनुमति देता है। उदाहरण के लिए, अगर मैं ट्वीट की तारीख तक पहुंचना चाहते हैं, मैं बस निम्नलिखित जोड़ने की जरूरत:

System.out.println(status.getCreatedAt()); 
0

त्रुटि 401 आता है जब एपीआई कुछ जानकारी जो वर्तमान में प्राप्त नहीं कर पा रहा है का उपयोग करने की कोशिश कर रहा है। इसलिए आपको ट्विटर पर अनुमति की अनुमति की आवश्यकता है। पूर्ण एपीआई एक्सेस के लिए इसे पढ़ें, लिखें और ... में बदलें। या समस्या हो सकती है क्योंकि आप प्रॉक्सी सर्वर का उपयोग कर रहे हैं। इसलिए निम्न आदेशों का उपयोग कर प्रॉक्सी विवरण का उल्लेख करें।

System.getProperties().put("http.proxyHost", "10.3.100.211"); 
     System.getProperties().put("http.proxyPort", "8080"); 
0

फ़ाइल पर ट्वीट लिखने के लिए:

FileWriter file = new FileWriter(....); 

public void onStatus(Status status) { 
    System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText() + " -> "+ status.getCreatedAt()); 
    try { 
     file.write(status.getUser().getScreenName() + " - " + status.getText() + " -> "+ status.getCreatedAt() +"\n"); 
     file.flush(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
संबंधित मुद्दे