API为r_basicprofile调用#LinkedIn

时间:2018-10-22 19:19:27

标签: php api oauth-2.0 linkedin

我已经仔细阅读了有关API调用的LinkedIn开发人员文档,在文档之后,我能够请求访问代码,与服务器进行交换并设法获得访问令牌。

此后,我设法通过以下代码使用json格式的访问令牌来获取一些成员的个人资料。

ToList()

无论如何,问题是:尝试进行任何不同的呼叫都将失败,尽管它们是根据LinkedIn的文档进行的,并且允许它们用于r_basicprofile,但仍然存在错误:

  

警告:   file_get_contents(https://api.linkedin.com/v2/people/~:(industryId~)?format=json):   无法打开流:HTTP请求失败! HTTP / 1.0 403禁止

我尝试了以下一些方法,但是没有正确的方法

$api_url = 'https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address)?format=json';
$context = stream_context_create(array(
    'http' => array(
        'header' => "Authorization: Bearer " . $accessToken
    ),
));

$result = file_get_contents($api_url, false, $context);
echo $result;

我什至尝试通过以下GET请求获取memeber的个人资料,但返回了相同的403。

  

https://api.linkedin.com/v2/people/(id:{个人ID})

     

https://api.linkedin.com/v2/people/(id:{profileID})?projection = {id,firstName,lastName,industryId〜)

很高兴了解如何拨打电话以及出了什么问题。

2 个答案:

答案 0 :(得分:0)

问题在于,V2 API要求您与linkedin建立伙伴关系。这表示您收到403禁止的错误。

  

与LinkedIn的合作为您提供了其他API   功能和数据访问,增加的通话限制和专用   支持。详细了解我们的各种合作伙伴计划和用例   并查看是否适合您的应用。仅接受申请   当我们认为他们正在为成员,开发人员和   领英。

来源: https://developer.linkedin.com/partner-programs

很高兴为您提供所需的api的V1版本。

https://api.linkedin.com/v1/people/{ID}?format=json

答案 1 :(得分:0)

将LinkedIN JS SDK添加到您的网站,应该看起来像这样:

 var LinkedINJSAPI = {
   onLoad: function(){
     IN.User.authorize(LinkedINJSAPI.request, this );
   },
   request: function(){
    var url = 'people/~:(firstName,lastName,emailAddress,positions,location)?format=json';
    IN.API.Raw(url).
      method('GET').
      result(function(result){
        console.log( JSON.stringify( result ) );
      }).
      error(function(error){
        console.error( error.message );
      });
   }
 }

然后在您的JavaScript中添加以下内容:

public static void makeTextViewResizable(final TextView tv, final int maxLine, final String expandText, final boolean viewMore) {

    if (tv.getTag() == null) {
        tv.setTag(tv.getText());
    }
    ViewTreeObserver vto = tv.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @SuppressWarnings("deprecation")
        @Override
        public void onGlobalLayout() {

            ViewTreeObserver obs = tv.getViewTreeObserver();
            obs.removeGlobalOnLayoutListener(this);
            if (maxLine == 0) {
                int lineEndIndex = tv.getLayout().getLineEnd(0);
                String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                tv.setText(text);
                tv.setMovementMethod(LinkMovementMethod.getInstance());
                tv.setText(
                        addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, maxLine, expandText,
                                viewMore), TextView.BufferType.SPANNABLE);
            } else if (maxLine > 0 && tv.getLineCount() >= maxLine) {
                int lineEndIndex = tv.getLayout().getLineEnd(maxLine - 1);
                String text = tv.getText().subSequence(0, lineEndIndex - expandText.length() + 1) + " " + expandText;
                tv.setText(text);
                tv.setMovementMethod(LinkMovementMethod.getInstance());
                tv.setText(
                        addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, maxLine, expandText,
                                viewMore), TextView.BufferType.SPANNABLE);
            } else {
                int lineEndIndex = tv.getLayout().getLineEnd(tv.getLayout().getLineCount() - 1);
                String text = tv.getText().subSequence(0, lineEndIndex) + " " + expandText;
                tv.setText(text);
                tv.setMovementMethod(LinkMovementMethod.getInstance());
                tv.setText(
                        addClickablePartTextViewResizable(Html.fromHtml(tv.getText().toString()), tv, lineEndIndex, expandText,
                                viewMore), TextView.BufferType.SPANNABLE);
            }
        }
    });

}

private static SpannableStringBuilder addClickablePartTextViewResizable(final Spanned strSpanned, final TextView tv,
                                                                        final int maxLine, final String spanableText, final boolean viewMore) {
    String str = strSpanned.toString();
    SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned);

    if (str.contains(spanableText)) {


        ssb.setSpan(new MySpannable(false){
            @Override
            public void onClick(View widget) {
                if (viewMore) {
                    tv.setLayoutParams(tv.getLayoutParams());
                    tv.setText(tv.getTag().toString(), TextView.BufferType.SPANNABLE);
                    tv.invalidate();
                    makeTextViewResizable(tv, -1, "See Less", false);
                } else {
                    tv.setLayoutParams(tv.getLayoutParams());
                    tv.setText(tv.getTag().toString(), TextView.BufferType.SPANNABLE);
                    tv.invalidate();
                    makeTextViewResizable(tv, 3, ".. See More", true);
                }
            }
        }, str.indexOf(spanableText), str.indexOf(spanableText) + spanableText.length(), 0);

    }
    return ssb;

}

您可以在这里看到有效的演示...

https://codepen.io/craigiswayne/pen/KGbqRq