API потокового Twitter с OAuth? - PullRequest
2 голосов
/ 01 июня 2011

Я застрял на этом некоторое время. Кто-нибудь знает, как аутентифицировать запросы API Twitter Streaming с помощью OAuth? На данный момент я аутентифицируюсь с помощью базовой аутентификации, и я бы хотел полностью перейти на OAuth. Кроме того, я использую Ruby on Rails, если это поможет.

Спасибо

Ответы [ 4 ]

3 голосов
/ 01 июня 2011

Подключение к API потоковой передачи Twitter через OAuth выполняется почти так же, как подключение через REST API.Предполагая, что вы уже согласовали токен доступа, вы подписываете и отправляете запрос, используя тот же алгоритм подписи, что и для запроса REST.При использовании Streaming API лучше всего использовать OAuth на основе заголовка, а не на основе строки запроса.

Вот пример подписанного запроса на основе OAuth для конечной точки образца:

GET http://stream.twitter.com/1/statuses/sample.json

Пример базовой строки подписи:

GET & http% 3A% 2F% 2Fstream.twitter.com% 2Fstatuses% 2Fsample.json & oauth_consumer_key% 3Dri8JxYK2ddwSV_xnUn %NoNNUFN3DUJb0f3nHhFQkpkWkJzxnFT65xX1TZeuGjww6Q2XWs4% 26oauth_signature_method% 3DHMAC-SHA1% 26oauth_timestamp% 3D1306947138% 26oauth_token% 3D819797-torCkTs0XK7H2Y2i1ee5iofqkMC4p7aayeEXRTmlw% 26oauth_version% 3D1.0

1014 * Авторизация Заголовок после подписания: 1018 * Авторизация: OAuth oauth_consumer_key= "ri8JxYK2ddwSV5xIUfNNvQ", oauth_nonce = "UJb0f3nHhFQkpkWkJzxnFT65xX1TZeuGjww6Q2XWs4", oauth_signature = "bN14zlBIdCZCSl9% 2B8UV8dB2VWjI% 3D", oauth_signature_method = "HMAC-SHA1", oauth_timestamp = "1306947138", oauth_token = "819797-torCkTs0XK7H2Y2i1ee5iofqkMC4p7aayeEXRTmlw", oauth_version = "1.0"

У Мэтта Харриса есть пример кода на PHP, демонстрирующий подключение к потоковому API через OAuth: https://github.com/themattharris/tmhOAuth/blob/master/examples/streaming.php

1 голос
/ 25 июля 2011

После того как вы зарегистрируете свое приложение на http://dev.twitter.com, вот как это делается в Perl:

#!/usr/bin/perl

use strict;
use AnyEvent::Twitter::Stream;

if ($ENV{FIREHOSE_SERVER}) {
    $AnyEvent::Twitter::Stream::STREAMING_SERVER = $ENV{FIREHOSE_SERVER};
}

my $done = AE::cv;

binmode STDOUT, ":utf8";

my $streamer = AnyEvent::Twitter::Stream->new(
    consumer_key => 'KEY',
    consumer_secret => 'SECRET',
    token => 'TOKEN',
    token_secret => 'TOKEN SECRET',
    method => "filter",
    track => "KEYWORDS TO TRACK",
    on_tweet => sub {
        # CUSTOM CODE HERE
    },
    on_error => sub {
        my $error = shift;
        warn "ERROR: $error";
        $done->send;
    },
    on_eof   => sub {
        $done->send;
    },
);

$done->recv;
0 голосов
/ 18 июля 2012

Вы должны использовать этот драгоценный камень: Tweetstream , который находится поверх em-twitter

0 голосов
/ 01 июня 2011

Попробуйте гем OmniAuth, который поддерживает множество внешних провайдеров https://github.com/intridea/omniauth

...