2017-09-19 19 views
1

私はcurlを使ってYoutube APIへの呼び出しからビデオ情報のすべての行を挿入する方法を理解しようとしています。私は何が間違っているのか分からないが、何を試しても1行しか挿入できない。 ランダム再生リストで試した方法の簡単な例を次に示します。Youtube APIからMysqlにデータを挿入

$con=mysqli_connect("localhost","...","...","..."); 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2C+id%2C+status&playlistId=PLU12uITxBEPHfZZRTIk96NduwU_8hT-Yo&maxResults=10&key={API KEY}"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0' 
)); 

curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8'); 
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); 

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

$result = json_decode($json_response, true); 

foreach ($result['items'] as $page_info) { 

$video_id = $page_info['snippet']['resourceId']['videoId']; 
$title = $page_info['snippet']['title']; 

mysqli_query($con, "INSERT INTO links (video_id, title) VALUES ('$video_id', '$title')"); 

} 

また、すべての配列を作成しようとしましたが、SQLにダンプしようとしました。私はまだ同じ1行の結果を得ると思ったが、とにかく試した。

$values = array(); 
foreach ($result['items'] as $page_info) { 

$video_id = $page_info['snippet']['resourceId']['videoId']; 
$title = $page_info['snippet']['title']; 

$values[] = "('$video_id', '$title')"; 
} 
$query_values = implode(',', $values); 
mysqli_query($con, "INSERT INTO links (video_id, title) VALUES $query_values"); 

誰でも私が間違っていることを理解するのに役立つことができますか?ありがとう。

UPDATE:
私はそれが壊れているか何かされているかもしれないと思う、私は私のテーブルに問題があったが判明。私は新しいテーブルを作成し、私の問題を解決しました。

Youtube APIを使用して独自のデータベースにデータを挿入する方法を学びたいと思っている人なら、最初のボックスの上のコードは今のところうまく動作します。

だけの変更:自分のDBの設定に

$con=mysqli_connect("localhost","...","...","..."); 

。例:

$con=mysqli_connect("localhost","Username","Password","Database"); 

$ video_id、$ titleなどの挿入する値を追加し、新しい値を使用するようにクエリを更新します。
例:

$video_id = $page_info['snippet']['resourceId']['videoId']; 
$title = $page_info['snippet']['title']; 
$description = $page_info['snippet']['description']; 
mysqli_query($con, "INSERT INTO links (video_id, title, description) VALUES ('$video_id', '$title', '$description')"); 

また、キー=を使用してURLへのあなたのAPIキーを追加する必要があります。
例:

$url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2C+id%2C+status&playlistId=PLU12uITxBEPHfZZRTIk96NduwU_8hT-Yo&maxResults=10&key=123456789123456789"; 

あなたがここにhttps://console.developers.google.com/をサインアップすることにより、あなたの自由なAPIキーを取得し、ライブラリをクリックして、YouTubeのデータAPIを選択することができます。

URLを作成して希望のデータをクエリできるようにするには、これを開始するのがよいでしょう。 https://developers.google.com/youtube/v3/sample_requests

+0

var_dump($ result ['items'])の出力を投稿できますか? – cvipul

+0

ここにprint_rがあります。私はまたそれを下に掲示した。 https://pastebin.com/88qZZ8t2 – rich

答えて

0

また、foreachでmysqlクエリをループする必要があります。あなたがimplodeに渡した最初のパラメータに基づいて、変換されたものを配列から文字列に変換するだけです。代わりにこれを行います。

$values = array(); 
    foreach ($result['items'] as $page_info) { 

    $video_id = $page_info['snippet']['resourceId']['videoId']; 
    $title = $page_info['snippet']['title']; 
    mysqli_query($con, "INSERT INTO links (video_id, title) VALUES ('$video_id', '$title'); 
} 
+0

最初の例では、ループ内にSQLクエリを含めますが、最初の行のみを挿入します。私はvardumpですべての結果を見ることができますが、私は最初の行を挿入するだけですが、なぜ私は混乱しています。 – rich

+0

できません。 mysqli_queryを再度確認してください。 foreachはあなたの$ result ['items']を繰り返します。 1つしか挿入されていない場合、1つのレコードしか存在しない可能性があります。 – RamaKrishna

+0

ここにprint_r($ result ['items'])があります。私の最初のサンプルコードで助けてください。私は挿入する最初の行だけを取得し、エラーは発生しません。 https://pastebin.com/88qZZ8t2 – rich

関連する問題