2013-01-20 34 views
0

您好,我使用下面的代碼,以根據提供的URL從facebook獲取事件信息。獲取Facebook事件場地經緯度

的代碼是這樣的:

function importEvent($url) 
{ 
    $facebook = new Facebook(array(
      'appId' => 'someAppId', 
      'secret' => 'someSecret', 
      'cookie' => true, // enable optional cookie support 
     )); 

    if(checkLogin()==true) 
    { 
     //get rid of hash if exists 
     $hash = explode('#',$url); 

     if(!empty($hash[1])) 
      $array = parse_url($hash[1]); 
     else 
      $array = parse_url($hash[0]); 

     parse_str($array['query'],$output); 
     $eid = $output['eid']; 

     if(empty($eid))//new url think http://www.facebook.com/events/2323423423423/ 
     { 
      $url = str_replace('http://www.facebook.com/events/','',$url); 
      $url = str_replace('https://www.facebook.com/events/','',$url); 
      $hash = explode('/?',$url); 

      if(!empty($hash[1])) 
       $url = $hash[0]; 

      $eid = str_replace('?','',$url); 
      $eid = str_replace('/','',$url); 
      //print_r($eid); 
     } 
      //Calling users.getinfo legacy api call example 
      try{ 
       $param = array(
        'method' => 'events.get', 
        'eids' => $eid, 
        'access_token' => $_SESSION['access_token'] 

       ); 
       $events = $facebook->api($param); 
      } 
      catch(Exception $o){ 
       error_log($o); 
       echo $o; 
      } 

     print_r($events); 
     return $events; 
    } 
} 

我得到的輸出是這樣的:

Array 
(
    [0] => Array 
     (
      [eid] => 410474065693887 
      [name] => Sunday Night Fever Vol.4 Disco Special @Legacy Rock Area 
      [pic_small] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/276862_410474065693887_714884848_t.jpg 
      [pic_big] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/276862_410474065693887_714884848_n.jpg 
      [pic] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/276862_410474065693887_714884848_s.jpg 
      [pic_square] => http://profile.ak.fbcdn.net/hprofile-ak-snc6/276862_410474065693887_714884848_q.jpg 
      [has_profile_pic] => 1 
      [host] => Legacy Rock Area 
      [version] => 2 
      [description] => Αφου μας το ζητησατε "παρτε" το..!!! 

Μετα το τελευταιο απιστευτο killer Disco Party εχουμε την ευκαιρια να κανουμε προθερμανση για τον Super Αποκριατικο Φεβρουαριο που θα ακολουθησει στο Legacy Rock Area μεμια βραδυα γεματη Disco,Dance,Pop και οπου μας βγαλει...!! 

Κυριακη 20 Ιανουαριου λοιπον..Sunday Night Fever Disco Special!!! 

That night the DJ saves our lives...!!! 
      [start_time] => 2013-01-20 
      [end_time] => 
      [timezone] => 
      [is_date_only] => 1 
      [creator] => 1732432279 
      [update_time] => 1357737066 
      [location] => Legacy Rock Area 
      [hide_guest_list] => 
      [can_invite_friends] => 
      [privacy] => OPEN 
      [venue] => Array 
       (
        [id] => 244479685665743 
       ) 

      [all_members_count] => 7175 
      [attending_count] => 74 
      [unsure_count] => 144 
      [declined_count] => 509 
      [not_replied_count] => 6957 
     ) 

) 

但是在API文檔裏提到,場地包含以下內容:

的此事件的位置 generic access_token,user_events或friends_events 包含以下一個或多個字段的對象:id,s treet,城市,州,郵編,國家,緯度和經度領域。

但我得到的是場地身份證。

我無法找到如何獲取經緯度+場地場所的LNG一段特定的信息,我認爲這個代碼是確定的,如果我沒有記錯。

我是否需要爲場地信息執行另一個查詢,如果可以,請提供任何參考或代碼示例?或者有一種方法可以讓這段代碼返回lat + lng,所以我不必爲1個事件做2個查詢?

+1

如何移除舊版API,只需使用:'$事件= $ facebook-> API($ EID);'? – ifaour

+0

好的,我這樣做了,我怎麼能得到信息和事件的其他屬性?因爲我可以看到輸出量有限 – Syd

回答

0

經過一番研究,我發現這可能是用fql.multiquery做的,現在看起來工作正常。這是源代碼。

function importEventFQL($url) 
{ 
    $facebook = new Facebook(array(
      'appId' => 'someApddID', 
      'secret' => 'someSecret', 
      'cookie' => true, // enable optional cookie support 
     )); 

    if(checkLogin()==true) 
    { 

     list($url_static,$url_URI) = explode('/events',$url); 

     $url_URI = ltrim($url_URI,'/'); 
     list($eid, $trash) = explode('/?',$url_URI); 

     $fql = '{'; 

     $fql .= '"event_info":"SELECT name, description, pic_small, pic_big, eid, venue, location, start_time, end_time, host from event WHERE eid=\'' . $eid . '\'",'; 
     $fql .= '"event_venue":"SELECT name, username, page_id, location FROM page WHERE page_id IN (SELECT venue.id FROM #event_info)"'; 

     $fql .= '}'; 

     $param = array(
      'method' => 'fql.multiquery', 
      'queries' => $fql, 
      'callback' => '' 
     ); 

     $result = $facebook->api($param); 

     print_r($result); 
    } 
} 
0

如果你只想要FQL做到這一點:

{ 
    "events" : "SELECT privacy, name, description, start_time, venue.id, pic_cover FROM event WHERE eid IN (SELECT eid FROM event_member WHERE uid = me())", 
    "venues" : "SELECT latitude, longitude, name, page_id FROM place WHERE page_id IN (SELECT venue.id FROM #events)" 
}