【发布时间】:2011-11-12 00:22:38
【问题描述】:
我正在尝试使用 Twitter 流式处理 API,并尝试打开一个流式供用户在事件发生时使用它们。我正在使用一组标准的类来对 twitter 进行 REST api 调用。在“GET”调用中使用https://userstream.twitter.com/2/user.json 时,响应流永远不会结束……我正在打开一个StreamReader 并读取响应,就像对Twitter 的任何其他REST 调用一样。这对其他人来说可能很明显,但是我如何“消费”这个流......有没有办法在 StreamReader 正在阅读时读取它(意思是在它关闭之前)?或者我可以使用不同的方法来使用这个流......再次,如果这个接缝对某些人来说是基本的,我很抱歉,但我现在无法弄清楚......提前感谢您的任何建议或帮助!!!
这是我开始对此进行故障排除的原始来源... 这个方法是根据我在 LinkedIn 的一个论坛中找到的一组 C# 类制作的。在读取“responseData = responseReader.ReadToEnd()”的行中,该方法开始“喝”流......但这样做就像一个无底的杯子......在它关闭之前实时读取这个数据流(这是基本上直到我停止调试或终止进程)是我要解决的问题。
Private Function WebResponseGet(ByVal webRequest As HttpWebRequest) As String
Dim responseReader As StreamReader = Nothing
Dim responseData As String = ""
Try
responseReader = New StreamReader(webRequest.GetResponse().GetResponseStream())
responseData = responseReader.ReadToEnd()
Catch
Throw
Finally
webRequest.GetResponse().GetResponseStream().Close()
responseReader.Close()
responseReader = Nothing
End Try
Return responseData
End Function
更新和相关问题:
所以,我想出了以下方法来保持流打开并将其写入文件(这不是最终方法,我只是在测试,这是一种开发最好的方法:)
Private Sub DrinkIt(ByVal webRequest As HttpWebRequest)
Dim coder As Encoding = Encoding.UTF8
Dim stream_reader As New StreamReader(webRequest.GetResponse().GetResponseStream(), coder, True, 1024)
Do While 0 < 1
Dim w As IO.StreamWriter
w = File.AppendText(targetFile)
Dim c(5) As Char
stream_reader.Read(c, 0, c.Length)
w.Write(c)
w.Close()
w.Dispose()
Loop
stream_reader.Close()
stream_reader.DiscardBufferedData()
stream_reader.Dispose()
End Sub
这会将打开的推特流写入文件,每次我发推、转推、删除、直接消息...等等...文件都会随着附加到文本的 JSON 对象而增长。我在这里使用 Do While 0 MSDN StreamReader Constructor Description 上看到,New 构造函数应该接受“leaveOpen”的布尔值,但是当我尝试将它添加到构造函数时不允许这样的参数... 有没有人有一个很好的例子说明如何用强制和无限循环来做到这一点,或者只是比这更好的方法......我想简单地阅读每次从 Twitter 发送的新更新,并相应地解决它们?显然有一种方法,我只是对消费这样的流而不关闭它的概念是新的..(**顺便说一句,感谢邪恶博士的建议,我在这个方向上处于领先地位......这不完全是他的建议,而是导致的我在这里)
【问题讨论】:
-
请显示一些来源...您尝试了什么?什么是目标/什么不起作用?
-
Yahia,我更新了 ?使用我的原始来源并描述了目标...本质上是读取此流,并基于此流执行其他代码块。
-
请查看我的回答中的链接 - 您将找到有关如何处理 Twitter 流 API 的源代码和解释...
-
确保在处理流(实际上是任何一次性对象)时始终用 Using 语句包围它们:msdn.microsoft.com/en-us/library/htd05whh(v=vs.100).aspx
-
@Mataniko - 出色的观察力。我同意。
标签: c# .net vb.net twitter streamreader