如何在Android应用程序中集成G​​oogle Reader?

时间:2011-04-11 09:04:04

标签: android google-reader

我想在我的Android应用程序中集成G​​oogle Reader。 请帮我说明怎么做?

1 个答案:

答案 0 :(得分:10)

希望这会有所帮助:

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

    try{  
        String auth = getGoogleAuthKey("<your gmail email address>","<your password>");
        String token = getGoogleToken(auth); 
        String result = postToGoogleReader(token, auth); 
        TextView tv = (TextView) findViewById(R.id.textView1); 
        tv.setText(result); 
    }catch(Exception e){
    }

}

protected String getGoogleAuthKey(String _USERNAME, String _PASSWORD) {
    String responseString = ""; 
    URL url;
    try {
        //open the connection 
        url = new URL("https://www.google.com/accounts/ClientLogin");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
        urlConnection.setUseCaches(false);
        urlConnection.setDoOutput(true);  

        //create the body
        StringBuilder sb = new StringBuilder();
        sb.append("accountType="); 
        sb.append("GOOGLE"); 
        sb.append("&Email=");
        sb.append(_USERNAME);
        sb.append("&Passwd=");
        sb.append(_PASSWORD);
        sb.append("&service="); 
        sb.append("reader");
        sb.append("&source=");    
        sb.append("&lt;your app name&gt;"); 

        //make a request and retrieve results
        OutputStream outputStream = urlConnection.getOutputStream();  
        outputStream.write(sb.toString().getBytes("UTF-8"));
        outputStream.close(); 
        sb = null; 

        int responseCode = urlConnection.getResponseCode();
        InputStream inputStream;  
        if (responseCode == HttpURLConnection.HTTP_OK) {
            inputStream = urlConnection.getInputStream();
            responseString = convertStreamToString(inputStream);
            String _AUTHKEY = responseString.substring(responseString.indexOf("Auth="), responseString.length());
            responseString = _AUTHKEY.replace( "Auth=","" );
            inputStream.close();
            urlConnection.disconnect(); 
        }else {  
            urlConnection.disconnect(); 
            return "error"; 
        }
    } catch (Exception e) {
        return e.getMessage();  
    }
    Log.d("GoogleReader", "Auth.a=" + responseString); 
    return responseString.trim();
}

public String getGoogleToken(String authorization) {
    final String googleReaderTokenUrl = "https://www.google.com/reader/api/0/token"; 
    String responseString = ""; 
    URL url;

    try {
        //open the connection 
        url = new URL(googleReaderTokenUrl);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        Log.d("GoogleReader", "Auth.b=" + authorization); 
        urlConnection.addRequestProperty("Authorization", "GoogleLogin auth=" + authorization); 
        urlConnection.setRequestMethod("GET");
        urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlendcoded");
        urlConnection.setUseCaches(false);
        urlConnection.setDoOutput(true);

        try {
             InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
             responseString = convertStreamToString(inputStream);
        }catch(Exception e){
            int responseCode = urlConnection.getResponseCode();
               return Integer.toString(responseCode); 
            //return e.getMessage(); 
        }finally {
             urlConnection.disconnect();
        }
    } catch (Exception e) {
        return e.getMessage(); 
    }
    return responseString; 
}

public String postToGoogleReader(String token, String authorization){
    final String googleAuthUrl = "http://www.google.com/reader/api/0/item/edit"; 
    String responseString = "";  
    URL url;
    try { 

        //create the body
        StringBuilder sb = new StringBuilder();
        sb.append("accountType=");
        sb.append("GOOGLE");
        sb.append("&snippet=");
        sb.append(URLEncoder.encode("TheSnippet", "UTF-8"));
        sb.append("&T=");
        sb.append(URLEncoder.encode(token, "UTF-8"));
        sb.append("&share=");
        sb.append(false);
        sb.append("&url=");
        sb.append(URLEncoder.encode("http://developer.android.com/index.html", "UTF-8"));
        sb.append("&title=");
        sb.append(URLEncoder.encode("TheTitle", "UTF-8"));
        sb.append("&srcTitle=");    
        sb.append(URLEncoder.encode("TheSource", "UTF-8"));
        sb.append("&srcUrl=");    
        sb.append(URLEncoder.encode("www.your_web_site", "UTF-8"));


        //open the connection 
        url = new URL(googleAuthUrl);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("POST");
        Log.d("GoogleReader", "Auth.c=" + authorization); 
        urlConnection.addRequestProperty("Authorization", "GoogleLogin auth=" + authorization); 
        urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
        urlConnection.setRequestProperty("Content-Length", Integer.toString(sb.toString().getBytes("UTF-8").length));
        urlConnection.setUseCaches(false);
        urlConnection.setDoOutput(true);


        //make a request and retrieve results
        OutputStream outputStream = urlConnection.getOutputStream();
        outputStream.write(sb.toString().getBytes("UTF-8"));
        outputStream.close();
        sb = null;   

        int responseCode = urlConnection.getResponseCode();
        InputStream inputStream;
        if (responseCode == HttpURLConnection.HTTP_OK) {
            inputStream = urlConnection.getInputStream();
            responseString = convertStreamToString(inputStream);
            inputStream.close();
            urlConnection.disconnect(); 
        }else {  
            inputStream = urlConnection.getInputStream();
            responseString = convertStreamToString(inputStream);
            urlConnection.disconnect(); 
            return "error"; 
        }
    } catch (Exception e) {
        return e.getMessage(); 
    }
    return responseString; 

}

private String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}