2011-08-04 9 views
1

私はFacebookのバッチリクエストメソッドを使ってFacebookからさまざまなユーザーを取得するVB.netアプリケーションをビルドしようとしています。私の問題は実際の要求を実行することにあるようです。応答を取得しようとすると、「Bad Request」というサーバーから400エラーが返されます。リクエストの本文を貧弱に形成している場合、またはコードに間違って貼り付けているかどうかはわかりません。ここでFacebookのバッチリクエスト

は、私の要求コードです:

Dim sURL As String 
    sURL = "https://graph.facebook.com" 

    Dim wrGETURL As WebRequest 
    wrGETURL = WebRequest.Create(sURL) 
    wrGETURL.Method = "POST" 
    wrGETURL.Proxy = WebRequest.DefaultWebProxy 
    Dim reqStream As IO.Stream = wrGETURL.GetRequestStream() 

    Dim access_token As String = "..." ' Access token removed, but it is valid 

    Dim jsonReq As String = """access_token"": """ + access_token + """" 
    jsonReq = jsonReq + """batch"": [" 

    AddBatchRequest(jsonReq, "[email protected]") 
    AddBatchRequest(jsonReq, "[email protected]") 

    jsonReq = jsonReq + "]" 

    Dim enc As New System.Text.UTF8Encoding() 
    Dim jsonBytes As Byte() = enc.GetBytes(jsonReq) 

    reqStream.Write(jsonBytes, 0, jsonBytes.Length) 

    reqStream.Close() 

    Dim oLabel As Label = output_label 

    Dim objStream As Stream 
    Try 
     objStream = wrGETURL.GetResponse.GetResponseStream() '<<<<Crashes here 

     Dim objReader As New StreamReader(objStream) 
     Dim sLine As String = "" 
     Dim i As Integer = 0 

     Dim ostr As String = "" 

     Do While Not sLine Is Nothing 
      i += 1 
      sLine = objReader.ReadLine 
      If Not sLine Is Nothing Then 
       ostr = ostr + sLine 

      End If 
     Loop 

     oLabel.Text = ostr 
    Catch ex As Exception 
     oLabel.Text = ex.Message 
    End Try 

Private Sub AddBatchRequest(ByRef json As String, ByVal email As String) 
    If json.EndsWith("}") Then 
     json = json + "," 
    End If 
    json = json + "{""method: ""GET"", ""relative_url"": ""search?q=" + email + "&type=user""}" 
End Sub 

私は、文字列本体を形成する方法についてのバリエーションのトンを試してみたが、それらのどれも機能していない、私は追加しておりませんと信じて私をリード体は正しく

+0

2つのニックピック:まず、手動で閉じるのではなく、ストリームの周りに常に 'Using'ブロックを使用してください。第二に、 'Not x Is y'は' x IsNot y'に短縮することができます。 –

+0

私はVB.netを初めてお使いになりました。私の経験の大部分はc/C++になっていますので、VBの特別な構文はよくわかりません。 'Using'ブロックはストリームを手動で閉じるのに対して何をしますか? –

+0

ストリームが開いている間に例外がスローされた場合(または関数を終了する場合)は、手動で終了することはありません。 'Using'は何があってもストリームを閉じます。 –

答えて

0

一番簡単な方法は、あなたのようなものだろう​​サポートするFacebook SDKを使用することです:私はあなたの問題はしかしjsonReqが正しくフォーマットされたPOSTのボディではないということだと思います

Dim fb = New FacebookClient(accessToken) 
Dim results = fb.Batch(New FacebookBatchParameter("[email protected]&type=user"), New FacebookBatchParameter("[email protected]&type=user")) 

を。ここにその値を貼り付けると、誰かが間違っていることを具体的に指摘できると確信しています。 VB.NETがインストールされていません。

+0

バッチリクエストを作成するための例が何かにあるように見えるので、誰かがどのようにフォーマットする必要があるかを教えてくれることを期待していましたPythonのように。私はFacebookのドキュメンテーションに本当に失望しています。その説明とサンプルコードは非常に特殊なので、他のものでコードを使用するのは難しいです。 –

関連する問題