Exemplo de PHP mais simples para obter a linha temporal do utilizador com a versão 1.1 da API do Twitter

Por causa da aposentadoria da API 1.0 no Twitter a partir de 11 de junho de 2013 , o script abaixo não funciona mais.

// Create curl resource 
$ch = curl_init(); 
// Set url 
curl_setopt($ch, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/myscreenname.json?count=10"); 
// Return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// $output contains the output string 
$output = curl_exec($ch); 
// Close curl resource to free up system resources 
curl_close($ch);

if ($output) 
{
    $tweets = json_decode($output,true);

    foreach ($tweets as $tweet)
    {
        print_r($tweet);
    }
}

Como posso obter a linha de utilizador (Estados recentes) com o menor Código possível?

encontrei isto: https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline mas eu tenho o seguinte erro:

"{"errors":[{"message":"Could not authenticate you","code":32}]}"
Há muitas aulas por aí, mas depois de tentar várias, nenhuma delas parece funcionar devido a estas actualizações no ... Twitter, além disso, alguns deles são classes bastante avançadas com um monte de funcionalidade que eu realmente não preciso.

Qual é o caminho mais simples/mais curto para obter os estados de usuário recentes com PHP?

 279
Author: Jimbo, 2012-10-16

14 answers

Nota importante: a partir de meados de 2018, o processo para obter tokens API do twitter tornou-se muito mais burocrático. Levou-me a uma semana de trabalho para receber um conjunto de fichas de API, e isto é para um projeto de código aberto para vocês e meninas com mais de 1,2 milhões de instalações em Packagist e 1,6 k estrelas em Github, o que teoricamente deveria ser uma prioridade maior.

Se você está encarregado de trabalhar com a API do twitter para o seu trabalho, deve ter em conta este tempo de espera potencialmente extremamente longo. Facebook ou Instagram e fornecer essas opções, já que o processo para recuperar seus tokens é instantâneo.


Então, queres usar a API v1.1 do Twitter?

Nota: os arquivos para estes estão no GitHub.

Versão 1.0 em breve será desacreditado. e pedidos não autorizados não serão permitidos. Então, aqui está um post para ajudá-lo a fazer isso, juntamente com uma aula de PHP para tornar a sua vida mais fácil.

1. Crie uma conta de desenvolvimento: crie uma conta de desenvolvimento no Twitter

Tem de visitar o site oficial de desenvolvimento do Twitter e registar-se numa conta de desenvolvimento. Este é um Livre e passo necessário para fazer pedidos para a API v1.1.

2. Crie uma aplicação: crie uma aplicação no programador do Twitter local

O quê? Pensaste que podias fazer pedidos não autenticados? Não com a API v1.1 do Twitter. Você precisa visitar http://dev.twitter.com/apps e carregue no botão "Criar Aplicação".

Enter image description here

Nesta página, preencha os detalhes que quiser. Para mim, não importava, porque eu só queria fazer um monte de pedidos de bloco para se livrar de seguidores de spam. O ponto é que você vai conseguir um conjunto de chaves únicas para usar para o seu aplicacao. Então, o objetivo de criar uma aplicação é dar a si mesmo (e ao Twitter) um conjunto de chaves. Estes são:
  • a chave do consumidor
  • O segredo do consumidor
  • a ficha de acesso
  • O segredo da ficha de acesso
Há aqui um pouco de informação sobre o que estas fichas servem.

3. Crie fichas de acesso: você precisará delas para fazer pedidos bem sucedidos

OAuth pede algumas fichas. Por isso, tens de os Criar para ti.

Enter image description here

Clique em "criar o meu token de acesso" no fundo. Então, uma vez que você rolar para o fundo novamente, você terá algumas chaves recém-geradas. Você precisa pegar as quatro chaves previamente rotuladas desta página para suas chamadas API, então faça uma nota deles em algum lugar.

4. Mude o nível de acesso: Você não quer apenas leitura, pois não?

Se quiseres fazer algum uso decente disto API, terá de alterar a sua configuração para ler e escrever se estiver a fazer alguma coisa que não seja a recuperação de dados padrão usando os pedidos de GET.

Enter image description here

Escolha a página "Configuração" perto do topo da página.

Enter image description here

Dê ao seu aplicativo acesso de leitura / escrita, e carregue em "Update" no fundo.

Você podeler mais sobre o modelo de permissão de aplicações que o Twitter usa aqui.


5. Escrever o código para acesse a API : eu fiz a maior parte por você

Combinei o código acima, com algumas modificações e mudanças, em uma classe PHP então é muito simples fazer os pedidos que você precisa.

Isto usa OAuth e o Twitter v1.1 API, e a classe que criei que poderá encontrar em baixo.

require_once('TwitterAPIExchange.php');

/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
    'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
    'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
    'consumer_key' => "YOUR_CONSUMER_KEY",
    'consumer_secret' => "YOUR_CONSUMER_SECRET"
);

