Использование file_get_contents для разных URL в цикле, кажется, нарушает остальную часть кода - PullRequest
1 голос
/ 26 марта 2011

В настоящее время я пытаюсь получить некоторые данные Facebook, к которым я затем хочу получить доступ в Javascript. В частности, я пытаюсь получить доступ к некоторым характеристикам друзей пользователя. Итак, я получаю список друзей пользователя, используя file_get_contents, в URL-адрес API его графа. Это дает мне массив идентификаторов друзей.

Поскольку мне нужна характеристика от каждого друга, я делаю:

foreach($dataarray as $friend) {
$friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
$fdata = json_decode(file_get_contents($friendurl));
if($fdata->gender == "male") {
 array_push($fulldata, $fdata->name);
    }
}

Кажется, что наличие этого фрагмента кода нарушает код JavaScript, поскольку ни одна из моих инструкций по предупреждению не выполняется.

Кроме того, вставка разрыва после if для выполнения только одного file_get_contents делает код работоспособным (но мне, очевидно, нужно пройти через всех друзей).

Как я могу решить эту проблему?

Я бы использовал jQuery или xmlHttpRequest для выполнения HTTP GET, но почему-то мне всегда кажется, что я возвращаю код состояния 0 с пустым ответом.

Edit: Вот код JS:

<script type="text/javascript">
        function initialize() {

                alert('Test1');
                <?php

                $fulldata = array();

                $data = $result->data;

                foreach($data as $friend) {
                    $friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
                    //echo("alert(\"".$friendurl."\");");
                    $fdata = json_decode(file_get_contents($friendurl));
                    if($fdata->hometown->name) {
                        array_push($fulldata, $fdata->hometown->name);
                    }
                }
                echo ("alert(\"".count($fulldata)."\")");
                ?>

                }
         </script>

Я должен был также добавить, что это делается на странице, встроенной в Facebook с помощью функции canvas.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Try ...

function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    return curl_exec($ch);
    curl_close ($ch);
}

foreach($dataarray as $friend){
    $friendurl = "https://graph.facebook.com/".$friend->id."?access_token=".$token."";
    $fdata = json_decode(curl($friendurl));
    if($fdata->gender == "male"){
            array_push($fulldata, $fdata->name);
        }
}

Возможно, FGC отключен, но вы не получаете никаких уведомлений / предупреждений.

Код из комментария:

error_reporting(E_ALL); ini_set("display_errors", 1);
0 голосов
/ 26 марта 2011

Обратите внимание, что вы делаете междоменный вызов AJAX, который запрещен по соображениям безопасности.Вы можете выполнить вызов API на сервере и отобразить данные в JS на стороне клиента или создать прокси-сервер php, возвращающий результат вызова API Graph (поскольку прокси находится на вашем собственном сервере, они находятся в одном домене.).

...