7

プロジェクトの場合、Facebookの長期間(たとえば1〜2年)にわたってページの洞察を取得する必要があります。

私は最初に単一のリクエストを実行しようとしましたが、リクエストするだけであることが判明しました

/PAGE_ID/insights?since=xxx&until=xxx

必要なすべてのデータを返すわけではありません(回答のサイズに制限があるかのように、どういうわけかデータを抑制します)。

次に、日付範囲を分割しようとしました(たとえば、01.04.2011-01.04.2011-> 01.04.2011-01.08.2011-01.12.2011-01.04.2011)。 。

次のアプローチは、「page_stories、page_impressions、...」など、必要なインサイト値のみをリクエストすることでした。リクエストはこんな感じでした

/PAGE_ID/insights/page_impressions/day?since=xxx&until=xxx

これは実際には機能しましたが、ajaxでは機能しませんでした。一部のリクエストが削除されたように見えることがあり(特に、Google Chromeでブラウザタブを変更した場合)、すべてのリクエストが回答を返すことを確認する必要があります。同期ソリューションは、1つのリクエストに少なくとも2秒が必要であり、日付範囲が2年の場合、約300の単一リクエストがある可能性があることを考えると時間がかかりすぎます。これは完了するのに時間がかかりすぎます。

最後に、私が必要としているのはまさにバッチリクエストを実行するFacebookの機能に出くわしました。1回の呼び出しで最大50のリクエストをパックできるため、帯域幅が大幅に低下します。そして、ここで私は立ち往生しています。facebook apiには、その使用方法に関するいくつかの例が示されていますが、グラフエクスプローラーおよびphp facebook api sdkでテストしたところ、いずれも機能しませんでした。このリクエストをパックしようとしました

PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600

バッチリクエストに追加されましたが、失敗しました。

APIにバグがあるようです。疑問符「?」を使用していると、常にこのエラーが発生します。'relative_url'フィールド。

{
  "error": {
    "message": "batch parameter must be a JSON array", 
    "type": "GraphBatchException"
  }
}

これが私が試したことです:

これらは'JSON配列でなければならない'エラーを与えます:

?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600"}]

これら2つは実際にはデータを返しますが、パラメーターを無視しています。

?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}]
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000,until=1333695600"}]
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":{"since":"1332486000","until":"1333695600"}}]

そして、これはこれが「サポートされていないPOSTリクエスト」であることを教えてくれます:

?batch=[{"method":"POST","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}]

誰かが助けることができますか?

4

2 に答える 2

30

私はついに私の問題の解決策を見つけました。Facebookのドキュメントには記載されていませんが、このリクエストについては

?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600"}]

適切に機能するには、次のような関数を使用する必要があります

urlencode()

json部分をエンコードします。このように、クエリは魅力のように機能します。PHPの例:

$insights = $facebook->api('?batch=['.urlencode('{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332572400&until=1333782000"}').']'
    ,'post',array('access_token' => $this->facebook->getAccessToken()));

その結果、次のようになります。

?batch=[%7B%22method%22%3A%22GET%22%2C%22relative_url%22%3A%22%2FPAGE_ID%2Finsights%2Fpage_fan_adds%2Fday%3Fsince%3D1300086000%26until%3D1307862000%22%7D]
于 2012-04-08T15:14:16.127 に答える
1

この例は、arrayID の を使用して、urlencoding でバッチ リクエストを作成するためのものです。

$postIds = [
    'XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXX',
    'XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXX',
];

$queries = [];
foreach( $postIds as $postId ) {
    $queries[] = [
        'method'        => 'GET',
        'relative_url'  => '/' . $postId . '/comments?summary=1&filter=stream&order=reverse_chronological',
    ];
}

$requests = $facebook->post( '?batch=' . urlencode( json_encode( $queries ) ) )->getGraphNode();
于 2016-11-14T09:30:48.993 に答える