2015-03-28 3 views
-2

У меня есть учетная запись Twitter. У меня также есть приложение для Android. Если я хочу получить последние твиты, скажем, 15, мне еще нужно добавить свое приложение на страницу dev.twitter и получить два ключа Twitter?Как отображать Tweets конкретного пользователя в приложении для Android

ответ

0

Для этого можно использовать следующий метод GET с параметром имени экрана и счетчиком. Также в соответствии с документом вам также требуется авторизация.

https://api.twitter.com/1.1/lists/statuses.json 

Для получения более подробной информации читайте здесь doc

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+0

@ VladimirF - спасибо за указание, у меня есть правка anwser –

0

скачать исходный код отсюда (Display Tweets of a particular user in an Android)

activity_main.xml

<RelativeLayout android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:id="@+id/rl_menu" 
     android:background="@color/colorPrimaryDark"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Twitter Tweets" 
      android:textColor="#ffffff" 
      android:textSize="15dp" 
      android:layout_centerInParent="true"/> 
    </RelativeLayout> 

    <ListView 
     android:layout_width="match_parent" 
     android:id="@+id/lv_list" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/rl_menu"></ListView> 

    </RelativeLayout> 

MainActivity.java

package com.gettweets; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Base64; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.google.gson.Gson; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.methods.HttpRequestBase; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.BasicHttpParams; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import java.io.*; 
import java.net.URLEncoder; 
import java.util.ArrayList; 

/** 
* Demonstrates how to use a twitter application keys to access a user's timeline 
*/ 
public class MainActivity extends Activity { 

    final static String ScreenName = "Deepshikhapuri"; 
    final static String LOG_TAG = "rnc"; 
    ListView lv_list; 
    ArrayList<String> al_text = new ArrayList<>(); 
    Adapter obj_adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     lv_list = (ListView)findViewById(R.id.lv_list); 