Certifique-se que coloca as chaves que obteve da sua aplicação acima nos respectivos espaços.

Em seguida, você precisa escolher um URL que deseja para fazer um pedido. O Twitter tem documentação da API para ajudá-lo a escolher qual URL e também o tipo de pedido (POST ou GET).

/** URL for REST request, see: https://dev.twitter.com/docs/api/1.1/ **/
$url = 'https://api.twitter.com/1.1/blocks/create.json';
$requestMethod = 'POST';

Na documentação, cada URL indica o que você pode passar para ela. Se estamos usando o URL" blocos " como o acima, eu posso passar os seguintes parâmetros de POST:

/** POST fields required by the URL above. See relevant docs as above **/
$postfields = array(
    'screen_name' => 'usernameToBlock', 
    'skip_status' => '1'
);
Agora que preparaste o que queres fazer com a API, está na hora de fazer o pedido.
/** Perform the request and echo the response **/
$twitter = new TwitterAPIExchange($settings);
echo $twitter->buildOauth($url, $requestMethod)
             ->setPostfields($postfields)
             ->performRequest();

E para um publicação pedido, é isso!

Para um pedido de obter, é um pouco diferente. Aqui está um exemplo:
/** Note: Set the GET field BEFORE calling buildOauth(); **/
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?username=J7mbo';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();     

Exemplo final de código: para um simples pedido de obter uma lista dos meus seguidores.

$url = 'https://api.twitter.com/1.1/followers/list.json';
$getfield = '?username=J7mbo&skip_status=1';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();  

Eu coloquei estes arquivos no GitHub com crédito a @lackovic10 e @rivers! Eu espero que alguém ache útil ;eu sei que eu fiz (eu usei-o para bloqueio em massa em um loop).

Também para os que estão nas janelas problemas com os certificados SSL, veja este post . Esta biblioteca usa cURL sob o capô, então você precisa ter certeza de que você tem seus certs cURL configurados provavelmente. O Google também é seu amigo.

 790
Author: Jimbo, 2018-08-15 08:12:31

Ir para dev.twitter.com e criar uma aplicação . Isto dar-lhe-á as credenciais de que precisa. Aqui está uma implementação que escrevi recentemente com PHP e cURL .

<?php
    function buildBaseString($baseURI, $method, $params) {
        $r = array();
        ksort($params);
        foreach($params as $key=>$value){
            $r[] = "$key=" . rawurlencode($value);
        }
        return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
    }

    function buildAuthorizationHeader($oauth) {
        $r = 'Authorization: OAuth ';
        $values = array();
        foreach($oauth as $key=>$value)
            $values[] = "$key=\"" . rawurlencode($value) . "\"";
        $r .= implode(', ', $values);
        return $r;
    }

    $url = "https://api.twitter.com/1.1/statuses/user_timeline.json";

    $oauth_access_token = "YOURVALUE";
    $oauth_access_token_secret = "YOURVALUE";
    $consumer_key = "YOURVALUE";
    $consumer_secret = "YOURVALUE";

    $oauth = array( 'oauth_consumer_key' => $consumer_key,
                    'oauth_nonce' => time(),
                    'oauth_signature_method' => 'HMAC-SHA1',
                    'oauth_token' => $oauth_access_token,
                    'oauth_timestamp' => time(),
                    'oauth_version' => '1.0');

    $base_info = buildBaseString($url, 'GET', $oauth);
    $composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
    $oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
    $oauth['oauth_signature'] = $oauth_signature;

    // Make requests
    $header = array(buildAuthorizationHeader($oauth), 'Expect:');
    $options = array( CURLOPT_HTTPHEADER => $header,
                      //CURLOPT_POSTFIELDS => $postfields,
                      CURLOPT_HEADER => false,
                      CURLOPT_URL => $url,
                      CURLOPT_RETURNTRANSFER => true,
                      CURLOPT_SSL_VERIFYPEER => false);

    $feed = curl_init();
    curl_setopt_array($feed, $options);
    $json = curl_exec($feed);
    curl_close($feed);

    $twitter_data = json_decode($json);

