我正在尝试弄清楚如何使用 curl 插入来自对 Youtube api 的调用的所有视频信息行。我不确定我做错了什么,但无论我尝试什么,我都只能插入一行。 这是我尝试使用随机播放列表的方法之一的简单示例。
$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");
谁能帮我弄清楚我做错了什么?谢谢。
更新:
原来我的 table 有问题,我想它可能已经损坏或什么的。我创建了一个新表,它解决了我的问题。
对于可能看到此内容并希望/尝试学习如何使用 Youtube api 并将数据插入您自己的数据库的任何人,上面第一个框中的代码目前可以正常工作。
只是改变:
$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')");
您还需要使用 key= 将您的 API key 添加到您的网址。
示例:
$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 key ,然后单击库并选择 Youtube 数据 API。
要了解如何构建 url 以便您可以查询所需的任何数据,那么这应该是一个很好的起点。 https://developers.google.com/youtube/v3/sample_requests
最佳答案
您还需要在 foreach 中循环 mysql 查询。如果你 implode 它的转换只是根据你传递给 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');
}
关于php - 从 Youtube api 向 Mysql 插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46293238/