Как я могу выполнить facebook batch fql на Java

#java #facebook #batch-file #facebook-fql

#java #Facebook #пакетный файл #facebook-fql

Вопрос:

в facebook fql есть этот код

 https://developers.facebook.com/docs/reference/api/batch/


curl 
    -F 'access_token=…' 
    -F 'batch=[ 
            {"method": "GET", "relative_url": "me"}, 
            {"method": "GET", "relative_url": "me/friends?limit=50"} 
        ]'
    https://graph.facebook.com
  

предполагается, что он должен быть отправлен с помощью json
, но я действительно не понимаю, как это сделать
, какая-либо помощь?

Спасибо

Комментарии:

1. Можете ли вы быть более точными в своем вопросе? что вы пробовали, чего ожидали и каков результат, который вы получили? вы пробовали вышеуказанную команду? это не удалось? у вас установлен curl? он ответил? что вы получили? какое сообщение об ошибке вы видите?

Ответ №1:

Вы можете просто использовать BatchFB api, он очень мощный и простой, вам не нужно иметь дело со всеми этими вещами, и он использует fql, например, чтобы привлечь всех ваших друзей

 Later<ArrayNode> friendsArrayList = this.Batcher.query("SELECT uid FROM user WHERE uid  IN (SELECT uid2 FROM friend WHERE uid1 = me())");
    for (JsonNode friend : friendsArrayList.get()) {
            .......
        }
  

и его пакетное

Ответ №2:

Я полагаю, что ваш вопрос заключается в том, как выполнить пакетный запрос с использованием Facebook Graph API. Для этого вы должны отправить запрос POST на

 "https://graph.facebook.com" 
  

и отправляемые данные post должны быть

 "batch=[{'method': 'GET', 'relative_url': 'me'}, {'method': 'GET', 'relative_url': 'me/friends?limit=50'}]amp;access_token=@accesstoken" 
  

в вашем случае [@accesstoken должен быть заменен вашим значением токена доступа].

Этот запрос вернет сведения о владельце токена доступа (обычно текущего зарегистрированного пользователя) и список из 50 друзей на Facebook (содержит поля id и name) пользователя вместе с заголовками страниц (могут быть опущены).

Я не уверен, имели ли вы в виду java или Javascript. Пожалуйста, будьте конкретны в этом.

В основном я программист на C #. Здесь я предоставлю вам код для выполнения вышеупомянутого запроса на C #.

 WebRequest webRequest = WebRequest.Create("https://graph.facebook.com");
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-UrlEncoded";
byte[] buffer = Encoding.UTF8.GetBytes("batch=[{'method': 'GET', 'relative_url': 'me'}, {'method': 'GET', 'relative_url': 'me/friends?limit=50'}]amp;access_token=@ACCESSTOKEN");
webRequest.ContentLength = buffer.Length;
using (Stream stream = webRequest.GetRequestStream())
{
    stream.Write(buffer, 0, buffer.Length);
    using (WebResponse webResponse = webRequest.GetResponse())
    {
        if (webResponse != null)
        {
            using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
            {
                string data = streamReader.ReadToEnd();
            }
        }
    }
}
  

Здесь переменные данные будут содержать результат.

Ответ №3:

Салах, вот пример, который я использую в качестве ссылки, прошу прощения, хотя я не помню, где я нашел.

 FB.api("/", "POST", {
    access_token:"MY_APPLICATION_ACCESS_TOKEN",
    batch:[
        {
            "method":"GET",
            "name":"get-photos",
            "omit_response_on_success": true,
            "relative_url":"MY_ALBUM_ID/photos"
        },
        {
            "method": "GET",
            "depends_on":"get-photos",
            "relative_url":"{result=get-photos:$.data[0].id}/likes"
        }
    ]
}, function(response) {
    if (!response || response.error) {
        console.log(response.error_description);
    } else {    
        /* Iterate through each Response */
        for(var i=0,l=response.length; i<l; i  ) {
            /*  If we have set 'omit_response_on_success' to true in the Request, the Response value will be null, so continue to the next iteration */
            if(response[i] === null) continue;
            /*  Else we are expecting a Response Body Object in JSON, so decode this */
            var responseBody = JSON.parse(response[i].body);
            /*  If the Response Body includes an Error Object, handle the Error */
            if(responseBody.error) {
                // do something useful here
                console.log(responseBody.error.message);
            } 
            /*  Else handle the data Object */
            else {
                // do something useful here
                console.log(responseBody.data);
            }
        }
    }
});