【问题标题】:Inserting data to Mysql from Youtube api从 Youtube api 向 Mysql 插入数据
【发布时间】:2018-02-27 19:32:02
【问题描述】:

我试图弄清楚如何使用 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");

谁能帮我弄清楚我做错了什么?谢谢。

更新:
原来我的桌子有问题,我认为它可能已损坏或其他原因。我创建了一个新表,它解决了我的问题。

对于任何可能看到这一点并且想要/尝试学习如何使用 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 密钥添加到您的网址中。
示例:

$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 Data API。

要了解如何构建 url 以便您可以查询所需的任何数据,那么这应该是一个很好的起点。 https://developers.google.com/youtube/v3/sample_requests

【问题讨论】:

  • 你能发布 var_dump($result['items']) 的输出吗?
  • 这里是 print_r。我也在下面发了。 pastebin.com/88qZZ8t2

标签: php mysql api youtube


【解决方案1】:

您还需要在 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');
}

【讨论】:

  • 在第一个示例中,我确实在循环中包含了 sql 查询,但它只插入第一行。我可以在 vardump 中看到所有结果,但我只插入了第一行,这就是我感到困惑的原因。
  • 不可能。请再次检查您的 mysqli_query。由于 foreach 迭代你的 $result['items'].如果它只插入一条,那么可能只有一条记录。
  • 这里是 print_r($result['items']);如果有帮助,请使用我的第一个示例代码。我只插入第一行并且没有错误。 pastebin.com/88qZZ8t2
  • 请分享 json 格式的编码 json_encode($result['times']);
  • 我搞定了。我创建了一个新的示例表,它可以工作。我不明白另一张表有什么问题,因为我没有唯一字段或任何东西,它与新表相同。无论如何,感谢您尝试帮助我。
猜你喜欢
  • 1970-01-01
  • 2014-02-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多