php youtube json раскодировать - PullRequest
3 голосов
/ 20 марта 2011

Я пытался использовать JSON-декодирование, чтобы получить канал API YouTube. Однако, когда я вставляю результат JSON в http://www.jsonlint.com/, я заметил что-то вроде

"media$group": {
  "media$category": [

К сожалению, некоторые символы отклоняются php. Вот мой код, я пытался удалить этот символ $, но, возможно, не удалось. Как мне это решить?

$url = 'http://gdata.youtube.com/feeds/api/videosq=football&orderby=published&v=2&alt=json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
$body1 = curl_exec($ch);
$body = str_replace('$','', $body1);
curl_close($ch);
$data = json_decode($body);
foreach ($data->feed->entry as $result) { 
...
}

Ответы [ 2 ]

8 голосов
/ 20 марта 2011

Ваша проблема заключается в использовании идентификаторов PHP для доступа к содержимому. Самое простое решение - получить массив вместо объекта:

$data = json_decode ( $json , $assoc = true );

Это позволяет получить доступ к полям с:

echo $result['media$group']['media$description'];

Если вы хотите сохранить синтаксис объекта, это возможно с этим ключем:

echo $result->{'media$group'}->{'media$category'};

(Но массивы здесь более безопасны. Вы не получите фатальную ошибку, если изменение формата и свойства отсутствуют.)

0 голосов
/ 20 марта 2011

Работа:

<?php
$url = 'http://gdata.youtube.com/feeds/api/videos?q=football&orderby=published&v=2&alt=json';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
$body1 = curl_exec($ch);
$body = str_replace('$','', $body1);
curl_close($ch);
$data = json_decode($body);

foreach ($data->feed->entry as $result) { 
    var_dump($result);
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...