Facebook graph api 如何使用Facebook API从纬度/经度获取城市的地点ID

Facebook graph api 如何使用Facebook API从纬度/经度获取城市的地点ID,facebook-graph-api,geolocation,facebook-fql,Facebook Graph Api,Geolocation,Facebook Fql,我需要在Facebook上找到城市的位置,以获得许多lat/long积分。实际点指的是个人地址,因此没有确切的地点ID可供查找,就像在企业中一样 为了测试,我要找的是 图形搜索功能将返回许多地方,但不返回城市 原始FQL不允许按lat/long进行搜索,而且也没有“附近”的概念 按ID进行的FQL查询显示至少有一个“显示子文本”字段,指示对象是城市 谢谢你的帮助。我有超过80年的我父亲的日期和地理标记的照片,他很想在他的时间表上看到 编辑 城市不在位置表中,它们只在页面表中。 有一个未记录的

我需要在Facebook上找到城市的位置,以获得许多lat/long积分。实际点指的是个人地址,因此没有确切的地点ID可供查找,就像在企业中一样

为了测试,我要找的是

  • 图形搜索功能将返回许多地方,但不返回城市

  • 原始FQL不允许按lat/long进行搜索,而且也没有“附近”的概念

  • 按ID进行的FQL查询显示至少有一个“显示子文本”字段,指示对象是城市

谢谢你的帮助。我有超过80年的我父亲的日期和地理标记的照片,他很想在他的时间表上看到

编辑

城市不在
位置
表中,它们只在
页面
表中。 有一个未记录的
distance()
FQL函数,但它只在
place
表中起作用。(Via.)

这项工作:

SELECT name,description,geometry,latitude,longitude, display_subtext 
FROM place 
WHERE distance(latitude, longitude, "40.801985", "-105.593719") < 50000
选择名称、描述、几何体、纬度、经度、显示子文本
原地
其中距离(纬度、经度,“40.801985”、“-105.593719”)<50000
但这会产生一个错误“表页中的距离无效”:

选择页面id、名称、描述、类型、位置
从第页
距离在哪里(
位置,纬度,位置,经度,
"40.801985", "-105.593719") < 50000

这是一个光荣的黑客攻击,但此代码有效。诀窍是提出两个查询。首先,我们寻找靠近我们点的地方。这会带来很多商业场所。然后,我们选取其中一个地方的城市,并使用它在
页面
表中查找该城市的页面。城市似乎有一个标准的命名约定,但美国和非美国城市的命名约定不同

一些小城市在
位置
表中有各种拼写,因此代码在返回的位置循环,直到在
页面
表中找到匹配项

$fb_token = 'YOUR_TOKEN';

// Red Feather Lakes, Colorado
$lat = '40.8078';
$long = '-105.579';
// Karlsruhe, Germany
$lat = '49.037868';
$long = '8.350124';

$states_arr  = array('AL'=>"Alabama",'AK'=>"Alaska",'AZ'=>"Arizona",'AR'=>"Arkansas",'CA'=>"California",'CO'=>"Colorado",'CT'=>"Connecticut",'DE'=>"Delaware",'FL'=>"Florida",'GA'=>"Georgia",'HI'=>"Hawaii",'ID'=>"Idaho",'IL'=>"Illinois", 'IN'=>"Indiana", 'IA'=>"Iowa",  'KS'=>"Kansas",'KY'=>"Kentucky",'LA'=>"Louisiana",'ME'=>"Maine",'MD'=>"Maryland", 'MA'=>"Massachusetts",'MI'=>"Michigan",'MN'=>"Minnesota",'MS'=>"Mississippi",'MO'=>"Missouri",'MT'=>"Montana",'NE'=>"Nebraska",'NV'=>"Nevada",'NH'=>"New Hampshire",'NJ'=>"New Jersey",'NM'=>"New Mexico",'NY'=>"New York",'NC'=>"North Carolina",'ND'=>"North Dakota",'OH'=>"Ohio",'OK'=>"Oklahoma", 'OR'=>"Oregon",'PA'=>"Pennsylvania",'RI'=>"Rhode Island",'SC'=>"South Carolina",'SD'=>"South Dakota",'TN'=>"Tennessee",'TX'=>"Texas",'UT'=>"Utah",'VT'=>"Vermont",'VA'=>"Virginia",'WA'=>"Washington",'DC'=>"Washington D.C.",'WV'=>"West Virginia",'WI'=>"Wisconsin",'WY'=>"Wyoming");

$place_search = json_decode(file_get_contents('https://graph.facebook.com/search?type=place&center=' . $lat . ',' . $long . '&distance=10000&access_token=' . $fb_token));
foreach($place_search->data as $result) {
  if ($result->location->city) {
    $city = $result->location->city;
    $state = $result->location->state;
    $country = $result->location->country;
    if ($country=='United States') {
      $city_name = $city . ', ' . $states_arr[$state]; // e.g. 'Chicago, Illinois'
    }
    else {
      $city_name = $city . ', ' . $country; // e.g. 'Rome, Italy'
    }
    $fql = 'SELECT name,page_id,name,description,type,location FROM page WHERE type="CITY" and name="' .$city_name. '"';
    $result = json_decode(file_get_contents('https://graph.facebook.com/fql?q=' . rawurlencode($fql) . '&access_token=' . $fb_token));
    if (count($result->data)>0) {
      // We found it!
      print_r($result);
      break;
    }
    else {
      // No luck, try the next place
      print ("Couldn't find " . $city_name . "\n");
    }
  }
}

我发现这个解决方案对我来说很有用,因为我在寻找离指定纬度/经度最近的城市的页面。由于某种原因,限制1没有返回最近的城市,所以我提高了限制,然后获得了第一个结果

SELECT page_id
FROM place
WHERE is_city and distance(latitude, longitude, "<latitude>", "<longitude>") < 100000
ORDER BY distance(latitude, longitude, "<latitude>", "<longitude>")
LIMIT 20
选择页面\u id
原地
哪里是城市和距离(纬度、经度,“,”)<100000
按距离排序(纬度、经度、“”、“”)
限制20
SELECT page_id
FROM place
WHERE is_city and distance(latitude, longitude, "<latitude>", "<longitude>") < 100000
ORDER BY distance(latitude, longitude, "<latitude>", "<longitude>")
LIMIT 20