//print it out
print_r ($twitter_data);

?>

Isto pode ser executado a partir da linha de comandos:

$ php <name of PHP script>.php
 132
Author: Rivers, 2015-03-21 22:53:43
O código colado pelos Rios é óptimo. Muito obrigado! Eu sou novo aqui e não posso comentar, eu só gostaria de responder à pergunta de javiervd (como você definiria o nome do ecrã e contaria com esta abordagem?), como eu perdi muito tempo para descobrir.

É necessário adicionar os parâmetros tanto ao URL} como ao processo de criação de assinaturas. criar uma assinatura é o artigo que me ajudou. Aqui está o meu código:

$oauth = array(
           'screen_name' => 'DwightHoward',
           'count' => 2,
           'oauth_consumer_key' => $consumer_key,
           'oauth_nonce' => time(),
           'oauth_signature_method' => 'HMAC-SHA1',
           'oauth_token' => $oauth_access_token,
           'oauth_timestamp' => time(),
           'oauth_version' => '1.0'
         );

$options = array(
             CURLOPT_HTTPHEADER => $header,
             //CURLOPT_POSTFIELDS => $postfields,
             CURLOPT_HEADER => false,
             CURLOPT_URL => $url . '?screen_name=DwightHoward&count=2',
             CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false
           );
 59
Author: lackovic10, 2014-03-23 16:25:06
Como indicado em outras respostas, crie um aplicativo no Twitter para obter o token, a chave e o segredo. Usando a seguir o código, poderá modificar os parâmetros de pedido de um ponto e evitar erros de tipo e similares (mudar a lista $request na função returnTweet()).
function buildBaseString($baseURI, $method, $params) {
    $r = array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[] = "$key=" . rawurlencode($value);
    }
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
        $values[] = "$key=\"" . rawurlencode($value) . "\"";
    $r .= implode(', ', $values);
    return $r;
}

function returnTweet(){
    $oauth_access_token         = "x";
    $oauth_access_token_secret  = "x";
    $consumer_key               = "x";
    $consumer_secret            = "x";

    $twitter_timeline           = "user_timeline";  //  mentions_timeline / user_timeline / home_timeline / retweets_of_me

    //  create request
        $request = array(
            'screen_name'       => 'budidino',
            'count'             => '3'
        );

    $oauth = array(
        'oauth_consumer_key'        => $consumer_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
    );

    //  merge request and oauth to one array
        $oauth = array_merge($oauth, $request);

    //  do some magic
        $base_info              = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
        $composite_key          = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        $oauth_signature            = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
        $oauth['oauth_signature']   = $oauth_signature;

    //  make request
        $header = array(buildAuthorizationHeader($oauth), 'Expect:');
        $options = array( CURLOPT_HTTPHEADER => $header,
                          CURLOPT_HEADER => false,
                          CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                          CURLOPT_RETURNTRANSFER => true,
                          CURLOPT_SSL_VERIFYPEER => false);

        $feed = curl_init();
        curl_setopt_array($feed, $options);
        $json = curl_exec($feed);
        curl_close($feed);

    return json_decode($json, true);
}
E depois liga-me.returnTweet()
 18
Author: budidino, 2013-04-25 14:29:32
Obrigado Kris!

Funcionou para mim sem usar parâmetros para a consulta, sempre que eu usei mais de um parâmetro mostrou-me o erro: 32 não poderia autenticá-lo.

O problema para mim, estava no amplificador e na codificação. Então no seu código onde está a seguinte linha

$url .= "?".http_build_query($query);

Adicionei a seguinte linha:

$url=str_replace("&amp;","&",$url);

E funcionou usando dois ou mais parâmetros como o nome do ecrã e a contagem.

Todo o código parece isto:

$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';

$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path

$query = array( // query parameters
    'screen_name' => 'twitterapi',
    'count' => '2'
);

$oauth = array(
    'oauth_consumer_key' => $consumer_key,
    'oauth_token' => $token,
    'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
    'oauth_timestamp' => time(),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_version' => '1.0'
);

$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);

$arr = array_merge($oauth, $query); // combine the values THEN sort

asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)

// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));

$url = "https://$host$path";

// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);

// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));

// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);
$url=str_replace("&amp;","&",$url); //Patch by @Frewuill

$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it

// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);

// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));

// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                  //CURLOPT_POSTFIELDS => $postfields,
                  CURLOPT_HEADER => false,
                  CURLOPT_URL => $url,
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_SSL_VERIFYPEER => false);

// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$twitter_data = json_decode($json);
Espero que ajude alguém com o mesmo problema que eu.
 15
Author: Frewuill, 2013-04-05 17:50:47
Esta pergunta ajudou-me muito, mas não me ajudou a perceber o que tem de acontecer. Este post no blog fez um trabalho incrível de me guiar através dele.

Aqui estão os bits importantes todos num só lugar:

  • como já foi referido, tem de assinar os seus pedidos de 1, 1 API. Se você está fazendo algo como obter estatutos públicos, você vai querer uma chave de aplicação em vez de uma chave de usuário. O link completo para a página que você deseja é: https://dev.twitter.com/apps
  • Você deve ajustar todos os parâmetros, tanto os do oauth e os parâmetros get (ou parâmetros POST) juntos.
  • Você deve ordenar os parâmetros antes de reduzi-los para a forma codificada url que é hashed.
  • Você deve codificar algumas coisas várias vezes-por exemplo, você cria um texto de consulta a partir dos valores codificados url dos parâmetros, e então você codificar isso e concatenar com o tipo de método e o url.

Simpatize com todas as dores de cabeça, então aqui está um código para terminar tudo:

$token = 'YOUR TOKEN';
$token_secret = 'TOKEN SECRET';
$consumer_key = 'YOUR KEY';
$consumer_secret = 'KEY SECRET';

$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/statuses/user_timeline.json'; // api call path

$query = array( // query parameters
    'screen_name' => 'twitterapi',
    'count' => '2'
);

$oauth = array(
    'oauth_consumer_key' => $consumer_key,
    'oauth_token' => $token,
    'oauth_nonce' => (string)mt_rand(), // a stronger nonce is recommended
    'oauth_timestamp' => time(),
    'oauth_signature_method' => 'HMAC-SHA1',
    'oauth_version' => '1.0'
);

$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);

$arr = array_merge($oauth, $query); // combine the values THEN sort

asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)

// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));

$url = "https://$host$path";

// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);

// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);

// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));

// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);

$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it

// also not necessary, but twitter's demo does this too
function add_quotes($str) { return '"'.$str.'"'; }
$oauth = array_map("add_quotes", $oauth);

// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));

// if you're doing post, you need to skip the GET building above
// and instead supply query parameters to CURLOPT_POSTFIELDS
$options = array( CURLOPT_HTTPHEADER => array("Authorization: $auth"),
                  //CURLOPT_POSTFIELDS => $postfields,
                  CURLOPT_HEADER => false,
                  CURLOPT_URL => $url,
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_SSL_VERIFYPEER => false);

// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);

$twitter_data = json_decode($json);
 9
Author: Kris Reeves, 2013-03-14 01:23:58

Se você tem a biblioteca PHP de OAuth instalada, você não tem que se preocupar em formar o pedido você mesmo.

$oauth = new OAuth($consumer_key, $consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);
$oauth->setToken($access_token, $access_secret);

$oauth->fetch("https://api.twitter.com/1.1/statuses/user_timeline.json");
$twitter_data = json_decode($oauth->getLastResponse());

print_r($twitter_data);

Para mais informações, consulte o documento ou o seu exemplo. Você pode usar pecl install oauth para obter a biblioteca.

 6
Author: jeffaudio, 2013-03-18 18:32:54
Em primeiro lugar, queria agradecer ao jimbo e à sua biblioteca simples do twitter-api-php.

Se vai usar a procure/tweets API com a biblioteca PHP" twitter-api-php " (TwitterAPIExchange.php):

Primeiro, você tem que apenas comentar "executar um pedido POST e ecoar a resposta" área de código.

Basta usar" executar um pedido GET e ecoar o código de resposta " e ecoar a resposta e alterar estes dois linhas:
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';

