【发布时间】:2011-09-06 10:56:38
【问题描述】:
我已经坚持了一段时间了。有谁知道如何使用 OAuth 对 Twitter 流 API 请求进行身份验证?截至目前,我正在通过基本身份验证进行身份验证,我想完全切换到 OAuth。另外,如果有帮助,我正在使用 Ruby on Rails。
谢谢
【问题讨论】:
标签: ruby-on-rails ruby twitter oauth streaming
我已经坚持了一段时间了。有谁知道如何使用 OAuth 对 Twitter 流 API 请求进行身份验证?截至目前,我正在通过基本身份验证进行身份验证,我想完全切换到 OAuth。另外,如果有帮助,我正在使用 Ruby on Rails。
谢谢
【问题讨论】:
标签: ruby-on-rails ruby twitter oauth streaming
通过 OAuth 连接到 Twitter Streaming API 与通过 REST API 连接的方式大致相同。假设您已经协商了访问令牌,您可以使用与 REST 请求相同的签名算法来签署和发出请求。对于 Streaming API,最好使用基于标头的 OAuth,而不是基于查询字符串。
以下是示例端点的基于 OAuth 的签名请求示例:
获取http://stream.twitter.com/1/statuses/sample.json
签名基本字符串示例:
GET&HTTP%3A%2F%2Fstream.twitter.com%2Fstatuses%2Fsample.json&oauth_consumer_key%3Dri8JxYK2ddwSV5xIUfNNvQ%26oauth_nonce%3DUJb0f3nHhFQkpkWkJzxnFT65xX1TZeuGjww6Q2XWs4%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1306947138%26oauth_token%3D819797-torCkTs0XK7H2Y2i1ee5iofqkMC4p7aayeEXRTmlw%26oauth_version%3D1.0
签名后的授权标头:
授权: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"
Matt Harris 在 PHP 中有一些示例代码,演示了通过 OAuth 连接到流式 API:https://github.com/themattharris/tmhOAuth/blob/master/examples/streaming.php
【讨论】:
在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;
【讨论】:
尝试支持许多外部提供程序的 OmniAuth gem https://github.com/intridea/omniauth
【讨论】:
您应该使用这个 gem:Tweetstream,它位于 em-twitter 之上
【讨论】: