Как я могу сделать Facebook FQL в Java - PullRequest
6 голосов
/ 08 октября 2011

в 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, но я действительно не понимаю, как это сделать?

спасибо

Ответы [ 3 ]

3 голосов
/ 15 октября 2011

Вы можете просто использовать 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 голосов
/ 12 октября 2011

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

"https://graph.facebook.com" 

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

"batch=[{'method': 'GET', 'relative_url': 'me'}, {'method': 'GET', 'relative_url': 'me/friends?limit=50'}]&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'}]&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();
            }
        }
    }
}

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

1 голос
/ 12 октября 2011

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

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);
            }
        }
    }
});
...