我想从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参数,但它也不起作用。
答案 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;
}
注意:用数据替换常量和变量,这应该适用于搜索城市,并使用分页和打印结果作为漂亮的数组。