Facebook营销API。地理搜索

时间:2017-07-07 11:48:50

标签: facebook facebook-graph-api facebook-marketing-api

我想从Facebook获取一个国家所有城市的名单。

我从v2.9的FB文档开始: Facebook Marketing API

尝试使用curl获取城市列表:

curl -G \
  -d 'location_types=["city"]' \
  -d 'type=adgeolocation' \
  -d 'q=dub' \
  -d 'access_token=<MY_TOKEN>' \
  https://graph.facebook.com/v2.9/search

但它返回空的json。如果我删除q = dub参数,它仍然返回空数据。但如果我把国家作为一种位置,那么它很好地返回国家名单。我做错了什么?

如果您可以指出如何让它返回特定国家的城市,那么它也会受到关注。有country_code参数,但它也不起作用。

1 个答案:

答案 0 :(得分:0)

有点奇怪,但我在最近几个小时尝试了这一点,结果发现当您使用沙盒帐户的访问令牌时,搜索城市是不可用的。

我使用真正的facebook广告帐户的访问令牌尝试了相同的api端点,并且它可以正常工作。

至于其工作原理,这里有一些代码可以帮助未来的读者:

//Include Facebook SDK classes
//use FacebookAds\Api;
//use FacebookAds\ApiRequest;
//use FacebookAds\Object\TargetingSearch;
//use FacebookAds\Object\Search\TargetingSearchTypes;

function searcher() {
    $fbutils = new FacebookUtils(16);
    $account_id = $fbutils->getAccountID();
    $accessToken = $fbutils->getAccessToken($account_id);
    Api::init(fb_app_id, fb_app_secret, $accessToken);
        $result = TargetingSearch::search(
            TargetingSearchTypes::GEOLOCATION, null, 'dub', array(
            'location_types' => array('city'),
    ));
    $fb = new Facebook([
        'app_id' => fb_app_id,
        'app_secret' => fb_app_secret,
        'default_graph_version' => 'v2.10',
        'default_access_token' => $accessToken
    ]);
    $fb = $result;
        $objects = $result->getArrayCopy();
        $objects_arr = array();
    do {
        foreach ($objects as $object) {
            $objects_arr[] = $object->getData();
        }
    } while ($objects = $fb->next($objects));

    echo "<pre>";
    print_r($objects_arr);
    exit;
}

注意:用数据替换常量和变量,这应该适用于搜索城市,并使用分页和打印结果作为漂亮的数组。