2012-04-09 77 views
0

好吧,所以我想实现的是使用youtube api来获取一些Feed。这些提要是json-c编码的。所以我尝试使用file_get_contents方法将json feedurl转换为字符串并将json解码。这里是代码片段:youtube api json feed php error

$feedURL = "https://gdata.youtube.com/feeds/api/videos?q=surfing&v=2&alt=jsonc"; 
$json = file_get_contents($feedURL,0,null,null); 
$result = json_decode($json, true); 
echo $result; 
$id = $result->{'data'}->{'items'}[0]->{'id'}; 
echo "The video id is: ".$id; 

,但我得到这个愚蠢的错误警告:的file_get_contents(https://gdata.youtube.com/feeds/api/videos?q=surfing & V = 2 & ALT = jsonc )[function.file-get-contents]:未能打开流:连接在第13行的/opt/lampp/htdocs/date.php中被拒绝 注意:尝试在/ opt/lampp/htdocs中获取非对象的属性/date.php第16行 注意:试图在第16行中获取/opt/lampp/htdocs/date.php中非对象的属性012,注意:尝试在/ opt/lampp/htdocs中获取非对象的属性/date.php在线16

该文件的名称是date.php,我在代理服务器后面的linux机器上的本地主机上运行它。

我认为连接拒绝的事情表明可能存在IP冲突或什么。我不知道。有人可以帮我解决这个问题吗?

+0

检查与另一个URL,并验证代理你关上了门。 – Lobo 2012-04-09 10:56:38

+0

我已经试过了。它给与任何其他网址相同的错误howeveer本地主机上的文件可以在没有任何问题使用此方法访问 – 2012-04-09 11:08:59

+1

检查此问题http://stackoverflow.com/questions/1336262/file-get-contents-behind-a-proxy – Lobo 2012-04-09 11:15:01

回答

0

您可以使用curl

$feedURL = "https://gdata.youtube.com/feeds/api/videos?q=surfing&v=2&alt=jsonc"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $feedURL); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
//curl_setopt($ch,CURLOPT_PROXY,"x.x.x.x:8888"); // Proxy Use 
$json = curl_exec($ch); 

$result = json_decode($json, true); 
foreach($result['data']['items'] as $items) 
{ 
    var_dump($items['id']); 
} 
+0

我很抱歉,但我试过卷曲。它没有发出任何错误,但它什么也没有显示。无论如何,我想出了问题,这确实是一个代理问题。感谢所有帮助的人。我真的很感激它 – 2012-04-09 11:32:05

+0

只需在这里添加代理'IP'和'port' curl_setopt($ ch,CURLOPT_PROXY,“x.x.x.x:8888”);' – Baba 2012-04-09 11:35:40

+0

明白了!感谢您的帮助 – 2012-04-09 11:37:50

0

尝试:


$url = 'http://www'; 

$proxy = 'tcp://xxx:8080'; 

$context = array(
    'http' => array(
     'proxy' => $proxy, 
     'request_fulluri' => True, 
     ), 
    ); 

$context = stream_context_create($context); 

$body = file_get_contents($url, False, $context); 

foreach($result["data"]["items"] as $val) { 
    echo $val["id"]."<br/>"; 
} 
+0

美元代理是什么? – 2012-04-09 11:12:36

+0

我的不好!所以我们需要在$ proxy中指定代理IP地址和端口。 – 2012-04-09 11:15:09

+0

是的,或者你也可以使用卷曲,无论你喜欢哪种方式 – 2012-04-09 11:21:16