2010-11-11 4 views
21

Quelle API devrais-je utiliser pour obtenir «n» tweets récents d'un utilisateur particulier avec un compte public?API Twitter pour obtenir les tweets récents d'un utilisateur particulier

+2

Quelle langue utilisez-vous? – Tim

+0

Il s'avère que je peux faire un appel http direct pour obtenir cette information. http://api.twitter.com/1/statuses/user_timeline.json?screen_name=noradio&count=5 – user330973

+1

Voici un lien où vous trouverez un code pour sélectionner les tweets en utilisant l'API twitter 1.1 http: // stackoverflow.com/questions/12916539/simple-php-exemple-retrieving-utilisateur-timeline-avec-twitter-api-version-1-1 – lackovic10

Répondre

14

Pour obtenir des tweets d'un utilisateur spécifique, vous devez utiliser la méthode API GET statuses/user_timeline.

+9

@AdamSack Cette méthode n'a pas été dépréciée. – abraham

+3

Ajoutez simplement '? Screen_name = USERNAME' à la fin du point de terminaison. –

6

5 derniers tweets avec le code PHP.

$tweets_result=file_get_contents("https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=username&count=5"); 
$data=json_decode($tweets_result); 
print_r($data); 
+12

Remarque: Ceci ne fonctionne plus à cause de OAuth et de l'API v1.1. – Jimbo

13

Au 7 mai 2013, v1.0 déjà dépréciée Twitter est à la retraite et est la seule version 1.1 méthode d'accès à l'API, en utilisant demandes authentifiées via OAuth.

v1.0 deprecated

Cela signifie que vous ne serez pas pouvoir utiliser file_get_contents() de PHP entièrement sur ses propres pour saisir ce genre de chose - vous devez écrire un script qui utilise l'API OAuth et Twitters V1.1.

I recently wrote a Stack Overflow answer pour aider les débutants à l'API twitter v1.1, et j'ai écrit un cours pour vous faciliter la tâche.

Vous devez créer un compte de développeur, récupérer vous-même un ensemble de clés de développeur à utiliser dans votre application et effectuer des requêtes authentifiées à l'aide d'OAuth. Si vous lisez le message ci-dessus, vous verrez que j'ai créé un simple class pour vous permettre de le faire.

TLDR: Impossible d'utiliser v1.0 plus, utilisez 1.1 et cette classe pour la simplicité: https://github.com/J7mbo/twitter-api-php

+0

Vous pouvez * utiliser * file_get_contents avec OAuth. – hakre

+0

@hakre Fixe :) – Jimbo

+0

Le shortcomming est également dans votre classe sur Github. Curly ridicule vous bâtard pas nécessaire si file_get_contents est là;) (Fixer d'abord ce message d'erreur en quelque chose d'utile je dirais) – hakre

0

Nous pouvons utiliser le twitter Rest api pour obtenir les tweets de l'utilisateur particulier. Vous pouvez télécharger la source de 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 com.gettweets de paquet;

public class Authenticated { 
    String token_type; 
    String access_token; 
} 

adapter_layout.xml

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


    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/tv_text" 
     android:textSize="18dp" 
     android:layout_margin="10dp" 
     android:textColor="#000000"/> 

    </RelativeLayout> 

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; 



    } 

} 
Questions connexes