Twitter provides you public tweets and simple authentication now. Twitter uses Client Credentials Grant flow of OAuth 2.0 specifications for their latest version.
First, you should get your Consumer key and Consumer secret from Twitter Developer site. This both works as sensitive passwords for your application.
Flow:
1. Encode the both consumer key and consumer secret into set of credentials.
2. Make an request to POST oauth2/token. On successful, you will receive bearer token.
3. Attach screen name (twitterID) with your access token and get the data.
Encode Keys:
// URL encoding of consumer key.
String encodedConsumerKey = URLEncoder.encode("Your Consumer KEY here","UTF-8");
// URL encoding of consumer secret.
String encodedConsumerSecret = URLEncoder.encode("Your Consumer Secret here","UTF-8");
//Concatenate the both strings with colon ':'.
String authString = encodedConsumerKey +":"+encodedConsumerSecret;
//using base64 encode.
String base64Encoded = Base64.encodeToString(authString.getBytes("UTF-8"), Base64.NO_WRAP);
Authentication: Get a Bearer Token
Request format for bearer token:
POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic " place here base64encoded string"
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip
grant_type=client_credentials
Request Response:
HTTP/1.1 200 OK
Status: 200 OK
Content-Type: application/json; charset=utf-8
...
Content-Encoding: gzip
Content-Length: 140
{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FZZZZZZZZZZZZZZZZ%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
The request must be in HTTP post and Authorization header contains value of "Basic Base64 encoder string". There will be space between the Basic and base64 encoder string.
The Content -Type contains value like "application/x-www-form-urlencoded;charset=UTF-8" and grant_type should have value like "client_credentials".
Follow the below code to get the bearer token
//Use Http post to send request.
//Append EncodedString to Authorization Header.
On valid process, you will receive Access token here.
Get API requests with the bearer token:
Request Format:
GET /1.1/statuses/user_timeline.json?count=100&screen_name=twitterapi HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAA
AAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Accept-Encoding: gzip
The bearer token may be used to issue requests to API endpoints which support application-only auth.
The request includes the normal Https and Authorization header value contains like "Bearer space bearer-token" . Without twitter signing you can get the data.
Follow the below code for API requests:
HttpClient httpclient = new DefaultHttpClient();
//Append twitter count and screen name with api URL
HttpGet httpget = new HttpGet("https://api.twitter.com//1.1/statuses/user_timeline.json?count=100&screen_name="+twitter_id);
//Append bearer token here.
httpget.setHeader("Authorization", "Bearer "+ receivedToken);
HttpResponse response;
try
{
//Receive response here and make it .
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream instream = entity.getContent();
twitter_response= convertStreamToString(instream);
instream.close();
weets_array = new JSONArray(twitter_response);
for (int i = 0; i < tweets_array.length(); i++)
{
String texts = tweets_array.getJSONObject(i).getString("text");
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_TWITTES, texts);
twittwrfeedsarray.add(map);
JSONObject c = tweets_array.getJSONObject(0);
JSONObject phone = c.getJSONObject("user");
user_profile_pic_url = phone.getString("profile_image_url_https");
}
}
}
catch(Exception e)
{
}
Output ScreenShot:
Enjoy coding......
First, you should get your Consumer key and Consumer secret from Twitter Developer site. This both works as sensitive passwords for your application.
Flow:
1. Encode the both consumer key and consumer secret into set of credentials.
2. Make an request to POST oauth2/token. On successful, you will receive bearer token.
3. Attach screen name (twitterID) with your access token and get the data.
Encode Keys:
// URL encoding of consumer key.
String encodedConsumerKey = URLEncoder.encode("Your Consumer KEY here","UTF-8");
// URL encoding of consumer secret.
String encodedConsumerSecret = URLEncoder.encode("Your Consumer Secret here","UTF-8");
//Concatenate the both strings with colon ':'.
String authString = encodedConsumerKey +":"+encodedConsumerSecret;
//using base64 encode.
String base64Encoded = Base64.encodeToString(authString.getBytes("UTF-8"), Base64.NO_WRAP);
Authentication: Get a Bearer Token
Request format for bearer token:
POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic " place here base64encoded string"
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip
grant_type=client_credentials
Request Response:
HTTP/1.1 200 OK
Status: 200 OK
Content-Type: application/json; charset=utf-8
...
Content-Encoding: gzip
Content-Length: 140
{"token_type":"bearer","access_token":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FZZZZZZZZZZZZZZZZ%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
The request must be in HTTP post and Authorization header contains value of "Basic Base64 encoder string". There will be space between the Basic and base64 encoder string.
The Content -Type contains value like "application/x-www-form-urlencoded;charset=UTF-8" and grant_type should have value like "client_credentials".
Follow the below code to get the bearer token
//Use Http post to send request.
HttpClient httpclient = new DefaultHttpClient();
//Append twitter api url here.
//Append twitter api url here.
String uriString = "https://api.twitter.com/oauth2/token";
HttpPost httppost = new HttpPost(uriString);
HttpParams httpParams = httppost.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 10000);
HttpConnectionParams.setSoTimeout(httpParams, 15000);//Append EncodedString to Authorization Header.
httppost.setHeader("Authorization", "Basic " +base64EncodedString);
//Set Content type here.
//Set Content type here.
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
HttpResponse response =null;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("grant_type", "client_credentials"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
response = httpclient.execute(httppost);
String returnedJsonStr = EntityUtils.toString(response.getEntity());
int statusCode = response.getStatusLine().getStatusCode();
Log.v("response",returnedJsonStr);
Log.v("response",Integer.toString(statusCode));
JSONObject jsonObject = new JSONObject(returnedJsonStr);
//Receive Bearer token here.
//Receive Bearer token here.
receivedToken = jsonObject.getString("access_token");
Log.v("access_token",receivedToken);
On valid process, you will receive Access token here.
Get API requests with the bearer token:
Request Format:
GET /1.1/statuses/user_timeline.json?count=100&screen_name=twitterapi HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%2FAAAAAAAAAAAA
AAAAAAAA%3DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Accept-Encoding: gzip
The bearer token may be used to issue requests to API endpoints which support application-only auth.
The request includes the normal Https and Authorization header value contains like "Bearer space bearer-token" . Without twitter signing you can get the data.
Follow the below code for API requests:
HttpClient httpclient = new DefaultHttpClient();
//Append twitter count and screen name with api URL
HttpGet httpget = new HttpGet("https://api.twitter.com//1.1/statuses/user_timeline.json?count=100&screen_name="+twitter_id);
//Append bearer token here.
httpget.setHeader("Authorization", "Bearer "+ receivedToken);
HttpResponse response;
try
{
//Receive response here and make it .
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null)
{
InputStream instream = entity.getContent();
twitter_response= convertStreamToString(instream);
instream.close();
weets_array = new JSONArray(twitter_response);
for (int i = 0; i < tweets_array.length(); i++)
{
String texts = tweets_array.getJSONObject(i).getString("text");
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_TWITTES, texts);
twittwrfeedsarray.add(map);
JSONObject c = tweets_array.getJSONObject(0);
JSONObject phone = c.getJSONObject("user");
user_profile_pic_url = phone.getString("profile_image_url_https");
}
}
}
catch(Exception e)
{
}
Output ScreenShot:
Enjoy coding......