coolsharp의 놀이터

'트위터'에 해당되는 글 3건

  1. 2011.10.28 안드로이드 트위터 연동 최종
  2. 2011.10.27 안드로이드 트위터 연동 #2
  3. 2011.10.27 안드로이드 트위터 연동 #1

package com.coolsharp.test;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;

import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

/**
* @author coolsharp
*
*/
public class TwitterApp extends Activity {

    /**
     * Twitter instance object
     */
    private Twitter twitter;
    private AccessToken acToken = null;
    private RequestToken rqToken = null;
    private Status status = null;

    private static final String CONSUMER_KEY = "트위터에서 받아온 컨슈머 키";
    private static final String CONSUMER_SECRET = "트위터에서 받아온 컨슈머 비밀 키";
    private static final String S_CONSUMER_KEY = "CONSUMER_KEY";
    private static final String S_CONSUMER_SECRET = "CONSUMER_SECRET";
    public static Uri CALLBACK_URL = Uri.parse("wefu://twitter");

    /** 생성. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 트위터 인스턴스 얻기
        twitter = new TwitterFactory().getInstance();
        // 컨슈머 키 대입
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        // 버튼 리스너 등록
        Button btn = (Button) findViewById(R.id.btnAuthorize);
        btn.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                try {
                    getToken();
                    if (null != acToken) getList();
                } catch (TwitterException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } // 토큰 발행
            }
        });
    }
    /**
     * 토큰 얻기
     * @return
     * @throws TwitterException
     */
    private boolean getToken() throws TwitterException {
        boolean res = false;
        // 토큰이 발행 되지 않았으면
        if (null == acToken) {
            // 최근 사용한 토큰 읽기
            String key = loadData(S_CONSUMER_KEY);
            String value = loadData(S_CONSUMER_SECRET);
            // 토큰 값이 모두 있으면
            if ((!key.equals("")) && (!value.equals(""))) {
                // 기존 토큰 값으로 토큰 발행
                acToken = new AccessToken(key, value);
                twitter.setOAuthAccessToken(acToken);
                res = true;
            }
            else {
                // 인증 시작
                startAuth();
            }
        } else {
        }
        if (null != acToken) {
            // 트위터 글쓰기
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            status = twitter.updateStatus("" + dateFormat.format(new Date(System.currentTimeMillis())).toString());
        }
        return res;
    }
    /**
     * 인증 시작
     * @throws TwitterException
     */
    private void startAuth() throws TwitterException {
        rqToken = twitter.getOAuthRequestToken(CALLBACK_URL.toString());
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(rqToken.getAuthorizationURL())));
    }
    /**
     * @throws TwitterException
     */
    private void getList() throws TwitterException {
        List<Status> statuses;
        Paging page = new Paging();
        page.count(20);
        page.setPage(1);
        statuses = twitter.getHomeTimeline(page);
        for (Status status : statuses) {
            Log.i("coolsharp", status.getText());
        }
    }
    /**
     * 스트링 데이터 저장하기
     * @param Key
     * @param Data
     * @return
     */
    private boolean saveData(String Key, String Data) {
        SharedPreferences prefs = getSharedPreferences("coolsharp", MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();
        editor.putString(Key, Data);
        return editor.commit();
    }
    /**
     * 스트링 데이터 불러오기
     * @param Key
     * @return
     */
    private String loadData(String Key) {
        SharedPreferences prefs = getSharedPreferences("coolsharp", MODE_PRIVATE);
        return prefs.getString(Key, "");
    }

    /* (non-Javadoc)
     * 인텐트 생성
     * @see android.app.Activity#onNewIntent(android.content.Intent)
     */
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null && CALLBACK_URL.getScheme().equals(uri.getScheme())) {
            String oauth_verifier = uri.getQueryParameter("oauth_verifier");
            try {
                acToken = twitter.getOAuthAccessToken(rqToken, oauth_verifier);
                saveData(S_CONSUMER_KEY, acToken.getToken());
                saveData(S_CONSUMER_SECRET, acToken.getTokenSecret());
            } catch (TwitterException e) {
                Log.e("coolsharp", e.getMessage());
            }
        }
    }
}


Posted by coolsharp

 

 

위와 같이 키가 생성 된다.

 

위의 키를 가지고 연동 작업을 진행 할 수 있다.

 


Posted by coolsharp

페이스북부터 연동하려 하였으나 페이스북 계정이 생성 후 별로 사용치 않은 관계로 앱 등록이 불가능했다.

 

때문에 우선 트위터로 안드로이드 연동부터 공부 후 페이스북은 추후 연동하도록 하겠다.

 

트위터 개발자 등록 사이트는 다음과 같다.

 

https://dev.twitter.com/

 

 

Create an app을 클릭한다.

 

Name, Descriptoion, Web Site를 입력 후 생성한다.

Posted by coolsharp