2013-07-24 22 views
0

我下面的教程「簡單的方法來轉換一個Twitter的OAuth庫到Symfony的2包」 tuto錯字錯誤命名空間中costum束Symfony2的

但不是爲我工作,我總是得到這個錯誤:

「要在文件」D:\ xampp \ htdocs \ FEB/src \ FEB \ TwitterBundle \ Api \ TwitterOAuth.php「中定義的自動裝載器預期類」FEB \ TwitterBundle \ Api \ TwitterOAuth「但班級不在其中,班級名稱或名稱空間可能有拼寫錯誤。「

我花了很多天,我無法瞭解發生了什麼。我敢肯定,這是一個名稱空間問題,但我變得瘋了。

我twitterapi.php

namespace FEB\TwitterBundle\Api; 

use FEB\TwitterBundle\Api\TwitterOAuth; 

class TwitterApi { 

    protected $apiKey; 
    protected $apiKeySecret; 
    protected $apiToken; 
    protected $apiTokenSecret; 

    public function __construct($apiKey, $apiKeySecret, $apiToken, $apiTokenSecret){ 
     $this->apiKey = $apiKey; 
     $this->apiKeySecret = $apiKeySecret; 
     $this->apiToken = $apiToken; 
     $this->apiTokenSecret = $apiTokenSecret; 
    } 

    public function getapiKey(){ 
     return $this->apiKey; 
    } 

    public function getUsers($users, $url = 'users/lookup') { 
     $connection = new TwitterOAuth($this->apiKey, $this->apiKeySecret, $this->apiToken, $this->apiTokenSecret); 
     $users = $connection->get($url, array('screen_name' => $users)); 
     return $users; 
    } 

} 

任何幫助,請?

編輯: 我TwitterOAuth.php

<?php 

/* 
* Abraham Williams ([email protected]) http://abrah.am 
* 
* The first PHP Library to support OAuth for Twitter's REST API. 
*/ 

/* Load OAuth lib. You can find it at http://oauth.net */ 

namespace FEB\TwitterBundle\Api\Meta; 

/** 
* Twitter OAuth class 
*/ 
class TwitterOAuth { 
    /* Contains the last HTTP status code returned. */ 
    public $http_code; 
    /* Contains the last API call. */ 
    public $url; 
    /* Set up the API root URL. */ 
    public $host = "https://api.twitter.com/1.1/"; 
    /* Set timeout default. */ 
    public $timeout = 30; 
    /* Set connect timeout. */ 
    public $connecttimeout = 30; 
    /* Verify SSL Cert. */ 
    public $ssl_verifypeer = FALSE; 
    /* Respons format. */ 
    public $format = 'json'; 
    /* Decode returned json data. */ 
    public $decode_json = TRUE; 
    /* Contains the last HTTP headers returned. */ 
    public $http_info; 
    /* Set the useragnet. */ 
    public $useragent = 'TwitterOAuth v0.2.0-beta2'; 
    /* Immediately retry the API call if the response was not successful. */ 
    //public $retry = TRUE; 




