2

what is the procedure to login throw twitter api1.1. i have used old api that will show me twitter connection failed because of api 1 is deprecated.

private final TwDialogListener mTwLoginDialogListener = new TwDialogListener() { public void onComplete(String value) { getTwitterDetail(); } public void onError(String value) { Toast.makeText(LoginActivity.this, "Twitter connection failed", Toast.LENGTH_LONG).show(); } }; 

LOG

{"errors": [{"message": "The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]}

0

1 Answer 1

1

As you see from error log API v.1 is no longer active and everybody must migrate to v1.1. In API v1.1. you must log in via OAUTH to get connected. So you also have to register your app on dev.twitter.com. You can find below example here

public class Main extends Activity{ public static final String TAG = Main.class.getSimpleName(); public static final String TWITTER_OAUTH_REQUEST_TOKEN_ENDPOINT = "..."; //cannot share more then 2 lins, sorry public static final String TWITTER_OAUTH_ACCESS_TOKEN_ENDPOINT = "..."; public static final String TWITTER_OAUTH_AUTHORIZE_ENDPOINT = "..."; private CommonsHttpOAuthProvider commonsHttpOAuthProvider; private CommonsHttpOAuthConsumer commonsHttpOAuthConsumer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); commonsHttpOAuthProvider = new CommonsHttpOAuthProvider(TWITTER_OAUTH_REQUEST_TOKEN_ENDPOINT, TWITTER_OAUTH_ACCESS_TOKEN_ENDPOINT, TWITTER_OAUTH_AUTHORIZE_ENDPOINT); commonsHttpOAuthConsumer = new CommonsHttpOAuthConsumer(getString(R.string.twitter_oauth_consumer_key), getString(R.string.twitter_oauth_consumer_secret)); commonsHttpOAuthProvider.setOAuth10a(true); TwDialog dialog = new TwDialog(this, commonsHttpOAuthProvider, commonsHttpOAuthConsumer, dialogListener, R.drawable.android); dialog.show(); } private Twitter.DialogListener dialogListener = new Twitter.DialogListener() { public void onComplete(Bundle values) { String secretToken = values.getString("secret_token"); Log.i(TAG,"secret_token=" + secretToken); String accessToken = values.getString("access_token"); Log.i(TAG,"access_token=" + accessToken); new Tweeter(accessToken,secretToken).tweet( "Tweet from sample Android OAuth app. unique code: " + System.currentTimeMillis()); } public void onTwitterError(TwitterError e) { Log.e(TAG,"onTwitterError called for TwitterDialog", new Exception(e)); } public void onError(DialogError e) { Log.e(TAG,"onError called for TwitterDialog", new Exception(e)); } public void onCancel() { Log.e(TAG,"onCancel"); } }; public static final Pattern ID_PATTERN = Pattern.compile(".*?\"id_str\":\"(\\d*)\".*"); public static final Pattern SCREEN_NAME_PATTERN = Pattern.compile(".*?\"screen_name\":\"([^\"]*).*"); public class Tweeter { protected CommonsHttpOAuthConsumer oAuthConsumer; public Tweeter(String accessToken, String secretToken) { oAuthConsumer = new CommonsHttpOAuthConsumer(getString(R.string.twitter_oauth_consumer_key), getString(R.string.twitter_oauth_consumer_secret)); oAuthConsumer.setTokenWithSecret(accessToken, secretToken); } public boolean tweet(String message) { if (message == null && message.length() > 140) { throw new IllegalArgumentException("message cannot be null and must be less than 140 chars"); } // create a request that requires authentication try { HttpClient httpClient = new DefaultHttpClient(); Uri.Builder builder = new Uri.Builder(); builder.appendPath("statuses").appendPath("update.json") .appendQueryParameter("status", message); Uri man = builder.build(); HttpPost post = new HttpPost("http://twitter.com" + man.toString()); oAuthConsumer.sign(post); HttpResponse resp = httpClient.execute(post); String jsonResponseStr = convertStreamToString(resp.getEntity().getContent()); Log.i(TAG,"response: " + jsonResponseStr); String id = getFirstMatch(ID_PATTERN,jsonResponseStr); Log.i(TAG,"id: " + id); String screenName = getFirstMatch(SCREEN_NAME_PATTERN,jsonResponseStr); Log.i(TAG,"screen name: " + screenName); final String url = MessageFormat.format("https://twitter.com/#!/{0}/status/{1}",screenName,id); Log.i(TAG,"url: " + url); Runnable runnable = new Runnable() { public void run() { ((TextView)Main.this.findViewById(R.id.textView)).setText("Tweeted: " + url); } }; Main.this.runOnUiThread(runnable); return resp.getStatusLine().getStatusCode() == 200; } catch (Exception e) { Log.e(TAG,"trying to tweet: " + message, e); return false; } } } public static String convertStreamToString(java.io.InputStream is) { try { return new java.util.Scanner(is).useDelimiter("\\A").next(); } catch (java.util.NoSuchElementException e) { return ""; } } public static String getFirstMatch(Pattern pattern, String str){ Matcher matcher = pattern.matcher(str); if(matcher.matches()){ return matcher.group(1); } return null; } 
Sign up to request clarification or add additional context in comments.

2 Comments

Hi @Defuera! I was able to login using v1.1 api but i was not able to upload image to twitter i am using "api.twitter.com/1.1/statuses/update.json"
Check out this one dev.twitter.com/docs/api/1/post/statuses/update_with_media - you can find correct URL for uploading images there.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.