it-swarm-id.com

Contoh PHPsederhana untuk mengambil user_timeline dengan Twitter API versi 1.1

Karena pensiunnya Twitter API 1.0 pada 11 Juni 201 , skrip di bawah ini tidak berfungsi lagi.

// 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);
    }
}

Bagaimana saya bisa mendapatkan user_timeline (status terkini) dengan kode seminimal mungkin?

Saya menemukan ini: https://dev.Twitter.com/docs/api/1.1/get/statuses/user_timeline tetapi saya mendapatkan kesalahan berikut:

"{"errors":[{"message":"Could not authenticate you","code":32}]}"

Ada banyak kelas di luar sana tetapi setelah mencoba beberapa dari mereka tampaknya tidak berhasil karena pembaruan ini di Twitter, ditambah beberapa dari mereka adalah kelas yang cukup maju dengan banyak fungsi yang saya tidak benar-benar butuhkan.

Apa cara paling sederhana/terpendek untuk mendapatkan status pengguna terkini dengan PHP?

283

Catatan Penting: Pada pertengahan 2018, proses untuk mendapatkan token API Twitter menjadi jauh lebih birokratis. Saya telah mengambil alih satu minggu kerja untuk diberikan satu set token API, dan ini untuk proyek sumber terbuka untuk Anda yang cowok dan cewek dengan lebih 1,2 juta instalasi pada Packagist dan 1,6k bintang di Github, yang secara teoritis harus menjadi prioritas lebih tinggi.

Jika Anda ditugaskan untuk bekerja dengan API Twitter untuk pekerjaan Anda, Anda harus memperhitungkan waktu tunggu yang berpotensi sangat lama ini. Pertimbangkan juga jalan media sosial lainnya seperti Facebook atau Instagram dan sediakan opsi ini, karena proses untuk mengambil token mereka instan.


Jadi Anda ingin menggunakan API Twitter v1.1?

Catatan: file untuk ini ada di GitHub.

Versi 1.0 akan segera ditinggalkan dan permintaan tidak sah tidak akan diizinkan. Jadi, inilah pos untuk membantu Anda melakukan hal itu, bersama dengan kelas PHP untuk membuat hidup Anda lebih mudah.

1. Buat akun pengembang: Atur diri Anda akun pengembang di Twitter

Anda perlu mengunjungi situs pengembang Twitter resmi dan mendaftar untuk akun pengembang. Ini adalah gratis dan langkah yang diperlukan untuk membuat permintaan untuk API v1.1.

2. Buat aplikasi: Buat aplikasi di situs pengembang Twitter

Apa? Anda pikir Anda bisa membuat permintaan yang tidak diautentikasi? Tidak dengan API v1.1 Twitter. Anda perlu mengunjungi http://dev.Twitter.com/apps dan klik tombol "Buat Aplikasi".

Enter image description here

Di halaman ini, isi detail apa pun yang Anda inginkan. Bagi saya, itu tidak masalah, karena saya hanya ingin membuat banyak permintaan blokir untuk menyingkirkan pengikut spam. Intinya adalah Anda akan mendapatkan sendiri satu set kunci unik untuk digunakan untuk aplikasi Anda.

Jadi, tujuan membuat aplikasi adalah memberi diri Anda (dan Twitter) satu set kunci. Ini adalah:

  • Kunci konsumen
  • Rahasia konsumen
  • Token akses
  • Rahasia akses token

Ada sedikit informasi di sini untuk apa token ini.

3. Buat token akses : Anda akan memerlukan ini untuk membuat permintaan yang berhasil

OAuth meminta beberapa token. Jadi, Anda harus membuatnya untuk Anda.

Enter image description here

Klik "buat token akses saya" di bagian bawah. Kemudian setelah Anda gulir ke bawah lagi, Anda akan memiliki beberapa kunci yang baru dibuat. Anda perlu mengambil empat kunci yang sebelumnya berlabel dari halaman ini untuk panggilan API Anda, jadi buat catatan di suatu tempat.

4. Ubah tingkat akses : Anda tidak ingin hanya baca, bukan?

