with - API de Twitter para obtener tweets recientes de un usuario en particular
twitter api working with timelines (4)
¿Qué API necesitaría usar para obtener ''n'' tweets recientes de un usuario en particular con una cuenta pública?
A partir del 7 de mayo de 2013 , la v1.0 ya en desuso de Twitter se está retirando y v1.1 es el único método para acceder a la API, utilizando solicitudes autenticadas a través de OAuth .
Esto significa que no podrá utilizar el file_get_contents()
PHP por su cuenta para tomar este tipo de cosas: necesita escribir un script que utilice API OAuth y Twitters v1.1.
Hace poco escribí una respuesta de para ayudar a los novatos a la API de Twitter v1.1, y escribí una clase para que esto sea más fácil para usted.
Debe crear una cuenta de desarrollador, obtener un conjunto de claves de desarrollador para usar dentro de su aplicación y realizar solicitudes autenticadas utilizando OAuth. Si lees la publicación anterior, verás que creé una clase simple para permitirte hacer esto.
TLDR: ya no puede usar v1.0, use 1.1 y esta clase para simplificar: https://github.com/J7mbo/twitter-api-php
Para obtener tweets de un usuario específico, querrá usar el método GET status / user_timeline API.
Podemos usar la API api de Rest para obtener los tweets de un usuario en particular. Puede descargar la fuente de Mostrar tweets de un usuario en particular en un 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_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;
}
}
los últimos 5 tweets con código 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);