【问题标题】:Calling Twitter Streaming API (statuses/filter) from vb.net webpage从 vb.net 网页调用 Twitter 流 API(状态/过滤器)
【发布时间】:2016-09-13 03:43:00
【问题描述】:

我正在尝试在我的 .net 网页中调用 Streaming API 过滤器。

我确实在 twitter 上创建了一个应用程序并获取了所需的凭据(消费者密钥、消费者秘密、访问令牌和访问令牌秘密)

这是正在使用的代码

 Public Function StreamAPI()
    Dim url As String = "https://stream.twitter.com/1.1/statuses/filter.json?track=example.com/example"


    Dim oauthconsumerkey As String = "consumerkey"
    Dim oauthconsumersecret As String = "consumersecret"
    Dim oauthsignaturemethod As String = "HMAC-SHA1"
    Dim oauthversion As String = "1.0"
    Dim oauthtoken As String = "token"
    Dim oauthtokensecret As String = "tokenkey"

    Dim oauthnonce As String = Convert.ToBase64String(New ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()))
    Dim timeSpan As TimeSpan = DateTime.UtcNow - New DateTime(1970, 1, 1, 0, 0, 0, _
        0, DateTimeKind.Utc)
    Dim oauthtimestamp As String = Convert.ToInt64(timeSpan.TotalSeconds).ToString()
    Dim basestringParameters As New SortedDictionary(Of String, String)()
    basestringParameters.Add("track", "example.com/example")
    basestringParameters.Add("oauth_version", oauthversion)
    basestringParameters.Add("oauth_consumer_key", oauthconsumerkey)
    basestringParameters.Add("oauth_nonce", oauthnonce)
    basestringParameters.Add("oauth_signature_method", oauthsignaturemethod)
    basestringParameters.Add("oauth_timestamp", oauthtimestamp)
    basestringParameters.Add("oauth_token", oauthtoken)

    Dim baseString As New StringBuilder()
    baseString.Append("GET" + "&")
    baseString.Append(EncodeCharacters(Uri.EscapeDataString(url.Split("?"c)(0)) + "&"))
    For Each entry As KeyValuePair(Of String, String) In basestringParameters
        baseString.Append(EncodeCharacters(Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&")))
    Next


    Dim finalBaseString As String = baseString.ToString().Substring(0, baseString.Length - 3)


    Dim signingKey As String = EncodeCharacters(Uri.EscapeDataString(oauthconsumersecret)) + "&" + EncodeCharacters(Uri.EscapeDataString(oauthtokensecret))

    'Sign the request
    Dim hasher As New HMACSHA1(New ASCIIEncoding().GetBytes(signingKey))
    Dim oauthsignature As String = Convert.ToBase64String(hasher.ComputeHash(New ASCIIEncoding().GetBytes(finalBaseString)))


    Dim webRequest__1 As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
    Dim authorizationHeaderParams As New StringBuilder()
    authorizationHeaderParams.Append("OAuth ")
    authorizationHeaderParams.Append("oauth_nonce=" + """" + Uri.EscapeDataString(oauthnonce) + """,")
    authorizationHeaderParams.Append("oauth_signature_method=" + """" + Uri.EscapeDataString(oauthsignaturemethod) + """,")
    authorizationHeaderParams.Append("oauth_timestamp=" + """" + Uri.EscapeDataString(oauthtimestamp) + """,")
    authorizationHeaderParams.Append("oauth_consumer_key=" + """" + Uri.EscapeDataString(oauthconsumerkey) + """,")
    If Not String.IsNullOrEmpty(oauthtoken) Then
        authorizationHeaderParams.Append("oauth_token=" + """" + Uri.EscapeDataString(oauthtoken) + """,")
    End If
    authorizationHeaderParams.Append("oauth_signature=" + """" + Uri.EscapeDataString(oauthsignature) + """,")
    authorizationHeaderParams.Append("oauth_version=" + """" + Uri.EscapeDataString(oauthversion) + """")
    webRequest__1.Headers.Add("Authorization", authorizationHeaderParams.ToString)

    webRequest__1.Method = "GET"
    webRequest__1.ContentType = "application/x-www-form-urlencoded"

    webRequest__1.Timeout = 3 * 60 * 1000
    Try

        Dim webResponse As HttpWebResponse = TryCast(webRequest__1.GetResponse(), HttpWebResponse)

        Dim dataStream As System.IO.Stream = webResponse.GetResponseStream()
        ' Open the stream using a StreamReader for easy access.
        Dim reader As New StreamReader(dataStream)
        ' Read the content.
        Dim responseFromServer As String
        responseFromServer = reader.ReadToEnd()
        Return responseFromServer
    Catch ex As Exception
    End Try

End Function

该函数不返回任何内容。在调试模式下包含reader.ReadToEnd() 的行显示“无法计算表达式”。

如果 url 采用这种格式,则相同的代码可以正常工作 https://api.twitter.com/1.1/application/rate_limit_status.json 要么 https://api.twitter.com/1.1/search/tweets.json?q=example

为什么它不适用于流 API?我不能使用搜索 api,因为它不会返回我需要的所有结果,例如搜索 api 不会返回包含 url 的推文。

我确实按照 twitter 网站的建议尝试了用于 .net 项目的 tweetinvi 库。

Public Sub Twit()
    Dim oauthconsumerkey As String = "consumerkey"
    Dim oauthconsumersecret As String = "consumersecret"
    Dim oauthsignaturemethod As String = "HMAC-SHA1"
    Dim oauthversion As String = "1.0"
    Dim oauthtoken As String = "token"
    Dim oauthtokensecret As String = "tokensecret"

    Auth.SetUserCredentials(oauthconsumerkey, oauthconsumersecret, oauthtoken, oauthtokensecret)
    Auth.ApplicationCredentials = New TwitterCredentials(oauthconsumerkey, oauthconsumersecret, oauthtoken, oauthtokensecret)

    Dim filteredStream = Tweetinvi.Stream.CreateFilteredStream()
    filteredStream.AddTrack("example")
    Dim txt As String = ""


    AddHandler filteredStream.MatchingTweetReceived, Sub(sender As Object, args As Tweetinvi.Core.Events.EventArguments.MatchedTweetReceivedEventArgs)
                                                         Console.WriteLine(args.Tweet.Text)
                                                         txt &= args.Tweet.Text
                                                     End Sub

    filteredStream.StartStreamMatchingAllConditions()

End Sub

但这并没有返回任何东西。该事件没有被调用,我没有得到任何结果。

这两种方法都失败了。还有其他清晰的例子可以用来从 vb.net 网页调用状态/过滤器吗?

【问题讨论】:

    标签: vb.net api twitter streaming


    【解决方案1】:

    我是 Tweetinvi 的开发者。

    您的代码看起来正确。请告诉我您收到了什么异常。

    另外,我不确定是否直接在页面中调用此代码(我不熟悉 WebForms),但请注意 StartStreamMatchingAllConditions 将阻止 Thread 它运行直到流停止.

    如果您希望它在幕后运行,您将需要使用async 版本:StartStreamMatchingAllConditionsAsync()

    最后,我将流推文发送到 UI 的方式是使用 WebSocket 并将信息从服务器发送到 javascript 处理程序。

    【讨论】:

    • 使用 Twetinvi 没有得到任何异常,代码只是没有做任何事情。我确实添加了异步功能,但还是一样。此函数在网页中的 page_load 上被调用。您能否提供一个编码示例,如何获取 strean 推文以便检查和循环它们?
    • 我去看看,我知道我在某处有例子。
    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2021-05-25
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多