2012-03-12 10 views
2

私のアプリケーションの1つで、私はyoutubeビデオのIDを保存しています... "A4fR3sDprOE"のように..私はアプリケーションでそのタイトルを表示する必要があります。私はそのタイトルを取得するための次のコードを取得し、そのうまく動作します。PHPでyoutubeのビデオタイトルを取得

ここで問題は、エラーが発生した場合(ビデオを削除する場合)にエラーが発生した場合です。私は条件を追加する必要があります。しかし、それはまだエラーを示しています。エラーの場合に

foreach($videos as $video) { 

    $video_id = $video->videos; 
    if($content=file_get_contents("http://youtube.com/get_video_info?video_id=".$video_id)) { 
     parse_str($content, $ytarr); 

     $myvideos[$i]['video_title']=$ytarr['title']; 

    } 
    else 
     $myvideos[$i]['video_title']="No title"; 

    $i++; 


} 

return $myvideos; 

そのfolllowing

重症度と瀕死:警告

メッセージ:のfile_get_contents(http://youtube.com/get_video_info?video_id=A4fR3sDprOE)function.file- get-contents]:ストリームのオープンに失敗しました:HTTP要求に失敗しました! HTTP/1.0 402支払いが必要

ファイル名:モデル/ webs.php

行番号:128は

答えて

2

が、それはのfile_get_contents前に、@(php-manual)を使用するように動作しない助けてください?

何かのように:

if($content = @file_get_contents("http://youtube.com/get_video_info?video_id=".$video_id)) 

がエラーを削除し、でfalseを返すためにそれを使用する必要があり、あなたの文は、他の

あなただけ/しようとcatchステートメントを使用できるかどうか(php-manual

try{ 
    // code 
}catch (Exception $e){ 
    // else code 
} 
+0

...ありがとう.. – ramesh

1

あなたのホスティングプロバイダはセキュリティ上の目的でfile_get_contentsを無効にしていると思います。あなたはCURLを使うべきです。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://youtube.com/get_video_info?video_id=".$video_id); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$response = curl_exec($ch); 
curl_close($ch); 
/* PARSE YOUTUBE'S RESPONSE AS YOU LIKE BELOW */ 
?> 
1

試してみてください。

 

//use @ to supress warnings 
[email protected]_get_contents("http://youtube.com/get_video_info?video_id=".$video_id); 
if($content===FALSE) { 
    ..handle error here 
} 
else{ 
    ..rest of your code 
} 
 
11

それは、リモートのURLでfile_get_contents()を使用しても安全ではありません。 cURLを使用代わりにYouTubeのAPI 2.0で:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://gdata.youtube.com/feeds/api/videos/'.$video_id); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$response = curl_exec($ch); 
curl_close($ch); 

if ($response) { 
    $xml = new SimpleXMLElement($response); 
    $title = (string) $xml->title; 
} else { 
    // Error handling. 
} 
+1

素晴らしい解決策、それを共有していただきありがとうございます! – SeinopSys

1

私は特定のエラーがここで見ていることこれに追加したいと思います(HTTP 402 - お支払いは必須、それ以外のサーバは、一般的に実装されていないHTTPステータスコードです)は、あなたのIPアドレス(またはIPアドレスの範囲)から "過剰な"トラフィックが発生していると判断した場合にYouTubeが返すもので、OVHのIP範囲を頻繁にブロックすることを楽しんでいます([1][2])。

したがって、youtube.com(APIではない)にプログラムで(PHPなどを使用して)アクセスしている場合は、このエラーが発生する可能性があります。 YouTubeは、通常、「過剰トラフィック」IPからのリクエストにCAPTCHAを表示することから始めますが、PHPスクリプトではそうでない場合は、これらの役に立たない402応答に切り替わります(YouTubeはそれほど役に立ちません)電話をかけるためのカスタマーサポートデスクがあります.IPブロッキングのために自分のウェブサイトに実際にアクセスできない場合は、連絡を取る機会も少なくなります。

その他の参考文献:
http://productforums.google.com/forum/#!topic/youtube/tR4WkNBPnUo http://productforums.google.com/forum/?fromgroups=#!topic/youtube/179aboankVg

6

これは私のソリューションです。それは非常に短いです。

$id = "VIDEO ID"; 
$videoTitle = file_get_contents("http://gdata.youtube.com/feeds/api/videos/${id}?v=2&fields=title"); 

preg_match("/<title>(.+?)<\/title>/is", $videoTitle, $titleOfVideo); 
$videoTitle = $titleOfVideo[1]; 
0

私のソリューションは、次のとおりです。

$xmlInfoVideo = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos/".$videoId."?v=2&fields=title"); 

foreach($xmlInfoVideo->children() as $title) { $videoTitle = strtoupper((string) $title); } 

は、このビデオのタイトルを取得します。

関連する問題