Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cPraValer

Authentication & Authorization - Oauth twitter

Recommended Posts

Olá,

 

Andei lendo sobre Authentication & Authorization aqui: https://dev.twitter.com/docs/auth

 

Fiz alguns testes, mas não deu certo.

 

A idéia é programar para o envio de tweets.

 

Ví que preciso armazenar os tokens no banco de dados para depois utilizar remotamente, autenticando no twitter e enviando a mensagem.

 

Mas parei por aqui.. quero saber a idéia, a lógica. Já tenho os tokens, a aplicação registrada no twitter applications...

 

O Authorization requer a intervenção do usuário, ele tem que confirmar que a aplicação vai acessar a conta no twitter.

 

Já o Authentication irá utilizar os dados armazenados, se autenticar no twitter, e efetuar o envio.

 

 

Aqui são pegos os tokens

    // The TwitterOAuth instance  
   $twitteroauth = new TwitterOAuth('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');  
   // Requesting authentication tokens, the parameter is the URL we will be redirected to  
   $request_token = $twitteroauth->getRequestToken('http://localhost.com/twitter_oauth.php');  

   // Saving them into the session  
   $_SESSION['oauth_token'] = $request_token['oauth_token'];  
   $_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];  

   // If everything goes well..  
   if($twitteroauth->http_code==200){  
       // Let's generate the URL and redirect  
       $url = $twitteroauth->getAuthorizeURL($request_token['oauth_token']); 
       header('Location: '. $url); 
   } else { 
       // It's a bad idea to kill the script, but we've got to know when there's an error.  
       die('Something wrong happened.');  
   }  

 

 

Aqui armazena no banco de dados

    if(isset($user_info->error)){  
       // Something's wrong, go back to square 1  
       header('Location: twitter_login.php'); 
   } else { 
       // Let's find the user by its ID  
       $query = mysql_query("SELECT * FROM users WHERE oauth_provider = 'twitter' AND oauth_uid = ". $user_info->id);  
       $result = mysql_fetch_array($query);  

       // If not, let's add it to the database  
       if(empty($result)){  
           $query = mysql_query("INSERT INTO users (oauth_provider, oauth_uid, username, oauth_token, oauth_secret) VALUES ('twitter', {$user_info->id}, '{$user_info->screen_name}', '{$access_token['oauth_token']}', '{$access_token['oauth_token_secret']}')");  
           $query = mysql_query("SELECT * FROM users WHERE id = " . mysql_insert_id());  
           $result = mysql_fetch_array($query);  
       } else {  
           // Update the tokens  
           $query = mysql_query("UPDATE users SET oauth_token = '{$access_token['oauth_token']}', oauth_secret = '{$access_token['oauth_token_secret']}' WHERE oauth_provider = 'twitter' AND oauth_uid = {$user_info->id}");  
       }  

       $_SESSION['id'] = $result['id']; 
       $_SESSION['username'] = $result['username']; 
       $_SESSION['oauth_uid'] = $result['oauth_uid']; 
       $_SESSION['oauth_provider'] = $result['oauth_provider']; 
       $_SESSION['oauth_token'] = $result['oauth_token']; 
       $_SESSION['oauth_secret'] = $result['oauth_secret']; 

       header('Location: twitter_update.php');  
   }  

 

 

Como funciona isso?

 

 

Valeu.

 

 

Aqui tem o artigo com a idéia do que estou falando: http://net.tutsplus.com/tutorials/php/how-to-authenticate-users-with-twitter-oauth/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este tutorial do link é confuso, pois não fala o nome dos arquivos que serão criados, nem aonde vai cada parte do código...

 

Mas a ideia é simples. Depois de armazenar os dados no DB, fazer uma consulta e passar para a função TwitterOauth como parâmetros. Nesse exemplo criei uma função simples que recebe os parâmetros (oauth_token, oauth_secret e tweet), para enviar logo em seguida.

 

require("twitteroauth/twitteroauth.php");
require_once( './config.php' );
require_once( './db.php' );
session_start();


$select = mysql_query( "SELECT * FROM users ORDER BY username" ) or die( mysql_error() );

if( mysql_num_rows( $select ) > 0 )
{
	while( $fetch = mysql_fetch_array( $select ) )
	{
		sendTweet( $fetch['oauth_token'], $fetch['oauth_secret'], 'São Paulo - SPFC.' );
	}
}
else
{
	echo "Não há registros a exibir<br />";
}



function sendTweet( $ot, $os, $tweet )
{
	/* Create a TwitterOauth object with consumer/user tokens. */
	$connection = new TwitterOAuth( CONSUMER_KEY, CONSUMER_SECRET, $ot, $os );

	/* If method is set change API call made. Test is called by default. */
	$content = $connection->get('account/rate_limit_status');
	echo "Current API hits remaining: {$content->remaining_hits}.<br>";

	/* Get logged in user to help with tests. */
	$TPUser = $connection->get('account/verify_credentials');

	/* statuses/update */
	$parameters = array( 'status' => $tweet );
	$status = $connection->post( 'statuses/update', $parameters );

	echo "<pre>";
	echo var_dump( $status );
	echo "</pre>";

	/* oauth/request_token */
	$oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

	echo "<pre>";
	echo var_dump( $oauth );
	echo "</pre>";

	return $status;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.