2011-11-12 81 views
4

我正在尝试使用Twitter流式API,并试图为用户打开一个流,以便在事件发生时使用它们。我使用一组标准的类来进行REST API调用Twitter。当在“GET”调用中使用https://userstream.twitter.com/2/user.json时,响应流永远不会结束......我打开一个StreamReader并按照我对任何其他REST调用的方式读取响应。这对其他人来说可能是显而易见的,但我该如何“消费”这个流......是否有读取StreamReader的方式,因为它正在读取(意思是在关闭之前)?或者也许有一种不同的方法,我可以用户消耗这个流....再次,我道歉,如果这接缝是一些初级的,但我现在还不知道...在此先感谢您的任何建议或帮助!在流式传输时从Web请求中消耗StreamReader流.NET?

这是原始来源我开始对此进行故障排除......这种方法是从我在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 

UPDATE &相关的问题:

所以,我想通了,下面的方法来保持流开,并将其写入一个文件(这不会是最后的办法,我米只是测试,显影这样做的最好办法:)

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 

这打开Twitter的数据流写入到一个文件,我每次鸣叫转推,删除,直接留言...等等。 ..该文件随JSON对象一起增长cts附加到文本中。我使用Do While 0 < 1进行测试,因为我只是想看看它工作。我在MSDN StreamReader Constructor Description上看到New构造函数应该为“leaveOpen”接受一个布尔值,但是当我尝试将此添加到构造函数时,不允许这样的参数... 有没有人有一个很好的例子来说明如何做到这一点强制和无限循环或只是比这更好的方法...我想简单地阅读每次从Twitter发送的新更新,并相应地解决它们?显然有一种方法,我只是新的消费流这样的概念,没有它关闭..(**顺便说一句,感谢博士邪恶的建议,我是在这个方向上领先......这是不正是他建议,但就是导致我在这里)

+2

请显示一些来源...你有什么试过?什么是目标/什么是不工作? – Yahia

+0

Yahia,我已经更新了?与我的原始来源和描述的目标......实质上是读取此流,并基于此流执行其他代码块。 – wakurth

+0

请参阅我的答案中的链接 - 您将找到有关如何处理Twitter流媒体API的源代码和解释... – Yahia

回答

1

一种用途:你所看见的leaveOpen参数仅在.NET 4中存在。5只及以上

至于如何应对Twitter的流API:

上面的链接导致你的开源库和文档关于如何访问Twitter API(均为 str eaming API和REST API)与.NET/C#。

+0

谢谢Yahia!太棒了。好点,关于“LeaveOpen”参数,我正在使用4.0 ...我检查了VS 2011开发版本,它在那里。另外,最酷的是我已经创建了我自己的REST TweetDotNet类库,它可以工作mint ...我只需为此创建一个特定的流类并继承核心OAuth方法。向队列添加消息非常棒,我不知道为什么我没有想到......顶部链接专门回答了问题,其他链接有助于从头开始调整解决方案。 – wakurth

2

使用StreamReader的缓冲喂接收的字节(Encoding.UTF8.GetString),然后把它们添加到StringBuilder得到接收的信号流的字符串。

StringBuilder此言前期的ToString

+0

你好Dr. Evil ...我正在测试这个,并会根据你的建议在适当的时候用我的代码发布对这个问题的编辑。谢谢你的见解,先生。 – wakurth