     downloadTweets(); 
    } 

    // download twitter timeline after first checking to see if there is a network connection 
    public void downloadTweets() { 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

     if (networkInfo != null && networkInfo.isConnected()) { 
     new DownloadTwitterTask().execute(ScreenName); 
     } else { 
     Toast.makeText(getApplicationContext(),"Please check your internet connection",Toast.LENGTH_SHORT).show(); 
     } 
    } 

    // Uses an AsyncTask to download a Twitter user's timeline 
    private class DownloadTwitterTask extends AsyncTask<String, Void, String> { 
     final static String CONSUMER_KEY = "nW88XLuFSI9DEfHOX2tpleHbR"; 
     final static String CONSUMER_SECRET = "hCg3QClZ1iLR13D3IeMvebESKmakIelp4vwFUICuj6HAfNNCer"; 
     final static String TwitterTokenURL = "https://api.twitter.com/oauth2/token"; 
     final static String TwitterStreamURL = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name="; 
     final ProgressDialog dialog = new ProgressDialog(MainActivity.this); 

     @Override 
     protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog.setTitle("Loading"); 
     dialog.setMessage("Please wait"); 
     dialog.show(); 

     } 

     @Override 
     protected String doInBackground(String... screenNames) { 
     String result = null; 

     if (screenNames.length > 0) { 
      result = getTwitterStream(screenNames[0]); 
     } 
     return result; 
     } 

     // onPostExecute convert the JSON results into a Twitter object (which is an Array list of tweets 
     @Override 
     protected void onPostExecute(String result) { 
     Log.e("result",result); 
     dialog.dismiss(); 

     try { 
      JSONArray jsonArray_data = new JSONArray(result); 
      al_text.clear(); 
      for (int i=0; i<jsonArray_data.length();i++){ 

       JSONObject jsonObject = jsonArray_data.getJSONObject(i); 
       al_text.add(jsonObject.getString("text")); 

      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 



     // send the tweets to the adapter for rendering 
     obj_adapter= new Adapter(getApplicationContext(), al_text); 
     lv_list.setAdapter(obj_adapter); 
     } 


     // convert a JSON authentication object into an Authenticated object 
     private Authenticated jsonToAuthenticated(String rawAuthorization) { 
     Authenticated auth = null; 
     if (rawAuthorization != null && rawAuthorization.length() > 0) { 
      try { 
       Gson gson = new Gson(); 
       auth = gson.fromJson(rawAuthorization, Authenticated.class); 
      } catch (IllegalStateException ex) { 
       // just eat the exception 
      } 
     } 
     return auth; 
     } 

     private String getResponseBody(HttpRequestBase request) { 
     StringBuilder sb = new StringBuilder(); 
     try { 

      DefaultHttpClient httpClient = new DefaultHttpClient(new BasicHttpParams()); 
      HttpResponse response = httpClient.execute(request); 
      int statusCode = response.getStatusLine().getStatusCode(); 
      String reason = response.getStatusLine().getReasonPhrase(); 

      if (statusCode == 200) { 

       HttpEntity entity = response.getEntity(); 
       InputStream inputStream = entity.getContent(); 

       BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
       String line = null; 
       while ((line = bReader.readLine()) != null) { 
        sb.append(line); 
       } 
      } else { 
       sb.append(reason); 
      } 
     } catch (UnsupportedEncodingException ex) { 
     } catch (ClientProtocolException ex1) { 
     } catch (IOException ex2) { 
     } 
     return sb.toString(); 
     } 

     private String getTwitterStream(String screenName) { 
     String results = null; 

     // Step 1: Encode consumer key and secret 
     try { 
      // URL encode the consumer key and secret 
      String urlApiKey = URLEncoder.encode(CONSUMER_KEY, "UTF-8"); 
      String urlApiSecret = URLEncoder.encode(CONSUMER_SECRET, "UTF-8"); 

      // Concatenate the encoded consumer key, a colon character, and the 
      // encoded consumer secret 
      String combined = urlApiKey + ":" + urlApiSecret; 

      // Base64 encode the string 
      String base64Encoded = Base64.encodeToString(combined.getBytes(), Base64.NO_WRAP); 

      // Step 2: Obtain a bearer token 
      HttpPost httpPost = new HttpPost(TwitterTokenURL); 
      httpPost.setHeader("Authorization", "Basic " + base64Encoded); 
      httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
      httpPost.setEntity(new StringEntity("grant_type=client_credentials")); 
      String rawAuthorization = getResponseBody(httpPost); 
      Authenticated auth = jsonToAuthenticated(rawAuthorization); 

      // Applications should verify that the value associated with the 
      // token_type key of the returned object is bearer 
      if (auth != null && auth.token_type.equals("bearer")) { 

       // Step 3: Authenticate API requests with bearer token 
       HttpGet httpGet = new HttpGet(TwitterStreamURL + screenName); 

       // construct a normal HTTPS request and include an Authorization 
       // header with the value of Bearer <> 
       httpGet.setHeader("Authorization", "Bearer " + auth.access_token); 
       httpGet.setHeader("Content-Type", "application/json"); 
       // update the results with the body of the response 
       results = getResponseBody(httpGet); 
      } 
     } catch (UnsupportedEncodingException ex) { 
     } catch (IllegalStateException ex1) { 
     } 
     return results; 
     } 
    } 
} 

Authenticated.java

package com.gettweets; 

public class Authenticated { 
    String token_type; 
    String access_token; 
} 

Adapter.java

package com.gettweets; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 



public class Adapter extends ArrayAdapter<String> { 

    Context context; 
    ViewHolder viewHolder; 
    ArrayList<String> al_newslist=new ArrayList<>(); 

    public Adapter(Context context, ArrayList<String> al_newslist) { 
     super(context, R.layout.adapter_layout, al_newslist); 
     this.al_newslist=al_newslist; 
     this.context=context; 



    } 

    @Override 
    public int getCount() { 

     Log.e("ADAPTER LIST SIZE",al_newslist.size()+""); 
     return al_newslist.size(); 
    } 
    @Override 
    public int getItemViewType(int position) { 
     return position; 
    } 

    @Override 
    public int getViewTypeCount() { 
     if (al_newslist.size() > 0) { 
      return al_newslist.size(); 
     } else { 
      return 1; 
     } 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 



    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 

      viewHolder = new ViewHolder(); 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.adapter_layout, parent, false); 
      viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_text); 



      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 


     viewHolder.tv_name.setText(al_newslist.get(position)); 


     return convertView; 

    } 

    private static class ViewHolder { 
     TextView tv_name; 



    } 

} 

Спасибо!

Смежные вопросы