Simple (Twitter + Streaming + API Java + OAuth) exemple

Dans ma quête pour créer un programme Java simple pour extraire les tweets de Twitter streaming API, j'ai modifié ce (http://cotdp.com/dl/TwitterConsumer.java) extrait de code pour travailler avec la méthode d'authentification OAuth. Le résultat est le code ci-dessous, qui lorsqu'il est exécuté, jette une Connexion Refusée Exception.

Je suis conscient de Twitter4J cependant je veux créer un programme qui repose moins sur les autres Api.

J'ai fait mes recherches et il semble que le protocole oauth.panneau bibliothèque est adapté pour Twitter streaming API. J'ai également veillé à ce que mes informations d'authentification sont corrects. Mon Twitter niveau d'Accès est en Lecture seule.

De toute orientation est apprécié. Toutes mes excuses si ce type de problème a été répondu précédemment, mais je ne pouvais pas trouver un Java simple exemple qui montre comment utiliser l'API en continu sans compter sur l'ex Twitter4j.

Ce qui concerne

AHL

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
/**
* A hacky little class illustrating how to receive and store Twitter streams
* for later analysis, requires Apache Commons HTTP Client 4+. Stores the data
* in 64MB long JSON files.
* 
* Usage:
* 
* TwitterConsumer t = new TwitterConsumer("username", "password",
*      "http://stream.twitter.com/1/statuses/sample.json", "sample");
* t.start();
*/
public class TwitterConsumer extends Thread {
//
static String STORAGE_DIR = "/tmp";
static long BYTES_PER_FILE = 64 * 1024 * 1024;
//
public long Messages = 0;
public long Bytes = 0;
public long Timestamp = 0;
private String accessToken = "";
private String accessSecret = "";
private String consumerKey = "";
private String consumerSecret = ""; 
private String feedUrl;
private String filePrefix;
boolean isRunning = true;
File file = null;
FileWriter fw = null;
long bytesWritten = 0;
public static void main(String[] args) {
TwitterConsumer t = new TwitterConsumer(
"XXX", 
"XXX",
"XXX",
"XXX",
"http://stream.twitter.com/1/statuses/sample.json", "sample");
t.start();
}
public TwitterConsumer(String accessToken, String accessSecret, String consumerKey, String consumerSecret, String url, String prefix) {
this.accessToken = accessToken;
this.accessSecret = accessSecret;
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
feedUrl = url;
filePrefix = prefix;
Timestamp = System.currentTimeMillis();
}
/**
* @throws IOException
*/
private void rotateFile() throws IOException {
//Handle the existing file
if (fw != null)
fw.close();
//Create the next file
file = new File(STORAGE_DIR, filePrefix + "-"
+ System.currentTimeMillis() + ".json");
bytesWritten = 0;
fw = new FileWriter(file);
System.out.println("Writing to " + file.getAbsolutePath());
}
/**
* @see java.lang.Thread#run()
*/
public void run() {
//Open the initial file
try { rotateFile(); } catch (IOException e) { e.printStackTrace(); return; }
//Run loop
while (isRunning) {
try {
OAuthConsumer consumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
consumer.setTokenWithSecret(accessToken, accessSecret);
HttpGet request = new HttpGet(feedUrl);
consumer.sign(request);
DefaultHttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(request);
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
while (true) {
String line = reader.readLine();
if (line == null)
break;
if (line.length() > 0) {
if (bytesWritten + line.length() + 1 > BYTES_PER_FILE)
rotateFile();
fw.write(line + "\n");
bytesWritten += line.length() + 1;
Messages++;
Bytes += line.length() + 1;
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Sleeping before reconnect...");
try { Thread.sleep(15000); } catch (Exception e) { }
}
}
}
}

InformationsquelleAutor AHL | 2012-12-17