Witam.
Otwórz XMLa w dowolnym edytorze XML albo z braku laku w IE. Zobaczysz ustrukturyzowaną wersję dokumentu, mniej więcej taką:
<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:gd="http://schemas.google.com/g/2005" xmlns:media="http://search.yahoo.com/mrss/" xmlns="http://www.w3.org/2005/Atom">
<id>http://gdata.youtube.com/feeds/api/users/K7s6Tel7XVRVBryn8GM3Rg</id>
<published>2012-06-25T14:35:52.000Z</published>
<updated>2014-05-23T13:35:37.000Z</updated>
<category term="http://gdata.youtube.com/schemas/2007#userProfile" scheme="http://schemas.google.com/g/2005#kind"/>
<title type="text">BeerCoasterTV</title>
<content type="text"/>
<link type="text/html" href="http://www.youtube.com/channel/UCK7s6Tel7XVRVBryn8GM3Rg" rel="alternate"/>
<link type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/users/K7s6Tel7XVRVBryn8GM3Rg" rel="self"/>
<author>
<name>BeerCoasterTV</name>
<uri>http://gdata.youtube.com/feeds/api/users/BeerCoasterTV</uri>
</author>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/subscriptions" rel="http://gdata.youtube.com/schemas/2007#user.subscriptions" countHint="0"/>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/contacts" rel="http://gdata.youtube.com/schemas/2007#user.contacts" countHint="0"/>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/inbox" rel="http://gdata.youtube.com/schemas/2007#user.inbox"/>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/playlists" rel="http://gdata.youtube.com/schemas/2007#user.playlists"/>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/uploads" rel="http://gdata.youtube.com/schemas/2007#user.uploads" countHint="9"/>
<gd:feedLink href="http://gdata.youtube.com/feeds/api/users/beercoastertv/newsubscriptionvideos" rel="http://gdata.youtube.com/schemas/2007#user.newsubscriptionvideos"/>
<yt:location>PL</yt:location>
<yt:statistics totalUploadViews="4772" viewCount="0" videoWatchCount="0" subscriberCount="42" lastWebAccess="1970-01-01T00:00:00.000Z"/>
<media:thumbnail url="http://i1.ytimg.com/i/K7s6Tel7XVRVBryn8GM3Rg/1.jpg?v=53654ef2"/>
<yt:username>beercoastertv</yt:username>
</entry>
Węzeł entry ma wiele dzieci: id, published, updated, itd. Jedno z dzieci entry - author - ma swoje dzieci: name, uri. To ma na myśli dokumentacja pisząc o “children (dzieci) of a given node (węzła)”.
Dokument tak po prawdzie zawiera kilka struktur w różnych przestrzeniach nazw:
xmlns:yt="http://gdata.youtube.com/schemas/2007"
xmlns:gd="http://schemas.google.com/g/2005"
xmlns:media="http://search.yahoo.com/mrss/"
xmlns="http://www.w3.org/2005/Atom"
Jeśli z dokumentu odczytasz dzieci z przestrzeni ‘tutaj_jeden_z_urli’, to uzyskasz widok na jedną z przestrzeni (w przypadku Twojego przykładu - media). Ten parametr jest opcjonalny, dodam. Twój subscriberCount jest w przestrzeni yt. Ja tutaj URLa awatara nie widzę - pewnie musisz pobrać inny dokument mając id albo yt:username. Powodzenia!
Dziękuję ! To bardzo ułatwiło sprawę. Napisałem coś takiego :
$authorFeed = simplexml_load_file("http://gdata.youtube.com/feeds/api/users/BeerCoasterTV");
$authorData = $authorFeed->children('http://gdata.youtube.com/schemas/2007');
$attrs = $authorData->statistics->attributes();
$obj->subcriberCount = $attrs['subsriberCount'];
i wyskakuje błąd
Fatal error: Call to a member function attributes() on a non-object in D:\Programy\Xampp\htdocs\Test\test.php on line 43
Lecz wcześniejszy zapis dotyczący video a nie autora nie wykazuje błędu (kod ściągnięty z internetu) :
$yt = $entry->children('http://gdata.youtube.com/schemas/2007');
$attrs = $yt->statistics->attributes();
$obj->viewCount = $attrs['viewCount'];
gdzie $entry to w przełożeniu to samo co $authorFeed.
Jaka jest różnica między tymi dwoma zapisami?
URL do XML`a video - http://gdata.youtube.com/feeds/api/videos/M-_CIlI2m94
Kombinowanie nie boli. Bez czytania dokumentacji można rozwiązać to w kilka minut eksperymentując. Chyba, bo u mnie (PHP 5.5.11) działa np. to:
<?php
$authorFeed = simplexml_load_file("http://gdata.youtube.com/feeds/api/users/BeerCoasterTV");
$authorData = $authorFeed->children('http://gdata.youtube.com/schemas/2007');
$st = $authorData->statistics->attributes();
$subs = $st->subscriberCount;
echo $subs;