Optei essa forma pois eu acho que didaticamente essa maneira e muito melhor. Entao lembre-se de encapsular as coisa certas usando classes genericas para poder reaproveitar o codigo depois. E possivel que muito seja resolvido usando Zend_Rest, mas eu nao cheguei a estudar essa possibilidade.<?phpclass IndexController extends Zend_Controller_Action{ public $consumer; public $config; public function init() { $config = array( 'callbackUrl' => 'http://twitter.cesarscur.com/index/callback', 'requestTokenUrl' => 'http://twitter.com/oauth/request_token', 'authorizeUrl' => 'https://api.twitter.com/oauth/authorize', 'accessTokenUrl' => 'https://api.twitter.com/oauth/access_token', 'consumerKey' => '', 'consumerSecret' => '', ); $this->config = $config; $this->consumer = new Zend_Oauth_Consumer($config); die('Voce lembrou de settar a sua Key e Secret? Procure no indexController::init()em application/controller/indexController.php'); } public function indexAction() { $params = $this->getRequest()->getParams(); if (isset($_SESSION['TWITTER_ACCESS_TOKEN'])) { if ($this->getRequest()->isPost()) { $token = unserialize($_SESSION['TWITTER_ACCESS_TOKEN']); $client = $token->getHttpClient($this->config); $client->setUri('http://api.twitter.com/1/statuses/update.xml'); $client->setMethod(Zend_Http_Client::POST); $client->setParameterPost('status', $params['tweetText']); $response = $client->request(); $data = simplexml_load_string($response->getBody()); } } else { $this->_forward('login'); return ; } $token = unserialize($_SESSION['TWITTER_ACCESS_TOKEN']); $client = $token->getHttpClient($this->config); $client->setUri("http://api.twitter.com/1/users/show/{$token->user_id}.xml"); $response = $client->request(); $client->setMethod(Zend_Http_Client::GET); $userData = simplexml_load_string($response->getBody()); $this->view->bgImg = $userData->profile_background_image_url; $client->setUri('http://api.twitter.com/1/statuses/home_timeline.xml'); $response = $client->request(); $timeline = simplexml_load_string($response->getBody()); $this->view->timeline = $timeline; } public function loginAction() { } public function oauthAction() { if(!isset($_SESSION['TWITTER_REQUEST_TOKEN'])) { $token = $this->consumer->getRequestToken(); // persist the token to storage $_SESSION['TWITTER_REQUEST_TOKEN'] = serialize($token); // redirect the user $this->consumer->redirect(); } } public function logoutAction() { $_SESSION['TWITTER_REQUEST_TOKEN'] = null; $_SESSION['TWITTER_ACCESS_TOKEN'] = null; $this->_redirect(''); } public function callbackAction() { if (!empty($_GET) && isset($_SESSION['TWITTER_REQUEST_TOKEN'])) { $token = $this->consumer ->getAccessToken($_GET, unserialize($_SESSION['TWITTER_REQUEST_TOKEN'])); $_SESSION['TWITTER_ACCESS_TOKEN'] = serialize($token); $_SESSION['TWITTER_REQUEST_TOKEN'] = null; } $this->_redirect(''); }}Certo, e um monte de codigo. Vamos entender o fluxo das coisas.1 - O usuario acessa a index sem estar autenticado e e redirecionado para uma pagina para efetuar o login. A interface apenas apresenta um link para oauthAction;2 - A action pega a requestToken com o twitter e redireciona o usuario para a pagina de login do twitter;3 - O twitter redireciona o usuario de volta a action callback passando a acessToken. acessToken e nossa chave de entrada para os servicos da api. Entao o callback redireciona o usuario para index onde ele agora pode ver a sua timeline.4 - A index dessa vez faz uma consulta para /statuses/home_timeline e lista a timeline do usuario logado. Tambem usei a /users/show para pegar o papel de parede do usuario e deixar a interface um pouco mais "twitter" de ser.5 - Na index ainda temos o handler de tweets, onde usamos o /statuses/update para postar um tweet.Perdao pela indentacao que esta um lixo. Eu estou trocando meus tabs por 4 espacos e essa faze de transicao e bem complicada.Por fim, o fonte de tudo isso, e novamente, o codigo precisa ser refatorado pesadamente e varios pontos, pois o proposito dele nao e ser um modelo de sistemas, apenas uma demonstracao de como o Zend_Oauth e a api do twitter funcionam. Nao me crucifiquem pela bagunca nos css =).Se vc nao tem o zend framework configurado no seu php pode baixar e colocar ele na pasta library.Download[Via ZendFramework e Maugrim's blog]