我想从 Twitter 获取趋势。任何人都可以帮我解决这个问题。我已经使用 login button
完成登录并获得了 Activity session ,现在问题是如何获得趋势哈希标签。
最佳答案
https://dev.twitter.com/rest/reference/get/trends/place
示例请求:
https://api.twitter.com/1.1/trends/place.json?id=1
其中 id 是 WOEID - Yahoo! Where On Earth 位置 ID
对于全局:1
印度:23424975
访问 twitterapi 需要一个 Authorization 作为 header 。
public class ConstantsUtils {
public static final String URL_ROOT_TWITTER_API = "https://api.twitter.com";
public static final String URL_SEARCH = URL_ROOT_TWITTER_API + "/1.1/search/tweets.json?q=";
public static final String URL_AUTHENTICATION = URL_ROOT_TWITTER_API + "/oauth2/token";
public static final String URL_INDIA_TRENDING ="https://api.twitter.com/1.1/trends/place.json?id=23424977";
public static final String CONSUMER_KEY = "your key";
public static final String CONSUMER_SECRET = "your key";
}
获取授权 token
public static final String TAG = "TwitterUtils";
public static String appAuthentication() {
HttpURLConnection httpConnection = null;
OutputStream outputStream = null;
BufferedReader bufferedReader = null;
StringBuilder response = null;
try {
URL url = new URL(ConstantsUtils.URL_AUTHENTICATION);
httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setRequestMethod("POST");
httpConnection.setDoOutput(true);
httpConnection.setDoInput(true);
String accessCredential = ConstantsUtils.CONSUMER_KEY + ":"
+ ConstantsUtils.CONSUMER_SECRET;
String authorization = "Basic "
+ Base64.encodeToString(accessCredential.getBytes(),
Base64.NO_WRAP);
String param = "grant_type=client_credentials";
httpConnection.addRequestProperty("Authorization", authorization);
httpConnection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded;charset=UTF-8");
httpConnection.connect();
outputStream = httpConnection.getOutputStream();
outputStream.write(param.getBytes());
outputStream.flush();
outputStream.close();
// int statusCode = httpConnection.getResponseCode();
// String reason =httpConnection.getResponseMessage();
bufferedReader = new BufferedReader(new InputStreamReader(
httpConnection.getInputStream()));
String line;
response = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
response.append(line);
}
Log.d(TAG,
"POST response code: "
+ String.valueOf(httpConnection.getResponseCode()));
Log.d(TAG, "JSON response: " + response.toString());
} catch (Exception e) {
Log.e(TAG, "POST error: " + Log.getStackTraceString(e));
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
}
}
return response.toString();
}
获取趋势。
public static String getTimelineForSearchTerm(String twitt_url,
Context context) {
HttpURLConnection httpConnection = null;
BufferedReader bufferedReader = null;
StringBuilder response = new StringBuilder();
try {
URL url = new URL(ConstantsUtils.URL_INDIA_TRENDING);
httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setRequestMethod("GET");
String jsonString = appAuthentication();
JSONObject jsonObjectDocument = new JSONObject(jsonString);
String token = jsonObjectDocument.getString("token_type") + " "
+ jsonObjectDocument.getString("access_token");
httpConnection.setRequestProperty("Authorization", token);
httpConnection.setRequestProperty("Authorization", token);
httpConnection.setRequestProperty("Content-Type",
"application/json");
httpConnection.connect();
bufferedReader = new BufferedReader(new InputStreamReader(
httpConnection.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
response.append(line);
}
Log.d(TAG,
"GET response code: "
+ String.valueOf(httpConnection
.getResponseCode()));
Log.d(TAG, "JSON response: " + response.toString());
} catch (Exception e) {
Log.e(TAG, "GET error: " + Log.getStackTraceString(e));
} finally {
if (httpConnection != null) {
httpConnection.disconnect();
}
}
}
return response.toString();
}
要获得雅虎 WOEID,只需传递您所在位置的经度和纬度。
http://where.yahooapis.com/v1/places.q('"
+ latitude
+ ","
+ longitude
+ "')?appid=yourappid&format=json"
请阅读获取授权请求和获取授权 header
关于android:如何从推特上获取趋势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504566/