package org.smartpaws.net;
import android.util.Log;
import com.loopj.android.http.AsyncHttpResponseHandler;
import org.apache.http.Header;
import org.smartpaws.MainActivity;
import org.smartpaws.objects.twitter.Authenticated;
import org.smartpaws.objects.twitter.Tweet;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TwitterData {
private static final String TWITTER_TOKEN_URL = "https://api.twitter.com/oauth2/token";
private static final String TWITTER_STREAM_URL = "https://api.twitter.com/1.1/statuses/user_timeline.json?count=50&exclude_replies=true&screen_name=";
private static volatile int count = 0;
public static void getTweets(final String authEncoded, final String[] accounts, final ResponseHandler<Tweet[]> response) {
final List<Tweet> results = new ArrayList<>();
for (String account : accounts) {
getTweets(authEncoded, account, new ResponseHandler<Tweet[]>() {
@Override
public void result(Tweet[] result) {
if (result == null) {
response.result(null);
return;
}
Collections.addAll(results, result);
TwitterData.count++;
if (count == accounts.length) {
response.result(results.toArray(new Tweet[results.size()]));
}
}
});
}
}
public static void getTweets(final String authEncoded, final String account, final ResponseHandler<Tweet[]> response) {
HttpClient.postOAuthUrl(TWITTER_TOKEN_URL, authEncoded, null, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
String rawAuthorization = new String(responseBody, Charset.forName("UTF-8"));
Authenticated auth = DataMan.GSON_TWITTER.fromJson(rawAuthorization, Authenticated.class);
if (auth != null && auth.token_type.equals("bearer")) {
HttpClient.getOAuthUrl(TWITTER_STREAM_URL + account, auth.access_token, null, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
response.result(DataMan.GSON_TWITTER.fromJson(new String(responseBody, Charset.forName("UTF-8")), Tweet[].class));
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e(MainActivity.APP_NAME, "Failed to retrieve tweets", error);
response.result(null);
}
});
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e(MainActivity.APP_NAME, "Failed to authenticate Twitter", error);
response.result(null);
}
});
}
}