    /** 
    * Set API URLS 
    */ 
    function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; } 
    function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; } 
    function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; } 
    function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; } 

    /** 
    * Debug helpers 
    */ 
    function lastStatusCode() { return $this->http_status; } 
    function lastAPICall() { return $this->last_api_call; } 

    /** 
    * construct TwitterOAuth object 
    */ 
    function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { 
    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); 
    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); 
    if (!empty($oauth_token) && !empty($oauth_token_secret)) { 
     $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); 
    } else { 
     $this->token = NULL; 
    } 
    } 


    /** 
    * Get a request_token from Twitter 
    * 
    * @returns a key/value array containing oauth_token and oauth_token_secret 
    */ 
    function getRequestToken($oauth_callback) { 
    $parameters = array(); 
    $parameters['oauth_callback'] = $oauth_callback; 
    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * Get the authorize URL 
    * 
    * @returns a string 
    */ 
    function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { 
    if (is_array($token)) { 
     $token = $token['oauth_token']; 
    } 
    if (empty($sign_in_with_twitter)) { 
     return $this->authorizeURL() . "?oauth_token={$token}"; 
    } else { 
     return $this->authenticateURL() . "?oauth_token={$token}"; 
    } 
    } 

    /** 
    * Exchange request token and secret for an access token and 
    * secret, to sign API calls. 
    * 
    * @returns array("oauth_token" => "the-access-token", 
    *    "oauth_token_secret" => "the-access-secret", 
    *    "user_id" => "9436992", 
    *    "screen_name" => "abraham") 
    */ 
    function getAccessToken($oauth_verifier) { 
    $parameters = array(); 
    $parameters['oauth_verifier'] = $oauth_verifier; 
    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * One time exchange of username and password for access token and secret. 
    * 
    * @returns array("oauth_token" => "the-access-token", 
    *    "oauth_token_secret" => "the-access-secret", 
    *    "user_id" => "9436992", 
    *    "screen_name" => "abraham", 
    *    "x_auth_expires" => "0") 
    */ 
    function getXAuthToken($username, $password) { 
    $parameters = array(); 
    $parameters['x_auth_username'] = $username; 
    $parameters['x_auth_password'] = $password; 
    $parameters['x_auth_mode'] = 'client_auth'; 
    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * GET wrapper for oAuthRequest. 
    */ 
    function get($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'GET', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * POST wrapper for oAuthRequest. 
    */ 
    function post($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'POST', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * DELETE wrapper for oAuthReqeust. 
    */ 
    function delete($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'DELETE', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * Format and sign an OAuth/API request 
    */ 
    function oAuthRequest($url, $method, $parameters) { 
    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { 
     $url = "{$this->host}{$url}.{$this->format}"; 
    } 
    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); 
    $request->sign_request($this->sha1_method, $this->consumer, $this->token); 
    switch ($method) { 
    case 'GET': 
     return $this->http($request->to_url(), 'GET'); 
    default: 
     return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); 
    } 
    } 

    /** 
    * Make an HTTP request 
    * 
    * @return API results 
    */ 
    function http($url, $method, $postfields = NULL) { 
    $this->http_info = array(); 
    $ci = curl_init(); 
    /* Curl settings */ 
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); 
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); 
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); 
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); 
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); 
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); 
    curl_setopt($ci, CURLOPT_HEADER, FALSE); 

    switch ($method) { 
     case 'POST': 
     curl_setopt($ci, CURLOPT_POST, TRUE); 
     if (!empty($postfields)) { 
      curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
     } 
     break; 
     case 'DELETE': 
     curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
     if (!empty($postfields)) { 
      $url = "{$url}?{$postfields}"; 
     } 
    } 

    curl_setopt($ci, CURLOPT_URL, $url); 
    $response = curl_exec($ci); 
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); 
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); 
    $this->url = $url; 
    curl_close ($ci); 
    return $response; 
    } 

    /** 
    * Get the header info to store. 
    */ 
    function getHeader($ch, $header) { 
    $i = strpos($header, ':'); 
    if (!empty($i)) { 
     $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); 
     $value = trim(substr($header, $i + 2)); 
     $this->http_header[$key] = $value; 
    } 
    return strlen($header); 
    } 
} 

EDIT2:This is the folder structure

+0

再讀一次錯誤消息:) P roboa在你的TwitterOAuth.php中,你在命名空間或類中輸入錯誤的名稱。 –

+0

您確定在'FEB \ TwitterBundle \ Api \ TwitterOAuth.php'文件中正確寫入'class TwitterOAuth {// ...}'?也許你用另一個名字來聲明這個類。 –

+0

謝謝你的迴應,夥計們。我認爲一切都是正確的。我已附上課程。也許6隻眼睛看到的不僅僅是兩個,;) – cmaciasg

回答

0

取所有的意見,你的TwitterOAuth.php必須是這樣的:

<?php 

/* 
* Abraham Williams ([email protected]) http://abrah.am 
* 
* The first PHP Library to support OAuth for Twitter's REST API. 
*/ 

/* Load OAuth lib. You can find it at http://oauth.net */ 
//require_once('OAuth.php'); 

namespace FEB\TwitterBundle\Api; 

use FEB\TwitterBundle\Api\Meta\OAuthConsumer; 
use FEB\TwitterBundle\Api\Meta\OAuthRequest; 
use FEB\TwitterBundle\Api\Meta\OAuthSignatureMethod_HMAC_SHA1; 
use FEB\TwitterBundle\Api\Meta\OAuthUtil; 

/** 
* Twitter OAuth class 
*/ 
class TwitterOAuth { 
    /* Contains the last HTTP status code returned. */ 
    public $http_code; 
    /* Contains the last API call. */ 
    public $url; 
    /* Set up the API root URL. */ 
    public $host = "https://api.twitter.com/1.1/"; 
    /* Set timeout default. */ 
    public $timeout = 30; 
    /* Set connect timeout. */ 
    public $connecttimeout = 30; 
    /* Verify SSL Cert. */ 
    public $ssl_verifypeer = FALSE; 
    /* Respons format. */ 
    public $format = 'json'; 
    /* Decode returned json data. */ 
    public $decode_json = TRUE; 
    /* Contains the last HTTP headers returned. */ 
    public $http_info; 
    /* Set the useragnet. */ 
    public $useragent = 'TwitterOAuth v0.2.0-beta2'; 
    /* Immediately retry the API call if the response was not successful. */ 
    //public $retry = TRUE; 




