Witam.
Mam problem - jak w php odwołać się do podanej wartości w xml`u? Chodzi dokładnie o wyciągnięcie subscriberCount oraz media:thumbnail url z linku http://gdata.youtube.com/feeds/api/users/BeerCoasterTV .
Znalazłem w sieci takie odwołanie :
$vid = $_GET['id'];
$feedURL = 'http://gdata.youtube.com/feeds/api/videos/' . $vid;
$entry = simplexml_load_file($feedURL);
Dalej jest metoda :
$media = $entry->children('http://search.yahoo.com/mrss/');
Której nie do końca rozumiem, może w tym jest problem. Lecz nie za bardzo wiem co oznacza ,,Finds children of given node" i co powinienem wstawić, aby móc odczytać te wartości? dla przykładu, miniaturkę filmiku czyta się tak :
$attrs = $media->group->thumbnail[0]->attributes();
$obj->thumbnailURL = $attrs['url'];
Ale nie wiem jak to przełożyć na url avatara i liczbę subskrybentów.
A co powiesz na to, żeby opierać się na wyniku w formacie JSON zamiast XML? Czyli http://gdata.youtube.com/feeds/api/users/BeerCoasterTV?alt=json
Zwrócony tekst dekodujesz funkcją json_decode i o wiele przyjemniej się na tym pracuje.
a czy mógłbyś pokazać przykład kodu? Jestem zielony jeśli chodzi o php, a te przykłady znalazłem w sieci i dostosowałem do siebie. Skrypt powinien robić 5 rzeczy : wyświetlić miniaturkę filmiku, ilość wyświetleń, autora, awatar kanału i ilość subów. Pierwsze 3 już zrobiłem i kod wygląda tak :
<?php // function to parse a video <entry> function parseVideoEntry($entry) { $obj= new stdClass; // get author name and feed URL $obj->author = $entry->author->name; $obj->authorURL = $entry->author->uri; // get nodes in media: namespace for media information $media = $entry->children('http://search.yahoo.com/mrss/'); $obj->title = $media->group->title; $obj->description = $media->group->description; $obj->author = $entry->author->name; $obj->authorURL = $entry->author->uri; // get video player URL $attrs = $media->group->player->attributes(); $obj->watchURL = $attrs['url']; // get video thumbnail $attrs = $media->group->thumbnail[0]->attributes(); $obj->thumbnailURL = $attrs['url']; // get user thumbnail $attrs = $entry->yt->statistics->attributes(); $obj->subscriberCount = $attrs['subscriberCount']; // get <yt:stats> node for viewer statistics $yt = $entry->children('http://gdata.youtube.com/schemas/2007'); $attrs = $yt->statistics->attributes(); $obj->viewCount = $attrs['viewCount']; // return object to caller return $obj; } // get video ID from $_GET if (!http://www.php.net/isset($_GET['id'])) { http://www.php.net/die ('ERROR: Missing video ID'); } else { $vid = $_GET['id']; } // set video data feed URL $feedURL = 'http://gdata.youtube.com/feeds/api/videos/' . $vid; // read feed into SimpleXML object $entry = simplexml_load_file($feedURL); // parse video entry $video = parseVideoEntry($entry); // display main video record http://www.php.net/echo "<table>\n"; http://www.php.net/echo "<tr>\n"; http://www.php.net/echo "<td><a href=\"{$video->watchURL}\"> <img src=\"$video->thumbnailURL\"/></a></td>\n"; http://www.php.net/echo "<td><a href=\"{$video->watchURL}\">{$video->title}</a> <br/>\n"; http://www.php.net/echo "{$video->viewCount} odslon<br/>\n"; http://www.php.net/echo "{$video->author} autor<br/>\n"; http://www.php.net/echo "</td>\n"; http://www.php.net/echo "</tr>\n"; http://www.php.net/echo "</table>\n"; ?>
Aby wyświetlić atrybut musisz go zrzutować na (string)
Więc coś takiego:
$obj->viewCount = $attrs['viewCount'];
$obj->viewCount = (string)$attrs['viewCount'];
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)