2012-10-12 80 views
1

我試圖獲得$xml->entry->yt:statistics->attributes()->viewCount屬性,並且我嘗試了一些使用SimpleXML的東西,但我無法真正實現它的效果!使用SimpleXML獲取XML屬性

嘗試#1

<?php 
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google"); 
echo $xml->entry[0]->yt:statistics['viewCount']; 
?> 

嘗試#2

<?php 
$xml = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos?author=Google"); 
echo $xml->entry[0]->yt:statistics->attributes()->viewCount; 
?> 

這兩者返回空白,雖然SimpleXML的工作,我試圖讓Feed的標題,它的工作!

任何想法?

我看過其他例子在SO和其他網站的負載,但不知何故,這是行不通的? PHP是否認識到':'是一個截斷點,還是我只是在做一些愚蠢的事情?

謝謝你,任何反應非常感謝!

+0

*「不PHP承認‘:’是一個停產,還是我只是做一些愚蠢的事情?「*。不,是的。 :)'yt:statistics'是一個PHP語法錯誤。你不能在SimpleXML中使用它,你不能在其他地方使用它。 SimpleXML對XML名稱空間的支持最好不過了。您應該使用DOMDocument和DOMXPath。閱讀http://php.net/manual/en/domxpath.registernamespace.php開始。 – Tomalak

+0

@Tomalak與SimpleXML大部分類似,名稱空間支持完美地工作,但文檔記錄不完整,因此知之甚少。 – IMSoP

回答

1

如果您只想獲得YouTube視頻的觀看次數,則必須指定視頻ID。 youtube ID可在每個視頻網址中找到。例如「http://www.youtube.com/watch?v=ccI-MugndOU」,所以id是ccI-MugndOU。爲了讓觀看次數,然後嘗試以下

$sample_video_ID = "ccI-MugndOU"; 
$JSON = file_get_contents("http://gdata.youtube.com/feeds/api/videos?q={$sample_video_ID}&alt=json"); 
$JSON_Data = json_decode($JSON); 
$views = $JSON_Data->{'feed'}->{'entry'}[0]->{'yt$statistics'}->{'viewCount'}; 
    echo $views; 
+0

感謝您的回答:)它幫助我意識到,YouTube也具有JSON API,這更容易工作!再次感謝! – unicornication

1

我會用gdata component從Zend框架的代碼。也可以作爲一個單獨的模塊,所以你不需要使用整個zend。

+0

感謝您的迴應:-)我的主機不喜歡組件,它讓我們很難安裝:-(但無論如何,謝謝! – unicornication

+0

您不必在服務器上安裝任何東西,請檢查此鏈接。 http://ecommercedeveloper.com/articles/2407-add-video-with-youtube-api-and-php-client-library-part-one/ – Napolux

0

yt:前綴將該元素標記爲與文檔的其餘部分位於不同的「XML名稱空間」中。您必須告訴SimpleXML使用->children()方法切換到該名稱空間。

您試圖實際上應該是這樣的一行:

echo (string)$xml->entry[0]->children('yt', true)->statistics->attributes(NULL)->viewCount; 

要打破下來:

  • (string) - 這僅僅是一個良好的習慣:你需要的屬性的字符串內容,而不是代表它的SimpleXML對象
  • $xml->entry[0] - 與預期的一樣
  • ->children('yt', true) - 切換到namespa與本地別名「YT」
  • ->statistics CE - 預期
  • ->attributes(NULL) - 技術上,屬性「的觀看次數」是早在默認的命名空間,因爲它不帶前綴「YT」,所以我們必須切換回到才能看到它
  • ->viewCount - 運行->attributes()給了我們什麼,但屬性,這些屬性與->foo訪問不['foo']