2014-01-21 2 views
0

에 의해 반환 된 레코드의 수를 제어 할 수있는 것은 작동 linkedIn documentation에서 간단한 쿼리입니다. 그러나 그 순간 나는 다음과 같은 매개 변수를 수를 연결하고 시작합니다나는 링크드 인 API를 여기

class Auth extends CI_Controller { 

    function __construct() { 
     parent:: __construct(); 
     $this->load->library('linkedin'); // load library 
     session_name('linkedin'); 
     session_start(); 
    } 

    // linkedin login script 
    function index() { 
     // OAuth 2 Control Flow 
     if (isset($_GET['error'])) { 
      // LinkedIn returned an error 
      // load any error view here 
      exit; 
     } elseif (isset($_GET['code'])) { 
      // User authorized your application 
      if ($_SESSION['state'] == $_GET['state']) { 
       // Get token so you can make API calls 
       $this->linkedin->getAccessToken(); 
      } else { 

       // CSRF attack? Or did you mix up your states? 
       exit; 
      } 
     } else { 
      if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) { 
       // Token has expired, clear the state 
       $_SESSION = array(); 
      } 
      if (empty($_SESSION['access_token'])) { 
       // Start authorization process 
       $this->linkedin->getAuthorizationCode(); 
      } 
     } 

     // this is where I am fetching linkedIn data 
     $groupData = $this->linkedin->fetch('GET', "/v1/groups/{id}/posts?count=20&start=0"); 

     // this is where I am sending the data to the idea model to be saved 
     if ($groupData) { 
     var_dump($groupData); exit(); 
     // foreach ($groupData->values as $data) { 
     // var_dump($data->creator->firstName); exit(); 
     // } 

     $this->load->model('idea_model'); 
     $this->idea_model->store_ideas($groupData); 

     } else { 
     // linked return an empty array of profile data 
     } 

    } 

} 

링크드 라이브러리가 있습니다 :

여기
A PHP Error was encountered 

Severity: Warning 

Message: file_get_contents(https://api.linkedin.com/v1/groups/{id}/posts&count=20&start=0?oauth2_access_token=xxxxx8&format=json): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request 

Filename: libraries/Linkedin.php 

Line Number: 85 

내 전체 코드입니다 :

$groupData = $this->linkedin->fetch('GET', "/v1/groups/{id}/posts?count=20&start=0"); 

나는이 오류 해당 설명서에 linkedIn에서 제공 한 코드 샘플 :

<?php 

defined('BASEPATH') OR exit('No direct script access allowed'); 

/** 
* CodeIgniter Linked API Class 
* 
* 
* @package   CodeIgniter 
* @subpackage  Libraries 
* @category  Libraries 
* @author   Muhamamd Hafeez 
*/ 
class Linkedin { 

    function __construct(){ 

    } 

    public function getAuthorizationCode() { 
    $params = array('response_type' => 'code', 
     'client_id' => API_KEY, 
     'scope' => SCOPE, 
     'state' => uniqid('', true), // unique long string 
     'redirect_uri' => REDIRECT_URI, 
    ); 
    // Authentication request 
    $url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params); 

    // Needed to identify request when it returns to us 
    $_SESSION['state'] = $params['state']; 

    // Redirect user to authenticate 
    header("Location: $url"); 
    exit; 
    } 

    public function getAccessToken() { 
    $params = array('grant_type' => 'authorization_code', 
     'client_id' => API_KEY, 
     'client_secret' => API_SECRET, 
     'code' => $_GET['code'], 
     'redirect_uri' => REDIRECT_URI, 
    ); 
    // Access Token request 
    $url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params); 

    // Tell streams to make a POST request 
    $context = stream_context_create(
      array('http' => 
       array('method' => 'POST', 
       ) 
      ) 
    ); 

    // Retrieve access token information 
    $response = file_get_contents($url, false, $context); 

    // Native PHP object, please 
    $token = json_decode($response); 

    // Store access token and expiration time 
    $_SESSION['access_token'] = $token->access_token; // guard this! 
    $_SESSION['expires_in'] = $token->expires_in; // relative time (in seconds) 
    $_SESSION['expires_at'] = time() + $_SESSION['expires_in']; // absolute time 
    return true; 
    } 

    public function fetch($method, $resource, $body = '') { 
    $params = array('oauth2_access_token' => $_SESSION['access_token'], 
     'format' => 'json', 
    ); 

    // Need to use HTTPS 
    $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params); 
    // Tell streams to make a (GET, POST, PUT, or DELETE) request 
    $context = stream_context_create(
      array('http' => 
       array('method' => $method, 
       ) 
      ) 
    ); 

    // Hocus Pocus 
    $response = file_get_contents($url, false, $context); 

    // Native PHP object, please 
    return json_decode($response); 
    } 

} 

/* End of file Linked.php */ 
/* Location: ./application/libraries/linkedin.php */ 

제발 도와주세요. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

(!) 참고 : 나는 선택 $params 매개 변수를 사용하는 fetch 방법을 변경할 것입니다 당신이 세션을 사용하고 있기 때문에, 내가 언급을 볼 ['으로 session_start() ;]] (http://www.php.net/session_start) --- 세션을 포함시키지 않았다면 세션이 작동해야합니다. –

+0

'session_start();'가 포함되었습니다 - 이것을 반영하도록 코드를 업데이트합니다 –

+0

당신이 게시 한 오류가''/ v1/groups/{id}/posts & count = 20 & start =/v1/groups/{id}/posts? count = 20 & start = 0 "'(? 대신주의하십시오)를 두 번째 매개 변수로 사용하십시오. –

답변

1

문제는 매개 변수 목록에 두 개의 ? 2 개가있는 것입니다.

public function fetch($method, $resource, $params = array(), $body = '') { 
    // Cast, just in case 
    $params = (array)$params; 
    // Add mandatory parameters 
    $params['oauth2_access_token'] = $_SESSION['access_token']; 
    $params['format'] = 'json'; 

    // Need to use HTTPS 
    $url = 'https://api.linkedin.com' . $resource . '?' . http_build_query($params); 
    // Tell streams to make a (GET, POST, PUT, or DELETE) request 
    $context = stream_context_create(
      array('http' => 
       array('method' => $method, 
       ) 
      ) 
    ); 

    // Hocus Pocus 
    $response = file_get_contents($url, false, $context); 

    // Native PHP object, please 
    return json_decode($response); 
} 

그래서 같이 호출 :

$groupData = $this->linkedin->fetch('GET', "/v1/groups/{id}/posts", array("count" => 20, "start" => 0)); 
+0

작은 수정 -'$ params [ 'format'] = $ _SESSION [ 'json'];'$ params [ 'format'] = 'json'; ' –

+1

좋은 캐치. 답변이 수정되었습니다. –