0

次のコードで FQL クエリを作成しようとしています。

def get_postData(to_post, access_token):
    postData = {}
    postData["method"] = "fql.query"
    postData["query"] = to_post
    postData["access_token"] = access_token
    return postData

def make_request(url, to_post, access_token):
    postData = get_postData(to_post, access_token)
    return requests.post(url, data = postData).json()[u'data']

POST リクエストの使用は、ドキュメントに記載されている最適な方法ではなく、これを機能させることができません。メソッドの下に「fql.query」または「fql」を指定すると (ここの Javascript 固有の例から取得: How can I execute a FQL query with Facebook Graph API )、次の応答が返されます。

{u'error': {u'message': u'Unsupported method, fql.query', u'code': 100, u'type': u'GraphMethodException'}}

もちろん、これはドキュメントではカバーされていません。そのメソッド仕様がなければ、次のように返されます。

{u'error': {u'message': u'Unsupported post request.', u'code': 100, u'type': u'GraphMethodException'}}

これもドキュメントではカバーされていません。ここで get リクエストを使用することはできません (これは些細なことです)。かなり大きなクエリを作成しているため、現時点では get リクエストの制限をオーバーフローしていませんが、近い将来には十分にオーバーフローする可能性があります。

この問題の解決に関して、ご協力をお願いいたします。

編集:私は次のようにリクエストしていることに注意してください:

https://graph.facebook.com
4

2 に答える 2

1

必要なのは、リクエストがどのように構築されているかを理解することだけです。それを理解すれば、エラーがより理解できるようになります。

postData = {}
postData["method"] = "fql.query"
postData["query"] = to_post
postData["access_token"] = access_token
requests.post(url, data = postData).json()[u'data']

これを実行しなくても、リクエストが次のように見えることがわかります

POST https://graph.facebook.com/?method=fql.query&query=THE_QUERY&access_token=THE_TOKEN

あなたが提示したドキュメントhttps://developers.facebook.com/docs/reference/api/batch/method/fql.queryの相対URLとして示されているfql.methodではありません。

仕様を削除すると (なぜこれを実行したいのかわかりません)、明らかに未知のエラーが発生します。

POST https://graph.facebook.com/?query=THE_QUERY&access_token=THE_TOKEN

正しいリクエストは

GET https://api-read.facebook.com/restserver.php?method=fql.query&query=THE_QUERY&access_token=THE_TOKEN

また

GET https://api.facebook.com/method/fql.query&query=THE_QUERY&access_token=THE_TOKEN

method/fql.query への HTTP POST を許可するバッチが使用するエンドポイントが完全にはわからないので、実際にバッチ要求を実行していない限り、それに依存しません。

最終fql.query的には、非推奨になりつつあるため、使用するのが最善の方法ではない可能性があります。

GET リクエストの制限を超えるほどクエリが長くなる可能性がある理由はまだわかりません。クエリをマルチクエリまたはバッチとして構成する方法を再評価することを検討してください。

于 2013-06-02T14:25:19.460 に答える
1

まず、どの URL にアクセスしようとしていますか? つまり、なぜ FQL の POST 要求が必要なのですか? FQL はデータの取得用であり、投稿用ではありません。

ドキュメント ( https://developers.facebook.com/docs/technical-guides/fql/ )によると、リクエストは次のようになります。

https://graph.facebook.com/fql?q=QUERY&access_token=TOKEN - ここで、QUERY - FQL に対する urlencoded クエリ、TOKEN - 有効なアクセス トークンです。

于 2013-06-02T12:48:11.397 に答える