How to handle the big int facebook uid returned by FQL?

前端 未结 3 979
执念已碎
执念已碎 2020-12-29 00:54

I\'ve a problem in handling the big userid\'s of facebook and properly storing them into my database..

As the fql.query REST api is going to be deprecated ,I\'m usin

3条回答
  •  离开以前
    2020-12-29 01:25

    I tried most methods and after Google some more forums and facebook code list if found the following worked like a charm for me.

    After i get the results from a FQL query i used the following line of code,

    $friends = json_decode(preg_replace('/"uid":(\d+)/', '"uid":"$1"', $result),true); 
    // consider $result as the result rendered by the FQL query.
    

    When i use the file_get_contents for a FB call you could have seen the error with error codes, so the best way to go with that is using CURL for all the FB API calls whenever necessary.

    Please find the complete code i've used to get proper results,

    $access_token = $facebook->getAccessToken();
    $request_url ="https://graph.facebook.com/fql
                   ?q=SELECT+uid,+name,+sex+FROM+user+where+uid+in+
                   (SELECT+uid2+FROM+friend+WHERE+uid1+=$fbuid)".
                   "&access_token=".$access_token;
    
    $opts = array(
                CURLOPT_CONNECTTIMEOUT => 10,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_TIMEOUT        => 60,
                CURLOPT_USERAGENT      => 'facebook-php-3.1',
                CURLOPT_CAINFO         => /lib/fb_ca_chain_bundle.crt',
               //replace the above path with proper path of the crt file 
               //in order to avoid the exceptions rendered by FB 
               //when we try to use CURL without proper certification file.
        );
    
    $opts[CURLOPT_URL] = $request_url;
    
    if (isset($opts[CURLOPT_HTTPHEADER])) {
            $existing_headers = $opts[CURLOPT_HTTPHEADER];
            $existing_headers[] = 'Expect:';
            $opts[CURLOPT_HTTPHEADER] = $existing_headers;
    } else {
            $opts[CURLOPT_HTTPHEADER] = array('Expect:');
    }
    
    $ch = curl_init();
    curl_setopt_array($ch, $opts);
    $result = curl_exec($ch);
    
    if ($result === false) {
          $e = new FacebookApiException(array(
            'error_code' => curl_errno($ch),
            'error' => array(
            'message' => curl_error($ch),
            'type' => 'CurlException',
            ),
          ));
          curl_close($ch);
          throw $e;
    }
    
    curl_close($ch);
    $friends = json_decode(preg_replace('/"uid":(\d+)/','"uid":"$1"',$result));
    

    I just to post this answers so it may help others until Facebook resolve this inconsistency.

提交回复
热议问题