android:如何从推特上获取趋势?

标签 android twitter-fabric

我想从 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

https://dev.twitter.com/oauth

https://dev.twitter.com/oauth/application-only

https://dev.twitter.com/oauth/overview/authorizing-requests

关于android:如何从推特上获取趋势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35504566/

相关文章:

java - 当我在后台编辑布局时,我的 Bottom Sheet 会自行消耗

java - 基本 libGDX 项目运行速度为 47-48 fps

java - 无法使用 4.x Android NFC API 推送 NdefMessage

java - 未检查的分配 RealmResults

android - setFastestInterval(long milis) 不工作

swift - 如何安装 Fabric 和 Crashlytics

swift - 是否可以自定义 fabric Twitter 登录按钮的大小?

crashlytics - Fabric 自动上传丢失的 dSYM

ios - Fabric Crashlytics : Upload-Symbols behind proxy (with FaSTLane)

ios - MBProgressHUD 与 Swift、Fabric 和 TwitterKit