Разбор результатов JSON Freebase в PHP - PullRequest
1 голос
/ 15 июня 2011

Мне очень жаль, если это слишком просто, но я действительно не знаю, как это сделать.

Я использую этот плагин jquery Autocomplete: http://devthought.com/wp-content/projects/jquery/textboxlist/Demo/

РЕДАКТИРОВАТЬ: Это код jquery, который я использую для автозаполнения:

$(function() {
        var t = new $.TextboxList('#form_topick_tags', {unique: true, plugins: {autocomplete: {
                minLength: 2,
                queryRemote: true,
                remote: {url: 'autocomplete2.php'}
            }}});

Плагин использует PHP для автозаполнения, это пример, он возвращает такой вывод: "id, text, null (html мне не нужен), немного html"

$response = array();
            $names = array('Abraham Lincoln', 'Adolf Hitler', 'Agent Smith', 'Agnus', 'Etc');

            // make sure they're sorted alphabetically, for binary search tests
            sort($names);

            $search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';

            foreach ($names as $i => $name)
            {
                if (!preg_match("/^$search/i", $name)) continue;
                $filename = str_replace(' ', '', strtolower($name));
                $response[] = array($i, $name, null, '<img src="images/'. $filename . (file_exists('images/' . $filename . '.jpg') ? '.jpg' : '.png') .'" /> ' . $name);
            }

            header('Content-type: application/json');
            echo json_encode($response);

Мне нужен похожий PHP для обработки этих результатов: http://www.freebase.com/private/suggest?prefix=beatles&type_strict=any&category=object&all_types=false&start=0&limit=10&callback=

... будучи "битлз" значением $ search и получая этот вывод:

guid,"name",null,"name<span>n:type name</span>"

Итак, первый результат будет:

0,"The Beatles",null,"The Beatles<span>Band</span>"

Конечно, мне нужно запросить freebase.com с этого PHP. Я имею в виду:

        +---------------+         +-----------+        +------------+
        |               |         |           |        |            |
        |  TextboxList  +-------->|   PHP     +------->|  Freebase  |
        |               |         |           |        |            |
        +---------------+         +-----------+        +------+-----+
                                                              |
             JSON                     JSON                    |
          TextboxList   <--------+  freebase       <----------+

Возможно ли это? Спасибо!

1 Ответ

2 голосов
/ 15 июня 2011

Попробуйте:

$response = array();

$search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';

$myJSON = file_get_contents('http://www.freebase.com/private/suggest?prefix=' . urlencode($search));

$musicObj = json_decode($myJSON); // Need to get $myJSON from somewhere like file_get_contents()

foreach ($musicObj->result as $item)
{
    $response[] = array($item->guid, $item->name, null, $item->name . '<span>'.$item->{'n:type'}->name.'</span>');
}

header('Content-type: application/json');
echo json_encode($response);

Первый результат с JSON-экранированием даст:

["#9202a8c04000641f800000000003ac10","The Beatles",null,"The Beatles<span>Band<\/span>"]

Но, несмотря на все это, вам действительно не нужно вообще использовать PHP длясделай это.Вы можете сделать все это из JavaScript и избежать дополнительной поездки на ваш сервер.Если вы предоставите аргумент callback для freebase, он может создать JSONP (который JSON заключает в вызов функции, используя имя функции по вашему выбору), которую вы можете получить в jQuery, а затем манипулировать далее в JavaScript по своему вкусу,Но вышеизложенное относится к вашему первоначальному подходу в использовании PHP.

...