2012-01-13 22 views
5

Tôi đang cố gắng để có được vĩ độ/kinh độ của tất cả bạn bè của người dùng bằng một cuộc gọi API duy nhất. Tôi tin rằng tôi cần phải viết một câu lệnh FQL multi-query, nhưng tôi không thể có được cú pháp chính xác.Nhận vĩ độ/kinh độ current_location của bạn bè bằng Graph FQL

Tôi tin rằng hai truy vấn cần phải giống như sau:

'"friends":"SELECT uid,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"' 

'"location":"SELECT location FROM page WHERE id IN (SELECT current_location_id FROM #friends)"'; 

Vấn đề của tôi là bằng cách nào đó tôi cần phải có được ID của CURRENT_LOCATION trong truy vấn đầu tiên để tôi có thể tham khảo nó trong truy vấn thứ hai, nhưng tôi chỉ biết cách lấy một mảng chứa id.

Cảm ơn bạn đã trợ giúp!

Làm rõ:

Tôi không cố gắng để có được check-in của bạn bè. Thay vào đó, tôi muốn vẽ đồ thị "current_location" (nghĩa là nơi chúng sống) của tất cả bạn bè của người dùng trên bản đồ Địa lý. Tôi có thể lấy "CURRENT_LOCATION" của người dùng với các truy vấn FQL sau:

"SELECT uid,sex,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())" 

Truy vấn này trả về mảng sau:

[current_location] => Array 
      (
       [city] => New York 
       [state] => New York 
       [country] => United States 
       [zip] => 
       [id] => 108424279189115 
       [name] => New York, New York 
      ) 

nào không chứa kinh độ và vĩ độ của các CURRENT_LOCATION (New York trong ví dụ trên)

vì vậy bây giờ tôi cần phải thực hiện ID của CURRENT_LOCATION (ví dụ 108424279189115) và chạy một truy vấn FQL thứ hai như:

"SELECT location,name FROM page WHERE page_id = 108424279189115)" 

Để có được vĩ độ và kinh độ của current_location. Hiện nay, tôi có một mã làm việc chạy truy vấn FQL đầu tiên, sau đó trích xuất page_id trong php, và sau đó chạy một truy vấn FQL thứ hai để có được vĩ độ current_location/kinh độ. Tuy nhiên, vì lý do hiệu suất tôi muốn chạy chỉ một truy vấn đa nếu điều này là có thể.

+0

Cuối cùng bạn đã làm gì? – TarunG

+0

Tôi thực sự không bao giờ có được cú pháp array.value để làm việc cho tôi và tôi chỉ mất hiệu suất hit chạy để tách các truy vấn FQL. – pyro70

Trả lời

2

Edit:

Truy vấn nên làm việc bằng cách điều chỉnh các truy vấn thứ hai để:

'"location":"SELECT location FROM page WHERE id IN (SELECT current_location.id FROM #friends)"'; 

Khi làm việc với một kiểu mảng trong API FB bạn có thể truy cập vào các giá trị trong bất kỳ truy vấn bằng cách làm mảng. giá trị

Ngoài ra, nếu tất cả các bạn cần là id của trang, có thể bạn sẽ có được hiệu suất tốt hơn bằng cách làm current_location.id trong truy vấn đầu tiên bạn


Bạn sẽ muốn sử dụng một fql.multiquery, có một câu trả lời similair đây có thể được điều chỉnh theo nhu cầu: Facebook Graph API get all users and their status

Các tài liệu FQL trên multiquery nằm ở đây: http://developers.facebook.com/docs/reference/fql/

Cũng bạn đang cố gắng để có được lat/long của một đối tượng checkin? Nếu vậy bạn cần phải có một cái nhìn tại khu vực này: http://developers.facebook.com/docs/reference/fql/checkin/

Edit:

Tôi không chắc chắn rằng những gì bạn đang cố gắng làm là có thể.Tôi chỉ xem qua api và thử nghiệm một số truy vấn, cách duy nhất bạn có thể nhận được lat/long từ một người bạn dường như dựa trên một checkin, từ đó bạn có thể nhận được thông tin chi tiết trên trang nếu cần thiết ... truy vấn thứ hai, current_location_id không được tham chiếu ở bất kỳ vị trí nào trong bảng trang và việc chọn vị trí từ bảng trang sẽ cung cấp cho bạn thông tin vị trí ở vị trí mà nó liên quan đến. Có lẽ bạn có thể xây dựng thêm về những gì bạn đang cố gắng hoàn thành.

Đây là một tuyên bố multiquery tôi đã viết trong PHP sử dụng FQL (nó sẽ chọn tọa độ của tất cả bạn bè của bạn tin đăng ký, sau đó từ đó có được thông tin chi tiết về vị trí của checkin liên quan đến người bạn đó):

try{ 
    $multiQuery = "{ 
     'query1':'SELECT coords, tagged_uids, page_id FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me())', 
     'query2':'SELECT name, description FROM page WHERE page_id IN (SELECT page_id FROM #query1)' 
    }"; 

    $param = array(  
     'method' => 'fql.multiquery',  
     'queries' => $multiQuery,  
     'callback' => '' 
    );  
    $queryresults = $facebook->api($param); 
     print_r($queryresults); 
    } 
catch(Exception $o){ 
    print_r($o); 
} 
+0

cảm ơn cho phản ứng nhưng trừ khi tôi đang thiếu một cái gì đó nó không trả lời câu hỏi của tôi. Tôi hiểu ví dụ bạn đã đăng (nhận trạng thái người dùng), nhưng trong trường hợp này họ chỉ nhận được UID của tất cả bạn bè của họ và sau đó sử dụng UID để truy vấn trạng thái của họ. Tuy nhiên, vấn đề của tôi là tôi không biết cách truy vấn ID của current_location. Tôi có thể nhận được tất cả các current_location của bạn tôi như trong # bạn bè truy vấn tôi đã viết ở trên, nhưng điều này trả về một đối tượng. Và tôi không thể sử dụng một đối tượng để thực hiện một truy vấn khác. Làm thế nào để có được id thay vì đối tượng. Nên đơn giản nhưng tôi không thể tìm thấy bất kỳ ví dụ – pyro70

+0

Để làm rõ, khi tôi nói truy vấn trả về một "đối tượng" cho current_location tôi có nghĩa là trả về truy vấn và "mảng". – pyro70

+0

Bạn đã kiểm tra xem những gì được chứa trong đối tượng mảng? Bạn có thể chạy print_r ($ object) không; và dán kết quả, nếu có? Tôi sẽ cung cấp cho các mã một thử sau ngày hôm nay hoặc sáng ngày mai nếu bạn vẫn không thể tìm ra nó –

2
fql?q=SELECT location,name FROM page WHERE page_id in (SELECT current_location.id from user where uid in(select uid2 from friend where uid1=me())) 

này sẽ làm điều kỳ diệu cho bạn

1
facebook.batch_fql({ 
    'query1': "SELECT uid, name, current_location.id FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me())", 
    'query2': "SELECT page_id, name, description, location FROM page WHERE page_id IN (SELECT current_location.id FROM #query1)" 
}) 

sẽ trở lại hai phản ứng

ai có một danh sách bạn bè UID, tên và vị trí hiện tại của họ ID

người kia sẽ là một danh sách các ID vị trí độc đáo với tên, mô tả của họ và thông tin định vị

EDIT: nếu bạn truy vấn current_location sử dụng FQL, bạn sẽ nhận được latlong đầy đủ trong phản hồi đầu tiên và thậm chí bạn không cần số thứ hai

Các vấn đề liên quan