【问题标题】:Twitter Streaming API with OAuth?带有 OAuth 的 Twitter 流 API?
【发布时间】:2011-09-06 10:56:38
【问题描述】:

我已经坚持了一段时间了。有谁知道如何使用 OAuth 对 Twitter 流 API 请求进行身份验证?截至目前,我正在通过基本身份验证进行身份验证,我想完全切换到 OAuth。另外,如果有帮助,我正在使用 Ruby on Rails。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby twitter oauth streaming


    【解决方案1】:

    通过 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

    【讨论】:

    • 嗨,我看了你的回答,现在我明白了如何构造基本字符串和授权标头。但是,现在我被困在如何将数据正确地发布到 ruby​​ 中的 twitter 流上。截至目前,我正在使用 yajl 创建一个 httpstream 以仅使用基本身份验证发布到 twitter 流。
    【解决方案2】:

    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;
    

    【讨论】:

      【解决方案3】:

      尝试支持许多外部提供程序的 OmniAuth gem https://github.com/intridea/omniauth

      【讨论】:

        【解决方案4】:

        您应该使用这个 gem:Tweetstream,它位于 em-twitter 之上

        【讨论】:

          猜你喜欢
          • 2012-09-17
          • 2012-08-19
          • 1970-01-01
          • 2014-02-26
          • 2015-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-03
          相关资源
          最近更新 更多