Как прикрепить картинку к общему ресурсу LinkedIn из сообщения в блоге?

0

У меня есть блог, который я хочу сделать доступным через LinkedIn. Документы LinkedIn представляют, в то время как просто указано, что у меня недостаточно подробностей, чтобы понять мой вариант использования. Для моего случая использования я должен динамически помещать изображение и описание в каждое сообщение в блоге, которое сейчас не заполняется. Это Угловой проект.

Мой текущий код: post.html

<script>
  delete IN;
  $.getScript("https://platform.linkedin.com/in.js");
</script>
<script type="IN/Share" data-url={{webAddress}} data-counter="right"></script>

post.js//У меня есть все мои данные в переменных $ scope в этой области, включая//изображение и описание, которые я хотел бы прикрепить к сообщению.

Вот что показано в документах LinkedIn как правильный способ: post.html

<script type="text/javascript" src="//platform.linkedin.com/in.js">
  api_key: YOUR_API_KEY_HERE
  authorize: true
  onLoad: onLinkedInLoad
</script>

<script type="text/javascript">

  // Setup an event listener to make an API call once auth is complete
    function onLinkedInLoad() {
      IN.Event.on(IN, "auth", shareContent);
    }

  // Handle the successful return from the API call
  function onSuccess(data) {
    console.log(data);
  }

  // Handle an error response from the API call
  function onError(error) {
    console.log(error);
  }

  // Use the API call wrapper to share content on LinkedIn
  function shareContent() {

    // Build the JSON payload containing the content to be shared
    var payload = { 
      "comment": "Check out developer.linkedin.com! http://linkd.in/1FC2PyG", 
      "visibility": { 
        "code": "anyone"
      } 
    };

    IN.API.Raw("/people/~/shares?format=json")
      .method("POST")
      .body(JSON.stringify(payload))
      .result(onSuccess)
      .error(onError);
  }

</script>

Насколько я понимаю, мне нужно заполнить полезный объект нужными данными/ссылками. Я не знаю, как это сделать, основываясь на том, что в документах.

Вот несколько вещей, которые я пробовал/думал о том, где я сейчас застрял:

1) Получите данные из post.js и поместите их в объект полезной нагрузки между тегами сценария в post.html. После проведения некоторых исследований это невозможно. Хотя я приветствую исправление, если я ошибаюсь.

2) Принесите объект IN в угловое положение и заполните полезную нагрузку в post.js. Это звучит очень здорово, но LinkedIn не предоставляет html для вызова функции в post.js с помощью Angular. Кроме того, код LinkedIn, представленный, заботится о форматировании кнопки и о том, что происходит после нажатия на нее.

3) Сделайте HTTP-вызов внутри тегов скрипта с помощью JQuery. Я редко использую JQuery и никогда раньше не использовал http для JQuery. Если это даже возможный способ подумать об этой проблеме, вот что я придумал:

<script type="IN/Share" data-url={{webAddress}} data-counter="right">
                  $.get( "https://public-api.wordpress.com/rest/v1.1/sites/myPost", function( response ) {
                    var post = _.first(_.filter(response.posts, function(n){return n.title.replace(/ /g,"-").replace(/[:]/g, "").toLowerCase() === $stateParams.id}));
                    var post1 = _.assign(post, {category: _.first(_.keys(post.categories)), pic: _.first(_.values(post.attachments)).URL, credit: _.first(_.values(post.attachments)).caption, linkCredit: _.first(_.values(post.attachments)).alt, fullStory: post.content.replace(/<(?!\s*\/?\s*p\b)[^>]*>/gi,'')});
                    **var image = post1.pic;**
                    **var title = post1.title;**
                    **var webAddress = window.location.href;**

                    function onLinkedInLoad() {
                      IN.Event.on(IN, "auth", shareContent);
                    }

                   function onSuccess(data) {
                    console.log(data);
                   }

                   function onError(error) {
                    console.log(error);
                   }

                   function shareContent(title, image, webAddress) {

                    var payload = {                         
                      "content": {
                        "title": title,
                        "submitted-image-url": image,
                        "submitted-url": webAddress
                      }
                    };

                    IN.API.Raw("/people/~/shares?format=json")
                      .method("POST")
                      .body(JSON.stringify(payload))
                      .result(onSuccess)
                      .error(onError);
                   }
                  });

                  </script>

Это решение также не привело к решению. Куда пойти отсюда, у меня нет идей. Я уверен, что это просто, но очень похоже на то, что мне нужна небольшая рука.

Теги:
linkedin-api

1 ответ

1
Лучший ответ

К сожалению, я не работал с linkedin API.

Возможно, не все будет правильно в моем примере. Но я должен использовать переменную IN в angular и писать об обертке API вызова.

Пример использования плагинов см. на странице Плагины LinkedIn.

Живой пример на jsfiddle.

  //CallBackHell
  function LinkedInServiceFunc(callback) {
    callback && IN.Event.onDOMReady(callback);
  }

  angular.module('ExampleApp', [])
    .controller('ExampleController', function($scope, LinkedInService, ShareLinkedINService) {
      console.log('ExampleController IN', IN);
      console.log('ExampleController LinkedInService', LinkedInService);
      LinkedInService.promise.then(function(LIN) {
        console.log('Complete loading script for LinkedIn in ExampleController', LIN.Objects)
      });

      //Then you can interact with IN object as angular service. Like this
      $scope.shareContent = function() { // Use the API call wrapper to share content on LinkedIn

        // Build the JSON payload containing the content to be shared
        var payload = {
          "comment": $scope.comment,
          "visibility": {
            "code": 'anyone'
          }
        };
        // Handle the successful return from the API call
        function onSuccess(data) {
          console.log(data);
        }

        // Handle an error response from the API call
        function onError(error) {
          console.log(error);
        }
        console.log('shareContent', payload);
        LinkedInService.promise.then(function(LIN) {
          LIN.API.Raw("/people/~/shares?format=json")
            .method("POST")
            .body(JSON.stringify(payload))
            .result(onSuccess)
            .error(onError);
        });
      }
      $scope.shareContentService = function() {
        //It better way, i think
        ShareLinkedINService.shareContent($scope.comment, 'anyone').then(function(data) {
          console.log('success', data);
        }).catch(function(data) {
          console.err('error', data);
        });
      }
    })
    .service('LinkedInService', function($q) {
      var defer = $q.defer();
      LinkedInServiceFunc(function() {
        defer.resolve(IN);
      });
      return {
        promise: defer.promise
      };
    })
    //You can create wrapper on IN API
    .service('ShareLinkedINService', function(LinkedInService, $q) {
      return {
        shareContent: function(comment, visible) {
          var defer = $q.defer();
          var payload = {
            "comment": comment,
            "visibility": {
              "code": visible
            }
          };
          LinkedInService.promise.then(function(LIN) {
            LIN.API.Raw("/people/~/shares?format=json")
              .method("POST")
              .body(JSON.stringify(payload))
              .result(defer.resolve)
              .error(defer.reject);
          });
          return defer.promise;

        }
      }
    })
    .directive('linkedInShareButton', function(LinkedInService) {
      return {
        restrict: "E",
        replace: false,
        scope: {
          shareUrl: "@",
          counter:"@"
        },
        link: function(scope, elem, attr) {
          var script = document.createElement('script');
          script.setAttribute('type', 'IN/Share');
          script.setAttribute('data-url', scope.shareUrl);
          script.setAttribute('data-counter', scope.counter);
          elem.append(script);
        },
      };
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<script type="text/javascript" src="//platform.linkedin.com/in.js">
  authorize: false
  onLoad: LinkedInServiceFunc
    //I don't have api_key, because i delete it
    // api_key: YOUR_API_KEY_HERE
    // authorize: true
    // onLoad: onLinkedInLoad
</script>

<body ng-app="ExampleApp">
  <div>
    <div ng-controller="ExampleController">
      <input ng-model="comment">
      <button ng-click="shareContent()">
        shareContent
      </button>
      <button ng-click="shareContentService()">
        shareContentService
      </button>
      <script type="IN/Share" data-url="www.mail.ru" data-counter="top"></script>
      <linked-in-share-button share-url="www.mail.ru" counter="top"></linked-in-share-button>
    </div>
  </div>
</body>
  • 0
    Спасибо за ответ. Я проверяю это. Отличный материал! Мой главный вопрос здесь: как это работает с сохранением формата кнопки общего доступа LinkedIn?
  • 0
    @rashadb Я обновляю свой ответ. Пожалуйста, проверьте.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню