Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ XML _ Wyciągnięcie z XML`a wskazanych wartości

Napisany przez: VanDavv 3.07.2014, 22:27:10

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.

Napisany przez: SmokAnalog 3.07.2014, 23:30:10

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.

Napisany przez: VanDavv 4.07.2014, 08:02:42

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 :

  1. <?php
  2. // function to parse a video <entry>
  3. function parseVideoEntry($entry) {
  4. $obj= new stdClass;
  5.  
  6. // get author name and feed URL
  7. $obj->author = $entry->author->name;
  8. $obj->authorURL = $entry->author->uri;
  9.  
  10. // get nodes in media: namespace for media information
  11. $media = $entry->children('http://search.yahoo.com/mrss/');
  12. $obj->title = $media->group->title;
  13. $obj->description = $media->group->description;
  14. $obj->author = $entry->author->name;
  15. $obj->authorURL = $entry->author->uri;
  16.  
  17. // get video player URL
  18. $attrs = $media->group->player->attributes();
  19. $obj->watchURL = $attrs['url'];
  20.  
  21. // get video thumbnail
  22. $attrs = $media->group->thumbnail[0]->attributes();
  23. $obj->thumbnailURL = $attrs['url'];
  24.  
  25. // get user thumbnail
  26. $attrs = $entry->yt->statistics->attributes();
  27. $obj->subscriberCount = $attrs['subscriberCount'];
  28.  
  29. // get <yt:stats> node for viewer statistics
  30. $yt = $entry->children('http://gdata.youtube.com/schemas/2007');
  31. $attrs = $yt->statistics->attributes();
  32. $obj->viewCount = $attrs['viewCount'];
  33.  
  34.  
  35. // return object to caller
  36. return $obj;
  37. }
  38.  
  39. // get video ID from $_GET
  40. if (!http://www.php.net/isset($_GET['id'])) {
  41. http://www.php.net/die ('ERROR: Missing video ID');
  42. } else {
  43. $vid = $_GET['id'];
  44. }
  45.  
  46. // set video data feed URL
  47. $feedURL = 'http://gdata.youtube.com/feeds/api/videos/' . $vid;
  48.  
  49. // read feed into SimpleXML object
  50. $entry = simplexml_load_file($feedURL);
  51. // parse video entry
  52. $video = parseVideoEntry($entry);
  53.  
  54. // display main video record
  55. http://www.php.net/echo "<table>\n";
  56. http://www.php.net/echo "<tr>\n";
  57. http://www.php.net/echo "<td><a href=\"{$video->watchURL}\">
  58. <img src=\"$video->thumbnailURL\"/></a></td>\n";
  59. http://www.php.net/echo "<td><a href=\"{$video->watchURL}\">{$video->title}</a>
  60. <br/>\n";
  61. http://www.php.net/echo "{$video->viewCount} odslon<br/>\n";
  62. http://www.php.net/echo "{$video->author} autor<br/>\n";
  63. http://www.php.net/echo "</td>\n";
  64. http://www.php.net/echo "</tr>\n";
  65. http://www.php.net/echo "</table>\n";
  66.  
  67. ?>

Napisany przez: Pyton_000 4.07.2014, 08:10:54

Aby wyświetlić atrybut musisz go zrzutować na (string)

Więc coś takiego:

  1. $obj->viewCount = $attrs['viewCount'];

na:
  1. $obj->viewCount = (string)$attrs['viewCount'];


i analogicznie pozostałe attr

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)