2011-05-13 6 views
3

나는 facebook php sdk를 사용하여 모든 생일 및 기타 정보를 facebook 친구들로부터 얻으려는 응용 프로그램을 만들려고합니다.facebook api가 매우 느리다

친구 목록을 얻고 foreach 루프를 사용하면 모든 친구의 ID에 대한 모든 정보를 얻을 수 있습니다.

이 모든 것이 작동하며, 모든 정보를 얻는 데 4 분이 걸립니다. (모든 친구에게 새로운 전화를해야 함)

내 애플리케이션 사용자가 그만큼 오래 기다릴 수는 없을 것입니다.

더 빨리 정보를 얻을 수있는 방법이 있습니까?

이것은 내 코드입니다.


    //$arrFriends is a list with all id's and names of friends 

foreach ($arrFriends as $f => $value) 
      { 
       echo('
'); 
       $fql = "select uid, email, name, hometown_location, sex, birthday, education, relationship_status, pic_square from user where uid=" . $value[id]; 
       $param = array('method' => 'fql.query','query' => $fql,'callback' => ''); 
       $friend = $facebook->api($param); 
       //dan opslaan in de database: 
       print_r($friend); 
       echo('
'); }

답변

5

당신은

SELECT uid, name, pic_square FROM user WHERE uid = me() 
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 

참조를 사용할 수 있습니다. 공연이 당신과 함께하기를 바랍니다. 친구의 수백이있는 경우


또 다른 해결책은

(당신을 위해 생각을) 잘 그것은 아주 정상적인 예상이다. 당신은 루프에서 시간의 hundres에 대한 페이스 북의 API를 요청하고 있습니다.

많은 확장 가능한 페이스 북 애플리케이션은 백그라운드에서 (작업 대기열에서) 비동기 적으로 작업을 수행하거나 CPU 버스트를 늦추거나 소비하지 않도록 완전히 다른 시스템에서 수행합니다.

FQL 쿼리에 OR conjuctives를 사용해보세요.

$fql = "select [...] from user where uid=123213312 OR uid=129038823 OR uid=893423890 

그러나이 경우 사용자의 FQL 쿼리는 더 커질 수 있으므로 커브를 나누어야합니다. 따라서 첫 번째 솔루션을 사용하십시오.

+0

어귀, 하위 쿼리. FQL이 조인을 지원합니까? – Phil

+0

지옥 예. <3 페이스 북 엔지니어링 팀. –

+0

백그라운드에서이를 수행하는 데 문제가있는 것은 api 토큰입니다. 사용자가 더 이상 로그인하지 않으면 추가 사용 권한을 요청하는 정보를 얻을 수 없습니다. 너의 대답은 Thx! – samuhe

1

각 fql 쿼리에는 페이스 북에 대한 HTTP 요청이 포함되어있어 느릴 수 있습니다.

쿼리를 실행하여 단일 응답으로 모든 결과를 생성 한 다음 해당 응답을 루프로 처리하면 이 훨씬 많아서의 성능이 향상 될 수 있습니다. https://developers.facebook.com/docs/reference/fql/

같은 결과 빠르고, 신속하고 우아한 해결책 :

1

FQL을 사용하지 않으려는 경우 정확히 이 이러한 목적으로 설계되었습니다. 그래프 요청의 배열을 만들어 함께 전송합니다. 문서에 따르면 그들은 병렬로 처리됩니다.

관련 문제