Google Data Api library for Blackberry

耗尽温柔 提交于 2019-12-24 07:27:21

问题


I want to get google contacts in my Blackberry Application. Is there any public libraries availabile for blackberry to do this?

I try to use Oauth-SignPost. But the libraies used in it not supported by blackberry.Then I try the following code

    public static String requestToken(){
    String url = C.REQUEST_URL;
    String header = oauth_header(url, HttpProtocolConstants.HTTP_METHOD_GET);
    String requestTokenUrl = concatURL(url, header);
    HttpConnection httpConn = null;
    InputStream input = null;
    try{
        HttpConnectionFactory factory = new HttpConnectionFactory( requestTokenUrl,   
                HttpConnectionFactory.TRANSPORT_WIFI |
                HttpConnectionFactory.TRANSPORT_WAP2 |
                HttpConnectionFactory.TRANSPORT_BIS |
                HttpConnectionFactory.TRANSPORT_BES |
                HttpConnectionFactory.TRANSPORT_DIRECT_TCP);
        httpConn = factory.getNextConnection();
        httpConn.setRequestMethod(HttpProtocolConstants.HTTP_METHOD_GET);
        httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        input = httpConn.openDataInputStream();
        int resp = httpConn.getResponseCode();
        if (resp == HttpConnection.HTTP_OK) {
            StringBuffer buffer = new StringBuffer();
            int ch;
            while ( (ch = input.read()) != -1){
                buffer.append( (char) ch);
           }
            String content = buffer.toString();
            System.out.println("Response"+content);
    }
        return "";
    } catch (IOException e) {
        return "exception";
    } catch (NoMoreTransportsException nc) {
        return "noConnection";
    } finally {
        try {
            httpConn.close();
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

The oauth_header() which create the appending parameters

public static String oauth_header(String url, String method) {
        String nonce = nonce();
        long timestamp = timestamp();
        Hashtable pairs = new Hashtable();

        pairs.put(C.OAUTH_CONSUMER_KEY, C.CONSUMER_KEY);
        pairs.put(C.OAUTH_NONCE, nonce);
        pairs.put(C.OAUTH_SIGNATURE_METHOD, C.SIGNATURE_METHOD);
        pairs.put(C.OAUTH_TIMESTAMP, Long.toString(timestamp));
        pairs.put(C.OAUTH_SCOPE,C.SCOPE);
        pairs.put(C.OAUTH_VERSION, "1.0");

        String sig = signature(method, url, pairs);


        StringBuffer header_sb = new StringBuffer();

          header_sb.append(C.OAUTH_CONSUMER_KEY).append("=").append(C.CONSUMER_KEY).append(",");
          header_sb.append(C.OAUTH_NONCE).append("=").append(nonce).append(",");
          header_sb.append(C.OAUTH_SIGNATURE).append("=").append(URLUTF8Encoder.encode(sig)).append(",");
          header_sb.append(C.OAUTH_SIGNATURE_METHOD).append("=").append(C.SIGNATURE_METHOD).append(",");
          header_sb.append(C.OAUTH_TIMESTAMP).append("=").append(Long.toString(timestamp)).append(",");
          header_sb.append(C.OAUTH_SCOPE).append("=").append(C.SCOPE);
          header_sb.append(C.OAUTH_VERSION).append("=").append("1.0");

        return header_sb.toString();
    }

Signature() and concatUrl() here

private static String signature(String method, String requestURL, Hashtable pairs) {
        StringBuffer sb = new StringBuffer();
        String[] keys = new String[pairs.size()];       
        Enumeration e = pairs.keys();
        int i = 0;

        while(e.hasMoreElements()) {
            String k = (String)e.nextElement();
            keys[i++] = k + "=" + URLUTF8Encoder.encode((String)pairs.get(k));
        }
        Arrays.sort(keys, new Comparator() {
            public int compare(Object arg0, Object arg1) {
                return ((String)arg0).compareTo((String)arg1);
            }
        });
        for(i = 0; i < keys.length; i++) {
            sb.append(keys[i]).append('&');
        }
        sb.deleteCharAt(sb.length()-1);
        String msg = method.toUpperCase() +"&" + URLUTF8Encoder.encode(requestURL) + "&" + URLUTF8Encoder.encode(sb.toString());
        System.out.println(msg);

        StringBuffer key = new StringBuffer();
        if(C.CONSUMER_SECRET != null) key.append(URLUTF8Encoder.encode(C.CONSUMER_SECRET));
        key.append('&');

       /* if(Const.tokenSecret != null){
            key.append(URLUTF8Encoder.encode(Const.tokenSecret));
        }*/

        try {
            return hmacsha1(key.toString(), msg);
        } catch (Exception ex) {
            return null;
        }
    }

private static String hmacsha1(String key, String message)
    throws CryptoTokenException, CryptoUnsupportedOperationException, IOException {
        HMACKey k = new HMACKey(key.getBytes());
        HMAC hmac = new HMAC(k, new SHA1Digest());
        hmac.update(message.getBytes());
        byte[] mac = hmac.getMAC();
        return Base64OutputStream.encodeAsString(mac, 0, mac.length, false, false);
    }
public static String concatURL(String url, String header){
    String newurl=url;
    header = header.replace(',', '&');
    newurl = newurl+"?"+header;
    return newurl;
}

Then I get the signature_invalid Message. please Help me to find out the error.

来源:https://stackoverflow.com/questions/8723479/google-data-api-library-for-blackberry

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!