2012-02-03 22 views
8

का उपयोग कर अक्षांश/देशांतर से शहर की प्लेस आईडी कैसे प्राप्त करें मुझे कई अक्षांश/लंबे बिंदुओं के लिए शहर के लिए फेसबुक स्थान ढूंढना होगा। वास्तविक बिंदु व्यक्तिगत पतों को संदर्भित करते हैं, इसलिए किसी व्यवसाय के मामले में देखने के लिए कोई सटीक स्थान आईडी नहीं है।फेसबुक एपीआई

परीक्षण के लिए, मैं के Red Feather Lakes, CO.

  • ग्राफ खोज समारोह स्थानों का एक बहुत वापस आ जाएगी शहर की तलाश में गया था, लेकिन वापस नहीं करता शहरों Example

  • कच्चे FQL आप नहीं करता है लेट/लांग द्वारा खोज, और वैसे भी "पास" की कोई अवधारणा नहीं है। Example

  • आईडी द्वारा एक एफक्यूएल क्वेरी से पता चलता है कि कम से कम एक "डिस्प्ले सबटेक्स्ट" फ़ील्ड है जो इंगित करता है कि ऑब्जेक्ट एक शहर है। Example

किसी भी मदद के लिए धन्यवाद। मेरे पिता के 80 साल से अधिक दिनांकित और जियोटैग किए गए फोटो हैं कि उन्हें अपनी टाइमलाइन पर देखना अच्छा लगेगा!

संपादित

शहरों नहीं place तालिका में, वे केवल page तालिका में कर रहे हैं। एक अनियंत्रित distance() FQL फ़ंक्शन है, लेकिन यह केवल place तालिका में काम करता है। (। this SO answer वाया)

यह काम करता है:

SELECT name,description,geometry,latitude,longitude, display_subtext 
FROM place 
WHERE distance(latitude, longitude, "40.801985", "-105.593719") < 50000 

लेकिन यह एक त्रुटि "दूरी तालिका पेज में मान्य नहीं है" देता है:

SELECT page_id,name,description,type,location 
FROM page 
WHERE distance(
    location.latitude,location.longitude, 
    "40.801985", "-105.593719") < 50000 
+0

बहुत बढ़िया! अच्छा खोज – DMCS

उत्तर

4

यह एक गौरवशाली हैक है, लेकिन इस कोड काम करता है । चाल दो प्रश्न बनाने के लिए है। सबसे पहले हम अपने बिंदु के पास स्थानों की तलाश करते हैं। यह बहुत सारे व्यावसायिक स्थानों को लौटाता है। इसके बाद हम इन स्थानों में से किसी एक के शहर लेते हैं, और उस शहर के पृष्ठ के लिए page तालिका में देखने के लिए इसका उपयोग करें। शहरों के लिए एक मानक नामकरण सम्मेलन प्रतीत होता है, लेकिन अमेरिका और गैर-अमेरिकी शहरों के लिए अलग है।

कुछ छोटे शहरों में place तालिका में विभिन्न वर्तनी होती है, इसलिए कोड page तालिका में एक मैच नहीं मिलने तक लौटे स्थानों के माध्यम से लूप करता है।

$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"); 
    } 
    } 
} 
2

मैंने पाया कि यह समाधान मेरे लिए काम किया गया है जब निकटतम शहर के लिए निर्दिष्ट अक्षांश/देशांतर के लिए एक पृष्ठ की तलाश है। किसी कारण से LIMIT 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 
+0

यह मेरे लिए काम किया! धन्यवाद ! – Tricote

संबंधित मुद्दे