<?php
 
/**
 
 * This is the file that gets a response 
 
 * from netflix with OK, no get your user links
 
 *
 
 *
 
 * @copyright  2011 Aziz Hussain
 
 * @version    1.0
 
 * @link       http://azizsaleh.com
 
 * @email      [email protected]
 
 */ 
 
 
@session_start();
 
define ('BASE_DIR', dirname(__FILE__) .'/');
 
define ('USER_ID', session_id());
 
 
require_once ( BASE_DIR . 'Configuration.php');
 
require_once ( BASE_DIR . 'includes/NetflixAPI.php');
 
require_once ( BASE_DIR . 'includes/Request.php');
 
require_once ( BASE_DIR . 'includes/OAuthSimple.php');
 
 
require_once ( BASE_DIR . 'netflix/nonAuthenticatedCall.php');
 
require_once ( BASE_DIR . 'netflix/protectedCall.php');
 
require_once ( BASE_DIR . 'netflix/signedCall.php');
 
require_once ( BASE_DIR . 'netflix/getToken.php');
 
 
 
 
 /*
 
 This class handles netflix response
 
 */
 
 class netflixResponse
 
 {
 
    public $storage;
 
    public $configs;
 
    public $request;
 
    
 
    /*
 
    Consructor
 
    
 
    @param        string        authroziation_code
 
    @param        string        api_file = NULL
 
    */
 
    public function __construct($authorization_code, $api_file = NULL)
 
    {
 
        // Load configurations
 
        $this->configs             = new Configuration($api_file);
 
        
 
        // Load HTTP Request object
 
        $this->request             = new Request($this->configs);
 
                
 
        // Database handler
 
        $this->storage             = new storageObject($this->configs);
 
        
 
        // Load configs from db
 
        $code_info = $this->storage->getUserToken();
 
        $this->configs->oauth_token         = $code_info[0];
 
        $this->configs->oauth_token_secret     = $code_info[1];
 
 
        $this->_requestFinalTokens($authorization_code);
 
    }
 
    
 
    /*
 
    This function will request the final keys using 
 
    consumer key and consumer secret        
 
    
 
    @param        string        authorization_code
 
    */
 
    private function _requestFinalTokens($authorization_code)
 
    {
 
        $api_url = $this->composeVariables('http://api.netflix.com/oauth/access_token', 
 
                                           array('output' => 'json'));
 
 
        $this->request->makeRequest($api_url, array());
 
        
 
        $response = $this->request->getRawResponse();
 
        
 
        preg_match_all('/oauth_token":"(.*)","user_id.*oauth_token_secret":"(.*)"/', $response, $results);
 
 
        $oauth_token             = $results[1][0];
 
        $oauth_token_secret     = $results[2][0];
 
 
        $this->storage->addUserToken($oauth_token, $oauth_token_secret, 4);
 
        
 
        /*
 
        For some reason, the above user ID doesn't work most of the time..
 
        let's re-query and get the final netflix user_id ....
 
        */
 
        $Netflix = new NetflixAPI();
 
        $user_info = $Netflix->getCurrentUser();
 
 
        $netflix_userid = preg_replace('/.*users\//', '', $user_info->resource->link->href);
 
        
 
        $this->storage->addUserToken($oauth_token, $oauth_token_secret, 4, $netflix_userid);
 
        
 
        // Rediect user
 
        header("Location: " . $this->configs->app_redirect);
 
        exit();
 
    }
 
    
 
    /*
 
    This function will compose variables
 
    and add required keys depending on call
 
    
 
    @param        string    api_url
 
    @param        array    request_vars    
 
    
 
    @return        string
 
    */
 
    private function composeVariables($api_url, $request_vars = array())
 
    {
 
        $signatures = array(
 
                        'consumer_key'    => $this->configs->consumer_key,  
 
                        'shared_secret'    => $this->configs->shared_key );
 
        
 
 
        // Add secret codes for user
 
        if (isset($this->configs->oauth_token) && isset($this->configs->oauth_token_secret))
 
        {
 
            $signatures['access_token']     = $this->configs->oauth_token;
 
            $signatures['access_secret']     = $this->configs->oauth_token_secret;
 
        }
 
 
        $auth_object = new OAuthSimple($this->configs->consumer_key, $this->configs->shared_key);  
 
        $request = $auth_object->sign(
 
                array(    'path'            => $api_url,  
 
                        'parameters'     => $request_vars,  
 
                        'signatures'     => $signatures));
 
 
        return $request['signed_url'];
 
    }
 
 }
 
 
 
 
 
 // Check if we have a response
 
 if (isset($_GET['oauth_token'])) {
 
    $get_auth = new netflixResponse($_GET['oauth_token']); 
 
 }
 
 |