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); } }); } }