Не могу использовать file_get_contents on https://api.facebook.com

#php #facebook #facebook-graph-api

#php #Facebook #facebook-graph-api

Вопрос:

Я пытаюсь получить некоторую информацию, используя https://api.facebook.com

Следующее работает просто отлично: (обратите внимание graph.facebook.com )

 $q = "https://graph.facebook.com/$params".$sep."access_token=$access_token";
$response = json_decode(file_get_contents($q),true);
  

Но

 $q = "https://api.facebook.com/$params".$sep."access_token=$access_token";
$response = json_decode(file_get_contents($q),true);
  

Просто не работает. Я пробовал curl, но я продолжаю получать метод, который не реализован

Следующий код:

 $ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$url = "https://api.facebook.com/$params".$sep."access_token=$access_token";
echo $url;
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_URL, $url);

echo curl_exec($ch);
echo curl_errno($ch);

curl_close ($ch);
  

Есть идеи?

Комментарии:

1. Для этого не требуется POST, не так ли?

2. Кроме того, что находится внутри $params и что внутри $sep ?

3. Я пробовал POST с той же ошибкой. $params и $ sep — это просто переменные, которые я использую в этом классе. Не обращайте на них внимания, $url правильный. Я получаю результат, который я ищу, когда иду непосредственно к этому URL. Я просто не могу получить результат в переменной.

4. Я бы взломал Wireshark и посмотрел на разницу между двумя запросами и попытался имитировать успешный из PHP.

5. Ваш php скомпилирован с поддержкой https?

Ответ №1:

Такая глупая ошибка. Я публикую рабочий пример:

Вызов:

 $status = $fb->api("method/fql.query?query=".urlencode("SELECT url FROM url_like WHERE user_id = $ID")."",$access_token);
  

Класс:

 class fb 
{
    public function api($params, $access_token) 
    {
        try 
        {
            $q = "https://api.facebook.com/$params?format=json-stringsamp;access_token=$access_token";
            $response = json_decode(file_get_contents($q),true);

            if ($response->error->message != null) 
                throw new Exception($response->error->message);
            else
                return $response;
        } 
        catch (Exception $e) 
        {
            return ("<b>Error:</b> " . $e->getMessage());
        }
    }
}
  

Для всех, кто не хочет использовать Facebook php sdk.

Комментарии:

1. Почему кто-то не будет использовать (или расширять) официальный SDK?

2. Это гораздо более легкий

3. Ну, от простого просмотра вашего кода… вы перенастраиваете массив $response (поскольку используете ,true ), но обращаетесь к нему как к объекту, что, я полагаю , не сработает! 😉

4. Это правильно, я просто передаю переменную $status после этого.