    /** 
    * Set API URLS 
    */ 
    function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; } 
    function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; } 
    function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; } 
    function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; } 

    /** 
    * Debug helpers 
    */ 
    function lastStatusCode() { return $this->http_status; } 
    function lastAPICall() { return $this->last_api_call; } 

    /** 
    * construct TwitterOAuth object 
    */ 
    function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { 
    $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); 
    $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); 
    if (!empty($oauth_token) && !empty($oauth_token_secret)) { 
     $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); 
    } else { 
     $this->token = NULL; 
    } 
    } 


    /** 
    * Get a request_token from Twitter 
    * 
    * @returns a key/value array containing oauth_token and oauth_token_secret 
    */ 
    function getRequestToken($oauth_callback) { 
    $parameters = array(); 
    $parameters['oauth_callback'] = $oauth_callback; 
    $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * Get the authorize URL 
    * 
    * @returns a string 
    */ 
    function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) { 
    if (is_array($token)) { 
     $token = $token['oauth_token']; 
    } 
    if (empty($sign_in_with_twitter)) { 
     return $this->authorizeURL() . "?oauth_token={$token}"; 
    } else { 
     return $this->authenticateURL() . "?oauth_token={$token}"; 
    } 
    } 

    /** 
    * Exchange request token and secret for an access token and 
    * secret, to sign API calls. 
    * 
    * @returns array("oauth_token" => "the-access-token", 
    *    "oauth_token_secret" => "the-access-secret", 
    *    "user_id" => "9436992", 
    *    "screen_name" => "abraham") 
    */ 
    function getAccessToken($oauth_verifier) { 
    $parameters = array(); 
    $parameters['oauth_verifier'] = $oauth_verifier; 
    $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * One time exchange of username and password for access token and secret. 
    * 
    * @returns array("oauth_token" => "the-access-token", 
    *    "oauth_token_secret" => "the-access-secret", 
    *    "user_id" => "9436992", 
    *    "screen_name" => "abraham", 
    *    "x_auth_expires" => "0") 
    */ 
    function getXAuthToken($username, $password) { 
    $parameters = array(); 
    $parameters['x_auth_username'] = $username; 
    $parameters['x_auth_password'] = $password; 
    $parameters['x_auth_mode'] = 'client_auth'; 
    $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); 
    $token = OAuthUtil::parse_parameters($request); 
    $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); 
    return $token; 
    } 

    /** 
    * GET wrapper for oAuthRequest. 
    */ 
    function get($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'GET', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * POST wrapper for oAuthRequest. 
    */ 
    function post($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'POST', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * DELETE wrapper for oAuthReqeust. 
    */ 
    function delete($url, $parameters = array()) { 
    $response = $this->oAuthRequest($url, 'DELETE', $parameters); 
    if ($this->format === 'json' && $this->decode_json) { 
     return json_decode($response); 
    } 
    return $response; 
    } 

    /** 
    * Format and sign an OAuth/API request 
    */ 
    function oAuthRequest($url, $method, $parameters) { 
    if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { 
     $url = "{$this->host}{$url}.{$this->format}"; 
    } 
    $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); 
    $request->sign_request($this->sha1_method, $this->consumer, $this->token); 
    switch ($method) { 
    case 'GET': 
     return $this->http($request->to_url(), 'GET'); 
    default: 
     return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); 
    } 
    } 

    /** 
    * Make an HTTP request 
    * 
    * @return API results 
    */ 
    function http($url, $method, $postfields = NULL) { 
    $this->http_info = array(); 
    $ci = curl_init(); 
    /* Curl settings */ 
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); 
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); 
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); 
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); 
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); 
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); 
    curl_setopt($ci, CURLOPT_HEADER, FALSE); 

    switch ($method) { 
     case 'POST': 
     curl_setopt($ci, CURLOPT_POST, TRUE); 
     if (!empty($postfields)) { 
      curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
     } 
     break; 
     case 'DELETE': 
     curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
     if (!empty($postfields)) { 
      $url = "{$url}?{$postfields}"; 
     } 
    } 

    curl_setopt($ci, CURLOPT_URL, $url); 
    $response = curl_exec($ci); 
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); 
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); 
    $this->url = $url; 
    curl_close ($ci); 
    return $response; 
    } 

    /** 
    * Get the header info to store. 
    */ 
    function getHeader($ch, $header) { 
    $i = strpos($header, ':'); 
    if (!empty($i)) { 
     $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); 
     $value = trim(substr($header, $i + 2)); 
     $this->http_header[$key] = $value; 
    } 
    return strlen($header); 
    } 
} 

感謝@Pazi和@ Rpg600 :)

+0

我試過了,但它拋出這個錯誤: FatalErrorException:錯誤:類'FEB \ TwitterBundle \ Api \ Meta \ OAuthSignatureMethod_HMAC_SHA1'找不到D:\ xampp \ htdocs \ FEB \ src \ FEB \ TwitterBundle \ Api \ TwitterOAuth.php line 54 這是地獄! – cmaciasg

+0

那麼,至少我們已經從第一篇文章中取得了一些進展。:) 現在的目標是找到該死的FEB \ TwitterBundle \ Api \ Meta \ OAuthSignatureMethod_HMAC_SHA1。 :) – cmaciasg

+0

一個問題:OAuthSignatureMethod_HMAC_SHA1類也必須具有名稱空間嗎? – cmaciasg