Jika Anda ingin menggunakan API ini dengan layak, Anda harus mengubah pengaturan menjadi Baca & Tulis jika Anda melakukan hal lain selain pengambilan data standar menggunakan GET permintaan.

Enter image description here

Pilih tab "Pengaturan" di dekat bagian atas halaman.

Enter image description here

Berikan akses baca/tulis aplikasi Anda, dan tekan "Perbarui" di bagian bawah.

Anda dapat baca lebih lanjut tentang model izin aplikasi yang digunakan Twitter di sini.


5. Tulis kode untuk mengakses API : Saya sudah melakukan sebagian besar untuk Anda

Saya menggabungkan kode di atas, dengan beberapa modifikasi dan perubahan, menjadi kelas PHP sehingga sangat mudah untuk membuat permintaan yang Anda butuhkan.

Ini menggunakan OAuth dan Twitter v1.1 API , dan kelas Saya telah membuat yang dapat Anda temukan di bawah.

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"
);

Pastikan Anda memasukkan kunci yang Anda dapatkan dari aplikasi di atas di ruang masing-masing.

Selanjutnya Anda harus memilih URL yang ingin Anda minta. Twitter memiliki dokumentasi API untuk membantu Anda memilih URL mana dan juga jenis permintaan (POST atau 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';

Dalam dokumentasi, setiap URL menyatakan apa yang dapat Anda sampaikan. Jika kami menggunakan URL "blokir" seperti yang di atas, saya dapat memberikan parameter POST berikut:

/** POST fields required by the URL above. See relevant docs as above **/
$postfields = array(
    'screen_name' => 'usernameToBlock', 
    'skip_status' => '1'
);

Sekarang setelah Anda mengatur apa yang ingin Anda lakukan dengan API, saatnya untuk membuat permintaan yang sebenarnya.

/** Perform the request and echo the response **/
$Twitter = new TwitterAPIExchange($settings);
echo $Twitter->buildOauth($url, $requestMethod)
             ->setPostfields($postfields)
             ->performRequest();

Dan untuk permintaan POST, itu dia!

Untuk permintaan DAPATKAN, ini sedikit berbeda. Ini sebuah contoh:

/** 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();     

Contoh kode final : Untuk permintaan GET sederhana untuk daftar pengikut saya.

$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();  

Saya telah meletakkan file-file ini di GitHub dengan kredit ke @ lackovic10 dan @rivers! Saya harap seseorang menemukan itu berguna; Saya tahu saya lakukan (saya menggunakannya untuk pemblokiran massal dalam satu lingkaran).

Juga, bagi mereka yang menggunakan Windows pada masalah dengan sertifikat SSL, lihat posting ini . Pustaka ini menggunakan cURL di bawah tenda sehingga Anda perlu memastikan bahwa Anda telah menyiapkan sertifikat CURL. Google juga temanmu.

800
Jimbo

Buka dev.Twitter.com dan buat aplikasi . Ini akan memberi Anda kredensial yang Anda butuhkan. Ini adalah implementasi yang baru-baru ini saya tulis dengan PHP dan 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);

?>

Ini dapat dijalankan dari baris perintah:

$ php <name of PHP script>.php
133
Rivers

Kode yang disisipkan oleh Rivers itu hebat. Terima kasih banyak! Saya baru di sini dan tidak dapat berkomentar, saya hanya ingin menjawab pertanyaan dari javiervd (Bagaimana Anda mengatur screen_name dan menghitung dengan pendekatan ini?), Karena saya telah kehilangan banyak waktu untuk memikirkannya di luar.

Anda perlu menambahkan parameter ke URL dan ke proses pembuatan tanda tangan. Membuat tanda tangan adalah artikel yang membantu saya. Ini kode saya:

$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
lackovic10

Seperti yang dinyatakan dalam jawaban lain, buat aplikasi Twitter untuk mendapatkan token, kunci, dan rahasia. Dengan menggunakan kode di bawah, Anda dapat mengubah parameter permintaan dari satu tempat dan menghindari kesalahan ketik dan kesalahan serupa (ubah $request array di fungsi 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);
}

dan kemudian panggil returnTweet()

18
budidino

Kris terima kasih!

Ini berhasil bagi saya tanpa menggunakan parameter ke kueri, setiap kali saya menggunakan lebih dari satu parameter itu menunjukkan kesalahan: 32 Tidak dapat mengautentikasi Anda.

Masalahnya bagi saya, berada di ampersand encoding. Jadi dalam kode Anda di mana itu adalah baris berikut

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

Saya menambahkan baris berikut di bawah ini:

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

Dan itu berhasil menggunakan dua atau lebih parameter seperti screen_name dan count.

Seluruh kode terlihat seperti ini:

$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);

Semoga ini bisa membantu seseorang dengan masalah yang sama dengan saya.

16
Frewuill

Pertanyaan ini banyak membantu saya tetapi tidak membuat saya mengerti apa yang harus terjadi. Posting blog ini melakukan pekerjaan yang luar biasa untuk memandu saya.

Berikut adalah bit-bit penting di satu tempat:

  • Seperti yang disebutkan di atas, Anda HARUS menandatangani permintaan API 1.1. Jika Anda melakukan sesuatu seperti mendapatkan status publik, Anda akan menginginkan kunci aplikasi daripada kunci pengguna. Tautan lengkap ke halaman yang Anda inginkan adalah: https://dev.Twitter.com/apps
  • Anda harus mem-hash SEMUA parameter, baik yang sekaligus DAN parameter get (atau POST parameter) bersamaan.
  • Anda harus SORT parameter sebelum menguranginya ke bentuk kode url yang di-hash.
  • Anda harus meng-encode beberapa hal berkali-kali - misalnya, Anda membuat string kueri dari nilai-nilai url-encoded parameter, dan kemudian Anda url encode ITU dan digabungkan dengan jenis metode dan url.

Saya bersimpati dengan semua sakit kepala, jadi inilah beberapa kode untuk menyelesaikan semuanya:

$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
Kris Reeves

Jika Anda memiliki pustaka OAuth PHP, Anda tidak perlu khawatir untuk membuat permintaan sendiri.

$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);

Untuk informasi lebih lanjut, lihat The docs atau contoh . Anda dapat menggunakan pecl install oauth untuk mendapatkan perpustakaan.

6
jeffaudio

Pertama-tama saya ingin mengucapkan terima kasih kepada jimbo dan ( jabatannya /Twitter-api-php perpustakaan sederhana).

Jika Anda akan menggunakan pustaka GET search/tweets dengan "Twitter-api-php" PHP library (TwitterAPIExchange.php):

Pertama, Anda hanya perlu berkomentar "Lakukan permintaan POST dan gema area respons".

Cukup gunakan kode "Lakukan permintaan GET dan gema respons" dan gema respons dan ubah dua baris ini:

$url = 'https://api.Twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';

untuk

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

(Ubah screen_name menjadi q, itu saja :)

5
Chanuka Asanka

Anda memerlukan to membuat "aplikasi" di Twitter (dan Anda memerlukan akun Twitter untuk melakukan ini).

Kemudian, Anda perlu gunakan OAuth untuk membuat permintaan resmi ke Twitter .

Anda dapat menggunakan GET status/user_timeline sumber daya untuk mendapatkan daftar tweet terbaru.

2
Matthew Rapati

Inilah yang singkat untuk mendapatkan sejumlah tweet dari timeline Anda. Ini pada dasarnya melakukan hal yang sama dengan contoh lainnya, hanya dengan kode yang lebih sedikit.

Cukup isi tombol dan sesuaikan $count sesuai keinginan Anda:

$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))))))));

Yang ini menggunakan fungsi anonim dan file_get_contents bukan perpustakaan cURL. Catat penggunaan hash MD5. Semua orang nampaknya sejalan dengan fungsi time(), namun, sebagian besar contoh di web mengenai OAuth menggunakan beberapa jenis string terenkripsi (seperti ini: http://www.sitepoint.com/understanding-oauth-1 / ). Ini juga lebih masuk akal bagi saya.

Catatan lebih lanjut: Anda memerlukan PHP 5.3+ untuk fungsi anonim (seandainya server/komputer Anda berada dalam gua perang dingin dan Anda tidak dapat memutakhirkannya).

0
kasimir