A

$url = 'https://api.twitter.com/1.1/search/tweets.json';
$getfield = '?q=J7mbo';

(mudança screen_name para q, é isso:)

 5
Author: Chanuka Asanka, 2014-03-23 16:29:33

Você vai precisar de A para criar um "app" no Twitter (e você precisa de uma conta no Twitter para fazer isso).

Então, você precisa usar OAuth para fazer um pedido autorizado ao Twitter.

Pode usar o recurso obter os Estados/user_ timeline para obter uma lista de tweets recentes.

 2
Author: Matthew Rapati, 2012-10-16 18:48:52
Aqui está uma breve para obter um número especificado de tweets da sua linha do tempo. Basicamente faz a mesma coisa que os outros exemplos, apenas com menos código.

Basta preencher as chaves e ajustar $count a seu gosto:

$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$count = '10';

$oauth = array('count' => $count,
               'oauth_consumer_key' => '[CONSUMER KEY]',
               'oauth_nonce' => md5(mt_rand()),
               'oauth_signature_method' => 'HMAC-SHA1',
               'oauth_timestamp' => time(),
               'oauth_token' => '[ACCESS TOKEN]',
               'oauth_version' => '1.0');

$oauth['oauth_signature'] = base64_encode(hash_hmac('sha1', 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', array_map(function ($v, $k) { return $k . '=' . $v; }, $oauth, array_keys($oauth)))), '[CONSUMER SECRET]&[ACCESS TOKEN SECRET]', true));

$twitterData = json_decode(file_get_contents($url . '?count=' . $count, false, stream_context_create(array('http' => array('method' => 'GET',
                                                                                                                           'header' => 'Authorization: OAuth ' 
                                                                                                                                       . implode(', ', array_map(function ($v, $k) { return $k . '="' . rawurlencode($v) . '"'; }, $oauth, array_keys($oauth))))))));
Este usa funções anónimas e file_get_contents em vez da biblioteca de curvas. Note o uso de um NONCÉ MD5 hashed. Todos parecem estar indo junto com o time() nonce, no entanto, a maioria dos exemplos na web sobre o OAuth usar algum tipo de criptografado string (como este: http://www.sitepoint.com/understanding-oauth-1 isto também faz mais sentido para mim.

Nota adicional: você precisa de PHP 5.3+ para as funções anônimas (no caso do seu servidor/computador estar em alguma caverna da Guerra Fria e você não pode atualizá-lo).

 0
Author: kasimir, 2015-01-13 13:51:16

A partir do seu Gerador de assinaturas , você pode gerar curl comandos do formulário:

curl --get 'https://api.twitter.com/1.1/statuses/user_timeline.json' --data 'count=2&screen_name=twitterapi' --header 'Authorization: OAuth oauth_consumer_key="YOUR_KEY", oauth_nonce="YOUR_NONCE", oauth_signature="YOUR-SIG", oauth_signature_method="HMAC-SHA1", oauth_timestamp="TIMESTAMP", oauth_token="YOUR-TOKEN", oauth_version="1.0"' --verbose
 -1
Author: Geremia, 2015-03-21 21:36:49
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET);

$timelines = $connection->get('statuses/user_timeline', array('screen_name' => 'NSE_NIFTY', 'count' => 100, 'include_rts' => 1));
 -2
Author: Abdul Baquee, 2014-06-23 07:26:50
Graças a este tópico, e especialmente ao budidino, porque o seu código foi o que o levou para casa para mim. Só queria contribuir como recuperar os dados do JSON de um pedido. Faça alterações ao" / / create request array " parte do código para realizar diferentes solicitações. Em última análise, isto irá enviar o JSON para o ecrã do navegador
<?php
    function buildBaseString($baseURI, $method, $params) {
    $r = array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[] = "$key=" . rawurlencode($value);
    }
    return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r = 'Authorization: OAuth ';
    $values = array();
    foreach($oauth as $key=>$value)
        $values[] = "$key=\"" . rawurlencode($value) . "\"";
    $r .= implode(', ', $values);
    return $r;
}

function returnTweet(){
    $oauth_access_token         = "2602299919-lP6mgkqAMVwvHM1L0Cplw8idxJzvuZoQRzyMkOx";
    $oauth_access_token_secret  = "wGWny2kz67hGdnLe3Uuy63YZs4nIGs8wQtCU7KnOT5brS";
    $consumer_key               = "zAzJRrPOj5BvOsK5QhscKogVQ";
    $consumer_secret            = "Uag0ujVJomqPbfdoR2UAWbRYhjzgoU9jeo7qfZHCxR6a6ozcu1";

    $twitter_timeline           = "user_timeline";  //  mentions_timeline / user_timeline / home_timeline / retweets_of_me

    //  create request
        $request = array(
            'screen_name'       => 'burownrice',
            'count'             => '3'
        );

    $oauth = array(
        'oauth_consumer_key'        => $consumer_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
    );

    //  merge request and oauth to one array
        $oauth = array_merge($oauth, $request);

    //  do some magic
        $base_info              = buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
        $composite_key          = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
        $oauth_signature            = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
        $oauth['oauth_signature']   = $oauth_signature;

    //  make request
        $header = array(buildAuthorizationHeader($oauth), 'Expect:');
        $options = array( CURLOPT_HTTPHEADER => $header,
                          CURLOPT_HEADER => false,
                          CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                          CURLOPT_RETURNTRANSFER => true,
                          CURLOPT_SSL_VERIFYPEER => false);

        $feed = curl_init();
        curl_setopt_array($feed, $options);
        $json = curl_exec($feed);
        curl_close($feed);

    return $json;
}

$tweet = returnTweet();
echo $tweet;

?>
 -2
Author: Terry Bu, 2014-07-03 23:29:35

Se for útil para alguém... Em meu blog eu implementei o seguinte código PHP, a fim de recuperar os últimos tweets, extrair seus dados mais relevantes e, em seguida, salvá-los em um banco de dados MySQL. Funciona porque o tenho no meu blog.

A mesa "tweets" onde os guardam:

CREATE TABLE IF NOT EXISTS `tweets` (
  `tweet_id` int(11) NOT NULL auto_increment,
  `id_tweet` bigint(20) NOT NULL,
  `text_tweet` char(144) NOT NULL,
  `datetime_tweet` datetime NOT NULL,
  `dayofweek_tweet` char(3) NOT NULL,
  `GMT_tweet` char(5) NOT NULL,
  `shorturl_tweet` char(23) NOT NULL,
  PRIMARY KEY  (`tweet_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;
[4] Get_tweets.php:
<?php
function buildBaseString($baseURI, $method, $params) {
    $r= array();
    ksort($params);
    foreach($params as $key=>$value){
        $r[]= "$key=".rawurlencode($value);
    }
    return $method."&".rawurlencode($baseURI).'&'.rawurlencode(implode('&', $r));
}

function buildAuthorizationHeader($oauth) {
    $r= 'Authorization: OAuth ';
    $values= array();
    foreach($oauth as $key=>$value) {
        $values[]= "$key=\"".rawurlencode($value)."\"";
    }
    $r.= implode(', ', $values);
    return $r;
}

function returnTweets($last_id) {
    $oauth_access_token         = "2687912757-vbyfJA483SEyj2HJ2K346aVMxtOIgVbsY4Edrsw";
    $oauth_access_token_secret  = "nIruzmR0bXqC3has4fTf8KAq4pgOceiuKqjklhroENU4W";
    $api_key                    = "ieDSTFH8QHHPafg7H0whQB9GaY";
    $api_secret                 = "mgm8wVS9YP93IJmTQtsmR8ZJADDNdlTca5kCizMkC7O7gFDS1j";
    $twitter_timeline           = "user_timeline";  //[mentions_timeline/user_timeline/home_timeline/retweets_of_me]
    //create request
    $request= array(
        'screen_name'       => 'runs_ES',
        'count'             => '3',
        'exclude_replies'   => 'true'
        );
    if (!is_null($last_id)) { //Add to the request if it exits a last_id
        $request['since_id']= $max_id;
    }
    $oauth = array(
        'oauth_consumer_key'        => $api_key,
        'oauth_nonce'               => time(),
        'oauth_signature_method'    => 'HMAC-SHA1',
        'oauth_token'               => $oauth_access_token,
        'oauth_timestamp'           => time(),
        'oauth_version'             => '1.0'
        );
    //merge request and oauth to one array
    $oauth= array_merge($oauth, $request);
    //do some magic
    $base_info=                 buildBaseString("https://api.twitter.com/1.1/statuses/$twitter_timeline.json", 'GET', $oauth);
    $composite_key=             rawurlencode($api_secret).'&'.rawurlencode($oauth_access_token_secret);
    $oauth_signature=           base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
    $oauth['oauth_signature']=  $oauth_signature;
    //make request
    $header= array(buildAuthorizationHeader($oauth), 'Expect:');
    $options= array(CURLOPT_HTTPHEADER => $header,
                    CURLOPT_HEADER => false,
                    CURLOPT_URL => "https://api.twitter.com/1.1/statuses/$twitter_timeline.json?". http_build_query($request),
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_SSL_VERIFYPEER => false);
    $feed= curl_init();
    curl_setopt_array($feed, $options);
    $json= curl_exec($feed);
    curl_close($feed);
    return $json;
}

function parse_tweettext($tweet_text) {
    $text= substr($tweet_text, 0, -23);
    $short_url= substr($tweet_text, -23, 23);
    return array ('text'=>$text, 'short_url'=> $short_url);
}

function parse_tweetdatetime($tweetdatetime) {
    //Thu Aug 21 21:57:26 +0000 2014 Sun Mon Tue Wed Thu Fri Sat
    $months= array('Jan'=>'01', 'Feb'=>'02', 'Mar'=>'03', 'Apr'=>'04', 'May'=>'05', 'Jun'=>'06', 
                    'Jul'=>'07', 'Aug'=>'08', 'Sep'=>'09', 'Oct'=>'10', 'Nov'=>'11', 'Dec'=>'12');
    $GMT= substr($tweetdatetime, -10, 5);
    $year= substr($tweetdatetime, -4, 4);
    $month_str= substr($tweetdatetime, 4, 3);
    $month= $months[$month_str];
    $day= substr($tweetdatetime, 8, 2); 
    $dayofweek= substr($tweetdatetime, 0, 3);
    $time= substr($tweetdatetime, 11, 8);
    $date= $year.'-'.$month.'-'.$day;
    $datetime= $date.' '.$time;
    return array('datetime'=>$datetime, 'dayofweek'=>$dayofweek, 'GMT'=>$GMT);
    //datetime: "YYYY-MM-DD HH:MM:SS", dayofweek: Mon, Tue..., GMT: +####
}

//First check in the database the last id tweet:
$query= "SELECT MAX(tweets.id_tweet) AS id_last FROM tweets;";
$result= exec_query($query);
$row= mysql_fetch_object($result);
if ($result!= 0 && mysql_num_rows($result)) { //if error in query or not results
    $last_id= $row->id_last;
}
else {
    $last_id= null;
}

$json= returnTweets($last_id);
$tweets= json_decode($json, TRUE);

foreach ($tweets as $tweet) {
    $tweet_id= $tweet['id'];
    if (!empty($tweet_id)) { //if array is not empty
        $tweet_parsetext= parse_tweettext($tweet['text']);
        $tweet_text= utf8_encode($tweet_parsetext['text']);
        $tweet_shorturl= $tweet_parsetext['short_url'];
        $tweet_parsedt= parse_tweetdatetime($tweet['created_at']);
        $tweet_datetime= $tweet_parsedt['datetime'];
        $tweet_dayofweek= $tweet_parsedt['dayofweek'];
        $tweet_GMT= $tweet_parsedt['GMT'];
        //Insert the tweet into the database:
        $fields = array(
            'id_tweet' => $tweet_id,
            'text_tweet' => $tweet_text,
            'datetime_tweet' => $tweet_datetime,
            'dayofweek_tweet' => $tweet_dayofweek,
            'GMT_tweet' => $tweet_GMT,
            'shorturl_tweet' => $tweet_shorturl
            );
        $new_id= mysql_insert('tweets', $fields);
    }
} //end of foreach
?>

A função para salvar os tweets:

function mysql_insert($table, $inserts) {
    $keys = array_keys($inserts);
    exec_query("START TRANSACTION;");
    $query= 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $inserts).'\')';
    exec_query($query);
    $id= mysql_insert_id();
    if (mysql_error()) {
        exec_query("ROLLBACK;");
        die("Error: $query");
    }
    else {
        exec_query("COMMIT;");
    }
    return $id;
}
 -2
Author: runs, 2015-12-31 15:00:10