2012-02-22 39 views
5

Mục tiêu của tôi là thu thập tất cả các tweet chứa từ "Pháp" và "Đức" và cũng thu thập siêu dữ liệu liên quan (ví dụ: tọa độ địa lý được đính kèm với tweet). Tôi biết rằng siêu dữ liệu này có sẵn, nhưng tôi không thể tìm ra cách truy cập nó bằng thư viện Java mà tôi đang sử dụng: "twitter4j".twitter4j - truy cập thông tin tweet từ Streaming API

Ok, vậy những gì tôi có cho đến nay được lấy từ các mẫu mã trên trang twitter4j. Nó in ra tất cả các tweet chứa các từ khóa đã chọn của tôi, vì chúng được cung cấp trong thời gian thực bởi API Streaming của Twitter. Tôi gọi phương thức lọc trên đối tượng TwitterStream của tôi và điều này cung cấp luồng. Nhưng tôi cần kiểm soát nhiều hơn. Cụ thể là, tôi muốn có thể:

1) viết các tweet vào một tệp; 2) chỉ in ra 1000 tweet đầu tiên; 3) truy cập siêu dữ liệu khác được đính kèm với tweet (phương pháp lọc chỉ in tên người dùng và chính tweet đó).

Dưới đây là đoạn code tôi có cho đến nay:

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

Cần một sự giúp đỡ. Tôi nhận được lỗi sau. 'Loại StatusListener mới() {} phải triển khai phương thức trừu tượng thừa kế StatusListener.onStallWarning (StallWarning)' –

Trả lời

5

Sau khi xem xét này với đôi mắt tươi tôi nhận ra các giải pháp (đó là khá rõ ràng). Chỉnh sửa phần sau của mã:

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

cho phép tôi truy cập vào siêu dữ liệu khác. Ví dụ, nếu tôi muốn truy cập ngày của tweet, tôi chỉ cần thêm những điều sau đây:

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

Các Lỗi 401 đến khi API đang cố gắng truy cập vào một số thông tin đó là không thể tìm nạp hiện nay. Vì vậy, bạn cần phải kiểm tra sự cho phép được phép trên twitter. Thay đổi nó thành READ, WRITE và ... để truy cập API đầy đủ. Hoặc có thể có vấn đề khi bạn có thể đang sử dụng máy chủ proxy. Do đó đề cập đến các chi tiết proxy bằng cách sử dụng các lệnh sau đây.

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

Để viết tweet trong hồ sơ:

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(); 
    } 
} 
Các vấn đề liên quan