2016-05-17 7 views
0

私の.netウェブページ内でStreaming APIフィルタを呼び出そうとしています。vb.netのウェブページからTwitterストリーミング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 

関数のdoesntを使用していたコードである(コンシューマキー、コンシューマシークレット、アクセストークンとアクセストークンシークレット)

を必要な資格情報を取りました何かを返す。デバッグモードで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を使用することはできません。たとえば、URLを含むツイートは検索APIによって返されません。

私はツイートウェブサイトで提案されている.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のWebページからステータス/フィルタを呼び出すために使用できる他の明確な例はありますか?

答えて

0

私はTweetinviの開発者です。

コードが正しいように見えます。あなたが受け取った例外を私に教えてください。

また、このコードがページ内で直接呼び出されているかどうかはわかりませんが、StartStreamMatchingAllConditionsはストリームが停止するまで実行されませんので、Threadがブロックされます。

シーンの背後でこれを実行したい場合は、asyncバージョン:StartStreamMatchingAllConditionsAsync()を使用します。

最後に、ストリームのつぶやきをUIに送信する方法は、WebSocketを使用して、サーバーからjavascriptハンドラに情報を送信することです。

+0

Twetinviを使用しても例外はありません。コードは何もしません。私は非同期関数を追加しましたが、それでも同じです。この関数は、Webページのpage_loadで呼び出されています。あなたはそれらをチェックしてループするためにストランのつぶやきを取得する方法をコード化された例を提供することはできますか? – Mahag

+0

私は見て、私はどこかの例と私が知っている。 – Linvi

関連する問題