2016-05-17 9 views
0

Ich versuche, den Streaming-API-Filter in meiner .net-Webseite aufzurufen.Aufruf der Twitter-Streaming-API (Status/Filter) von der Webseite vb.net

habe ich eine App auf Twitter erstellen und nahm die benötigten Zugangsdaten (Consumer-Key, Consumer-Secret, Zugriffstoken und Zugriffstoken Geheimnis)

Dies ist der Code

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 

Die Funktion doesnt ist mit alles zurückgeben. In der Zeile, die reader.ReadToEnd() im Debug-Modus enthält, wird "Ausdruck kann nicht ausgewertet werden" angezeigt.

Der gleiche Code funktioniert ordnungsgemäß, wenn die URL in diesem Format ist https://api.twitter.com/1.1/application/rate_limit_status.json oder https://api.twitter.com/1.1/search/tweets.json?q=example

Gibt es Gründe, warum es nicht für Strom apis funktioniert? Ich kann die Such-API nicht verwenden, da sie nicht alle Ergebnisse liefert, die ich brauche, zum Beispiel werden Tweets, die URLs enthalten, von der Such-API nicht zurückgegeben.

Ich habe versucht Tweeteinvi-Bibliothek für. NET-Projekte wie von Twitter-Website vorgeschlagen.

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 

Aber das bringt nichts zurück. Das Ereignis wird nicht aufgerufen und ich bekomme kein Ergebnis.

Beide Methoden fehlgeschlagen. Gibt es ein anderes klares Beispiel, das ich verwenden kann, um Status/Filter von vb.net Webseiten aufzurufen?

Antwort

0

Ich bin der Entwickler von Tweettinvi.

Ihr Code sieht korrekt aus. Bitte lassen Sie mich wissen, welche Ausnahme Sie erhalten.

Auch ich bin nicht sicher, zu verstehen, wenn dieser Code direkt in der Seite aufgerufen wird (ich bin nicht vertraut mit WebForms), aber bitte nicht, dass StartStreamMatchingAllConditions die Thread blockiert es läuft, bis der Stream-Stopp.

Wenn Sie möchten, dass dies hinter der Szene läuft, sollten Sie die async Version verwenden: StartStreamMatchingAllConditionsAsync().

Schließlich, die Art, wie ich Stream-Tweets an eine UI sende, ist die Verwendung von WebSocket und das Senden von Informationen vom Server an einen JavaScript-Handler.

+0

Mit Twetinvi bekomme ich keine Ausnahmen, der Code tut einfach nichts. Ich habe Async-Funktion hinzugefügt, aber immer noch das Gleiche. Diese Funktion wird bei page_load auf einer Webseite aufgerufen. Kannst du ein codiertes Beispiel geben, wie man die Strean-Tweets bekommt, um sie zu überprüfen und zu durchlaufen? – Mahag

+0

Ich werde es mir ansehen, ich weiß, ich habe ein Beispiel irgendwo. – Linvi