我正在实施Youtube推送通知并实施了webhook。 Youtube以原子提取的形式提供更新。我的问题是我无法解析该Feed。
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:yt="http://www.youtube.com/xml/schemas/2015">
<link rel="hub" href="https://pubsubhubbub.appspot.com" />
<link rel="self" href="https://www.youtube.com/xml/feeds/videos.xml?channel_id=UCaNoTnXcQQt3ody_cLZSihw" />
<title>YouTube video feed</title>
<updated>2018-03-01T07:21:59.144766801+00:00</updated>
<entry>
<id>yt:video:vNQyYJqFopE</id>
<yt:videoId>vNQyYJqFopE</yt:videoId>
<yt:channelId>UCaNoTnXcQQt3ody_cLZSihw</yt:channelId>
<title>Test Video 4</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=vNQyYJqFopE" />
<author>
<name>Testing</name>
<uri>https://www.youtube.com/channel/UCaNoTnXcQQt3ody_cLZSihw</uri>
</author>
<published>2018-03-01T07:21:48+00:00</published>
<updated>2018-03-01T07:21:59.144766801+00:00</updated>
</entry>
<?php
$xml = '<?xml versio......';
$obj = simplexml_load_string($xml);
echo '<pre>';print_r($obj);echo '</pre>';
如何获取yt:videoId元素的值。我是PHP的新手,如果我做错了,请纠正我。
答案 0 :(得分:1)
试试这个(更新)
$str = $obj->entry->id;
echo substr($str, strpos($str, "video:")+ 6);
获取频道
$chan = $obj->entry->author->uri;
echo substr($chan , strpos($chan , "channel/")+ 8);
答案 1 :(得分:1)
<yt:videoId>
似乎没有解析包含yt命名空间(例如simplexml_load_string
)的XML元素。我不知道为什么,但在您的情况下,视频ID也出现在<id>
元素中,您只需要提取最后一个值或简单地在其前面剪切yt:video:
。这至少是一个简单的解决方法。
如果您使用直接XPath到<yt:videoId>
元素,它也会有效:
echo $obj->xpath('//yt:videoId')[0];
// output: vNQyYJqFopE
XPath始终返回一个数组,因此您需要使用[0]
获取第一个元素。