0

同じアプリを使用して友達を取得するための次のバッチ リクエストは機能しません。

var search = {batch: [
    {
      'name' : 'getFriends',
      'relative_url': 'method/fql.query?query=SELECT+uid,+first_name,+name,+pic_square,+pic_small+FROM+user+WHERE+is_app_user=1+and+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=' + userId + ')'
    },
    {
      'method': 'get',
      'relative_url': '{result=getFriends:$.data[*].uid}/news.reads/article', 
    }
]};

次のコードは、バッチ リクエストを実行します。

FB.api('/', 'post', search, function(response) {
    console.log(response);
});

しかし、最初の検索ではnullが返されます。クエリの何が問題になっていますか?

バッチ リクエストに関する facebook のドキュメントによると、*relative_url* は

(...) relative_url (graph.facebook.com の後の URL の部分)

ここから取得します。

そこで、コードの最初のブロックを次のように変更しました。

var search = {batch: [
    {
        'name' : 'getFriends',
        'method' : 'GET',
        'relative_url': 'method/fql?q=SELECT uid, first_name, name, pic_square, pic_small FROM user WHERE is_app_user=1 and uid IN (SELECT uid2 FROM friend WHERE uid1=me())'
    },
    {
        'method': 'GET',
        'relative_url': '{result=getAmigos:$.data[*].uid}/news.reads/article'
    }
]};

バッチの最初のブロックのrelative_urlは Facebook の Open Graph API ツールで機能しますが、JS では http コードは 500 で、メッセージ本文は次のとおりです。

{
    "error": {
        "message": "Graph batch API does not allow REST API method fql",
        "type": "FacebookApiException",
        "code": 3
    }
}

しかし、API バッチ リクエストのドキュメントでは、fql クエリが許可されています。ドキュメントが古い?バグを開く必要がありますか?

PS: バッチ リクエストのない fql は

SELECT uid, first_name, name, pic_square, pic_small 
FROM user WHERE is_app_user=1 
     and uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
4

2 に答える 2

1

使用しないでくださいmethod/fql; FacebookのFQLエンドポイントは今だけfqlです。

...
"name": "getFriends",
"method": "GET",
"relative_url": "fql?q=SELECT...",
...
于 2012-06-15T21:56:42.957 に答える
0

それは今働いています。access_tokenバッチ オブジェクトにパラメーターを追加するだけです。このような:

var searchArgs = {
   access_token: FB.getAuthResponse().access_token,
   batch: []
};

searchArgs.batch.push({
     'method': 'GET',
     'name': 'amigosapp',
     'relative_url': 'method/fql.query?query=SELECT+uid,+first_name,+name,+pic_square,+pic_small+FROM+user+WHERE+is_app_user=1+and+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1=me())&limit=20',
     'omit_response_on_success': false
});

searchArgs.batch.push({
     'method': 'GET',
     'relative_url': 'news.reads/article?date_format=U&ids={result=amigosapp:$.[*].uid}'
});

もう 1 つのトリックは、jsonpath式を別の方法で使用することでした。最初のリクエストの各ユーザーに対して 2 番目のリクエストを行うことができませんでした。そこで、グラフ API リクエストの最後にフレンド ID を追加する方法を変更しました。友達ごとのリクエストについて最初に考えたのは、バッチリクエストを使用することは不可能だと思います。

次に、バッチの呼び出しを行いました:

FB.api('/', 'POST', searchArgs,
    function(response) {
        var friends = response[0].body;
        console.log(friends);
        var activities = response[1].body;
        console.log(activities);
    }
);

取得した投稿を整理するだけです。

[]の

于 2012-06-19T14:48:35.057 に答える