質問

LinkedInと統合されるポートレットを開発しています。

それについてのドキュメントに従ってください:http://developer.linkedin.com/docs/doc-1008 - > LinkedInメンバーを承認するための最初のステップは、リクエストの要求を要求することです。このリクエストは、HTTP投稿で行われます。リクエストトークンステップでは、次のコンポーネントを文字列に存在する必要があります。

* HTTP Method (POST)
* Request URI (https://api.linkedin.com/uas/oauth/requestToken)
* oauth_callback
* oauth_consumer_key
* oauth_nonce
* oauth_signature_method
* oauth_timestamp
* oauth_version

私はすでにAPIを持っています(それはそうです oauth_consumer_key)キーと特定のURL文字列を生成する必要があります。このURLとHTTP接続の次のJavaコードを持っています。

private void processAuthentication() {

    Calendar cal = Calendar.getInstance();
    Long ms = cal.getTimeInMillis();
    Long timestamp = ms / 1000;

    Random r = new Random();
    Long nonce = r.nextLong();

    String prefixUrl = "https://api.linkedin.com/uas/oauth/requestToken";
    String oauthCallback = "oauth_callback=http://localhost/";
    String oauthConsumerKey =
            "&oauth_consumer_key=my_consumer_key";
    String oauthNonce = "&oauth_nonce=" + nonce.toString();
    String oauthSignatureMethod = "&oauth_signature_method=HMAC-SHA1";
    String oauthTimestamp = "&oauth_timestamp=" + timestamp.toString();
    String oauthVersion = "&oauth_version=1.0";

    String mainUrl =
            oauthCallback + oauthConsumerKey + oauthNonce + oauthSignatureMethod
                    + oauthTimestamp + oauthVersion;

    try {
        prefixUrl =
                URLEncoder.encode(prefixUrl, "UTF-8") + "&"
                        + URLEncoder.encode(mainUrl, "UTF-8");

        URL url = new URL(prefixUrl);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        String msg = connection.getResponseMessage();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

問題は次に、この問題に直面していた人々にとっては次のとおりです。接続のためにURL文字列を実際にどのように見て、応答を受信する必要がありますか?

URLについては、URLの例に興味があり、生成しました。興味のある応答のために、それを取得する方法。私が理解しているように、HTTP接続が確立された後、その応答は次のとおりです。

connection.getResponseMessage();
役に立ちましたか?

解決

接続を処理するためにOAuthライブラリを試してみることができます。 http://code.google.com/p/oauth/

他のヒント

@Sergionni LinkedIn-Developerからのあなたの質問への答えを見つけました

ご存知のように、Linked-Inメンバーを承認するための最初のステップは、リクエストの要求を要求しています。このリクエストは、HTTP投稿で行われます。

コールバックを使用している場合、ベース文字列はこのようなものを見ることになります。

POST&https%3A%2F%2Fapi.linkedin.com%2Fuas%2Foauth%2FrequestToken &oauth_callback%3Dhttp%253A%252F%252Flocalhost%252Foauth_callback%26o auth_consumer_key%3DABCDEFGHIJKLMNOPQRSTUVWXYZ%26 oauth_nonce%3DoqwgSYFUD87MHmJJDv7bQqOF2EPnVus7Wkqj5duNByU%26 oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1259178158% 26 oauth_version%3d1.0

次に、signatureを計算して、Consumer_Secretでこのベース文字列に署名します。この場合、秘密が1234567890の場合、署名はtlqxuuzm77wdbtxmingn6bldvff8 =です。

これで、OAUTH_NONCE、OAUTH_CALLBACK、OAUTH_SIGNATURE_METHOD、OAUTH_TIMESTAMP、OAUTH_CONSUMER_KEY、およびOAUTH_VERSIONとともに、生成した署名を取得し、HTTP認証ヘッダーを作成します。このリクエストのために、そのhttpヘッダーは次のようになります。

Authorization: OAuth oauth_nonce="oqwgSYFUD87MHmJJDv7bQqOF2EPnVus7Wkqj5duNByU", oauth_callback="http%3A%2F%2Flocalhost%2Foauth_callback", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1259178158", oauth_consumer_key="ABCDEFGHIJKLMNOPQRSTUVWXYZ", oauth_signature="TLQXuUzM7omwDbtXimn6bLDvfF8=", oauth_version = "1.0"

HTTPヘッダーは単一のヘッダーであり、各コンポーネントのHTTPヘッダーではありません。オプションでrealm = "http://api.linkedin.com"を提供できます。

リクエストトークンのリクエストへの応答として、リクエストトークンは「oauth_token」応答フィールドになります。これは、「oauth_callback_confirmed」フィールド、oauth_token_secret、oauth_expires_in、および他の価値のコールバックを認めた検証です。

(ここであなたのnessaer)応答は次のようになります:

OAUTH_TOKEN = 94AB03C4-AE2C-45E4-8732-0E6C4899DB63&OAUTH_TOKEN_SECRET = BE6CCB24-BF0A-4EA8-A4B1-0A70508E452B&OAUTH_CALLBACK_CONFIRMED_COLMEMEMEMED_COLLMED_CONFIRMED_CONFIRMED_CONFIRMED_CONFIRMED_CONFIRMED_COLRMED_COLLMED_COLLMED_COLLMED_COLLMED_COLLMED

LinkedInのOAuth:Geeks.Aretotally.in/Projects/Play-framework-linkedin-Moduleと簡単に統合できるように、プレイフレームワーク用のプラグインを作成しました。うまくいけば、それが役立つことができます。あなたはプレイ、非常に非常にクールなJavaフレームワークをDEFチェックアウトする必要があります。

ポートレットボディ:

public class LinkedInPortlet extends GenericPortlet {

    public static final String PAGE_PIN = "pin";

    public static final String PAGE_EDIT = "edit";

    public static final String PAGE_PROFILE = "profile";

    public static final String PAGE_CONNECTIONS = "connections";

    public static final String FORM_LINKEDIN_PREFERENCES = "preferencesLinkedInForm";

    public static final String PAGE_VIEW_MY_PROFILE = "/WEB-INF/portlets/linkedin/myProfile.jsp";

    public static final String PAGE_VIEW_MY_CONNECTIONS =
            "/WEB-INF/portlets/linkedin/myConnections.jsp";

    public static final String PAGE_PREFERENCES = "/WEB-INF/portlets/linkedin/edit.jsp";

    public void doView(RenderRequest request, RenderResponse response) throws PortletException,
        IOException {

        String view = PAGE_VIEW_MY_PROFILE;

        String page =
                (String) request.getPortletSession().getAttribute(
                        "page_" + getPortletIdentifier(request), PortletSession.PORTLET_SCOPE);

        String accessTokenToken =
                getStringConfiguration(request, LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_TOKEN);
        String accessTokenSecret =
                getStringConfiguration(request, LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_SECRET);

        LinkedInContact profile = new LinkedInContact();
        List<LinkedInContact> contacts = new ArrayList<LinkedInContact>();

        if (PAGE_PIN.equals(page)) {
            view = PAGE_PREFERENCES;
        } else if (PAGE_EDIT.equals(page)) {
            view = PAGE_PREFERENCES;
        } else if (PAGE_CONNECTIONS.equals(page)) {
            try {
                contacts =
                        ServiceResolver.getResolver().getLinkedInService().getConnections(
                                accessTokenToken, accessTokenSecret);
            } catch (ServiceException se) {
                view = PAGE_PREFERENCES;
                handleException(request, se);
            }
            view = PAGE_VIEW_MY_CONNECTIONS;
        } else {
            try {
                profile =
                        ServiceResolver.getResolver().getLinkedInService().getProfile(
                                accessTokenToken, accessTokenSecret);
            } catch (ServiceException se) {
                view = PAGE_PREFERENCES;
                handleException(request, se);
            }

            view = PAGE_VIEW_MY_PROFILE;
        }

        request.setAttribute("profile", profile);
        request.setAttribute("contacts", contacts);

        response.setContentType(request.getResponseContentType());
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(view);
        rd.include(request, response);

    }

    public void processAction(ActionRequest request, ActionResponse response)
        throws PortletException, IOException {

        String action;

        action = (String) request.getParameter("action");

        String page = request.getParameter("page");

        if (page == null) {
            page = PAGE_PROFILE;
        } else if ("auth".equals(action)) {
            request.getPortletSession().setAttribute(
                    "requestToken_" + getPortletIdentifier(request),
                    ServiceResolver.getResolver().getLinkedInService().getRequestToken(),
                    PortletSession.APPLICATION_SCOPE);
            LinkedInPreferencesForm form = new LinkedInPreferencesForm(request);
            request.getPortletSession().setAttribute(
                    FORM_LINKEDIN_PREFERENCES + getPortletIdentifier(request), form,
                    PortletSession.APPLICATION_SCOPE);
            response.setPortletMode(PortletMode.EDIT);
        } else if ("save".equals(action)) {
            try {
                try {
                    savePreferences(request, response);
                } catch (ServiceException e) {
                    handleException(request, e);
                }
            } catch (PortletModeException e) {
                handleException(request, e);
            }
        } else if ("myProfile".equals(action)) {
            page = PAGE_PROFILE;
        } else if ("myConnections".equals(action)) {
            page = PAGE_CONNECTIONS;
        }

        if (page != null) {
            request.getPortletSession().setAttribute("page_" + getPortletIdentifier(request), page,
                    PortletSession.PORTLET_SCOPE);
        }
    }

    private void savePreferences(ActionRequest request, ActionResponse response)
        throws PortletModeException, ServiceException {

        LinkedInPreferencesForm form = new LinkedInPreferencesForm(request);

        if (validateForm(request, form)) {

            LinkedInRequestToken requestToken =
                    (LinkedInRequestToken) request.getPortletSession().getAttribute(
                            "requestToken_" + getPortletIdentifier(request),
                            PortletSession.APPLICATION_SCOPE);

            String pin = request.getParameter("pinCode");

            LinkedInAccessToken accessToken;

            try {
                accessToken =
                        ServiceResolver.getResolver().getLinkedInService().getAccessToken(
                                requestToken, pin);
            } catch (LinkedInOAuthServiceException ase) {
                response.setPortletMode(PortletMode.EDIT);
                throw new ServiceException("linkedin.authentication.failed");

            }

            String tokenToken = requestToken.getToken();
            String secret = requestToken.getTokenSecret();
            String tokenURL = requestToken.getAuthorizationUrl();

            Properties configuration = new Properties();
            configuration.setProperty(LinkedInPreferencesForm.PARAM_PIN, form.getPin());
            configuration
                    .setProperty(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_TOKEN, tokenToken);
            configuration.setProperty(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_SECRET, secret);
            configuration.setProperty(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_URL, tokenURL);
            configuration.setProperty(LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_TOKEN, accessToken
                    .getToken());

            configuration.setProperty(LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_SECRET,
                    accessToken.getTokenSecret());
            ServiceResolver.getResolver().getPortalService().savePortletConfiguration(request,
                    configuration);

            resetSessionForm(request, FORM_LINKEDIN_PREFERENCES);
            response.setPortletMode(PortletMode.VIEW);

        } else {
            // store in session
            request.getPortletSession().setAttribute(
                    FORM_LINKEDIN_PREFERENCES + getPortletIdentifier(request), form,
                    PortletSession.APPLICATION_SCOPE);
            response.setPortletMode(PortletMode.EDIT);
            logger.debug(FORM_LINKEDIN_PREFERENCES + " is in edit mode");
        }
    }

    @Override
    protected void addConfiguration(MessageSource messageSource, Locale locale,
        Map<String, String> result) {
        result.put(LinkedInPreferencesForm.PARAM_PIN, messageSource.getMessage(
                "linkedIn.preferences.pin", null, locale));
        result.put(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_TOKEN, messageSource.getMessage(
                "linkedIn.preferences.requestTokenToken", null, locale));
        result.put(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_SECRET, messageSource.getMessage(
                "linkedIn.preferences.requestTokenSecret", null, locale));
        result.put(LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_URL, messageSource.getMessage(
                "linkedIn.preferences.requestTokenURL", null, locale));
        result.put(LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_TOKEN, messageSource.getMessage(
                "linkedIn.preferences.accessToken", null, locale));
        result.put(LinkedInPreferencesForm.PARAM_ACCESS_TOKEN_SECRET, messageSource.getMessage(
                "linkedIn.preferences.accessTokenSecret", null, locale));
    }

    @Override
    protected void addPreference(MessageSource messageSource, Locale locale,
        Map<String, String> result) {
    }

    @Override
    public String getAsyncTitle(RenderRequest request) {
        return this.getTitle(request);
    }

    protected boolean validateForm(ActionRequest request, LinkedInPreferencesForm form) {
        return form.validate();
    }

    protected String myEdit(RenderRequest request, RenderResponse response)
        throws PortletException, IOException {

        LinkedInPreferencesForm form = new LinkedInPreferencesForm();

        form.setPin(getStringConfiguration(request, LinkedInPreferencesForm.PARAM_PIN));
        form.setRequestTokenToken(getStringConfiguration(request,
                LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_TOKEN));
        form.setRequestTokenSecret(getStringConfiguration(request,
                LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_SECRET));
        form.setRequestTokenURL(getStringConfiguration(request,
                LinkedInPreferencesForm.PARAM_REQUEST_TOKEN_URL));

        registerSessionForm(request, FORM_LINKEDIN_PREFERENCES, form);

        LinkedInRequestToken requestToken;

        requestToken =
                (LinkedInRequestToken) request.getPortletSession().getAttribute(
                        "requestToken_" + getPortletIdentifier(request),
                        PortletSession.APPLICATION_SCOPE);

        if (requestToken == null) {
            requestToken =
                    new LinkedInRequestToken(form.getRequestTokenToken(), form
                            .getRequestTokenSecret());
            requestToken.setAuthorizationUrl(form.getRequestTokenURL());
        }

        request.setAttribute("requestToken", requestToken);

        return PAGE_PREFERENCES;

    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top