#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
после этого.