【问题标题】:multiple variables using foreach as?使用foreach作为多个变量?
【发布时间】:2015-05-08 01:30:34
【问题描述】:

我正在尝试使用 API v3 获取 YouTube 缩略图和视频 ID,并将它们回显到 HTML 中,但是我需要同时回显两个变量。目前我有以下内容:

<?php
$url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=12&playlistId=UUDWdi7vjr3ac_z_VMMeiL_Q&key=*************************';
$data = file_get_contents($url);
if ((preg_match_all("/\"videoId\":\s*\"(.+)\"/", $data, $video_get) ) && (preg_match_all("/\"title\":\s*\"(.+)\"/", $data, $title_get) ) ) {
    foreach (($video_get[1] as $videoid) && foreach ($title_get[1] as $title ) ){
        echo ("<div id=\"video-thumb\" class=\"col-sm-6\"><img id=\"video-thumb-320180\" src=\"https://i.ytimg.com/vi/'.$videoid.'/mqdefault.jpg\"><div class=\"video-hover\"><img class=\"play-hover\" src=\"images/play.png\"></div><h2 class=\"video-title\"><i><a href=\"https://youtube.com/watch?v='.$videoid.'\">'.$title.'</a></h2></i></div>");
        }
    }
else {
    echo ("Error fetching uploads!")
}
?>

但是,在尝试了这个之后,我似乎无法将 foreach 用作 && foreach as。这里有什么解决办法?

【问题讨论】:

  • 查看file_get_contents() 输出的样本会有所帮助。
  • 不可能。尝试使用嵌套循环
  • 实际上,该 API 返回 JSON。你不需要preg_match 任何东西。只需使用json_decode()
  • 如对其他答案的评论所述。我对 PHP 很陌生。 json 格式对我有何帮助?如何从中获取视频和标题元素?

标签: php youtube-data-api


【解决方案1】:

不知道你为什么要尝试preg_match() ...但该数据是json,只需json_decode()就可以了。

$url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=12&playlistId=UUDWdi7vjr3ac_z_VMMeiL_Q&key=AIzaSyBYG6nKkdddYT2NXg987kljPrKqsCVXcNQ';
/** data is in an array **/
$data = json_decode(file_get_contents($url), true);
foreach($data['items'] as $row) {
    echo ("
    <div id=\"video-thumb\" class=\"col-sm-6\">
        <img id=\"video-thumb-320180\" src=\"https://i.ytimg.com/vi/".$row['snippet']['resourceId']['videoId']."/mqdefault.jpg\">
        <div class=\"video-hover\">
            <img class=\"play-hover\" src=\"images/play.png\">
        </div>
        <h2 class=\"video-title\">
            <i><a href=\"https://youtube.com/watch?v=".$row['snippet']['resourceId']['videoId']."\">" . $row['snippet']['title']."</a></i>
        </h2>
    </div>");
}

响应(来自文档)

{
  "kind": "youtube#playlistItemListResponse",
  "etag": etag,
  "nextPageToken": string,
  "prevPageToken": string,
  "pageInfo": {
    "totalResults": integer,
    "resultsPerPage": integer
  },
  "items": [
    {
      "kind": "youtube#playlistItem",
      "etag": etag,
      "id": string,
      "snippet": {
        "publishedAt": datetime,
        "channelId": string,
        "title": string,
        "description": string,
        "thumbnails": {
          (key): {
            "url": string,
            "width": unsigned integer,
            "height": unsigned integer
          }
        },
        "channelTitle": string,
        "playlistId": string,
        "position": unsigned integer,
        "resourceId": {
          "kind": string,
          "videoId": string,
        }
      },
      "contentDetails": {
        "videoId": string,
        "startAt": string,
        "endAt": string,
        "note": string
      },
      "status": {
        "privacyStatus": string
      }
    }
  ]
}

【讨论】:

  • 对不起,我对 PHP 很陌生。 json 格式对我有何帮助?如何从中获取视频和标题元素?
  • json 代表 .. JavaScript 对象表示法。对于大多数 api,您将看到它或 xml,将其转换为可工作的代码非常容易。
  • JSON 基本上是一个扁平化(序列化)的对象或数组。这是大多数 API 返回请求数据的方式。
  • 我建议您阅读此页面以获取完整文档,developers.google.com/youtube/v3/code_samples
  • 这里是关于json_decode的相关文档php.net/manual/en/function.json-decode.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多