0

このサンプルを使用して、Twitter にログインし、ステータスと写真を投稿します。私はそれを長い間使用しました。現在、Twitter は Twitter API 1.0 から Twitter API 1.1 にアップグレードする必要があります。アップグレードするにはどうすればよいですか? 古いライブラリをこのライブラリに置き換えようとしましたが、今のところ問題はありませんが、完全に変更していないのではないかと心配しています。

4

1 に答える 1

2

接続するには、OAUTH ( https://dev.twitter.com/docs/auth/using-oauth )経由でログインする必要があります。そのため、dev.twitter.com にもアプリを登録する必要があります。以下の例はhttps://github.com/browep/Android-OAuth-Twitter-Exampleにあります。

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;
}
于 2013-06-22T08:46:51.657 に答える