【问题标题】:YouTube API to fetch all videos on a channelYouTube API 用于获取频道上的所有视频
【发布时间】:2013-09-28 00:14:13
【问题描述】:

我们需要 YouTube 频道名称的视频列表(使用 API)。

我们可以使用以下 API 获取频道列表(仅频道名称):

https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar

以下是频道的直接链接

https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g

或者

WWW.YouTube.com/channel/HC-8jgBP-4rlI

现在,我们需要频道 >> UCqAEtEr0A0Eo2IVcuWBfB9g 或 HC-8jgBP-4rlI 的视频。

我们尝试过

https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&User=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&q=UC7Xayrf2k0NZiz3S04WuDNQ

但是,它没有帮助。

我们需要频道上发布的所有视频。上传到频道的视频可能来自多个用户,因此我认为提供用户参数不会有帮助...

【问题讨论】:

  • 我可以访问我自己的视频文件吗?通过 API 登录时基本上下载我自己的内容!!!

标签: youtube youtube-api


【解决方案1】:

首先,您需要获取代表用户/频道上传的播放列表的 ID:

https://developers.google.com/youtube/v3/docs/channels/list#try-it

您可以使用forUsername={username} 参数指定用户名,或者指定mine=true 来获取您自己的用户名(您需要先进行身份验证)。包括 part=contentDetails 以查看播放列表。

GET https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=jambrose42&key={YOUR_API_KEY}

在结果中"relatedPlaylists" 将包括"likes""uploads" 播放列表。获取 "upload" 播放列表 ID。另请注意,"id" 是您的频道 ID,以供将来参考。

接下来,获取该播放列表中的视频列表:

https://developers.google.com/youtube/v3/docs/playlistItems/list#try-it

只需放入 playlistId!

GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId=UUpRmvjdu3ixew5ahydZ67uA&key={YOUR_API_KEY}

【讨论】:

  • 在这个全新的世界中,并不是每个人都有 youtube 用户名。其中一些只有 google+ 用户 ID 号,不能代替 youtube 用户名
  • @kristopolous 每个 YouTube 频道都有一个频道 ID。如果您通过 Google plus 访问 YouTube 页面,它会使用 Google plus 用户 ID 作为频道链接。如果您从 YouTube 视频转到该频道,它会改用 YouTube 的频道 ID 属性。
  • 这是完美的。特别是因为它只花费 2 个配额点而不是 100 个(search 调用会花费)。
  • 请注意,播放列表项 api 也将包括未列出和已删除的视频,但您可以使用搜索 api 仅按频道 ID 列出公共视频
  • somteimes it(developers.google.com/youtube/v3/docs/playlistItems/list#try-it) 工作,有时它会为相同的uploadId 抛出404,不知道发生了什么。
【解决方案2】:

在提出原始问题很久之后发布,但我制作了一个 python 包,它使用一个非常简单的 API 来完成此操作。它将所有视频上传到一个频道,但我不确定这部分(包含在原始问题中):

上传到频道的视频可能来自多个用户,因此我认为提供用户参数不会有帮助...

自此问题发布以来的 8 年中,YouTube 可能发生了变化,但如果没有,我制作的包裹可能不会涵盖此案例。

使用 API:

pip3 install -U yt-videos-list # macOS
pip  install -U yt-videos-list # Windows

# if that doesn't work, try
python3 -m pip install -U yt-videos-list # macOS
python  -m pip install -U yt-videos-list # Windows

然后打开一个python解释器

python3   # macOS
python    # Windows

并运行程序:

from yt_videos_list import ListCreator
lc = ListCreator()

help(lc) # display API information - shows available parameters and functions

my_url = 'https://www.youtube.com/user/1veritasium'

lc.create_list_for(url=my_url)

【讨论】:

    【解决方案3】:

    简答:

    这是一个可以帮助解决这个问题的库。

    pip install scrapetube

    import scrapetube
    
    videos = scrapetube.get_channel("UC9-y-6csu5WGm29I7JiwpnA")
    
    for video in videos:
        print(video['videoId'])
    

    长答案:

    由于缺乏任何其他解决方案,上述模块是我创建的。这是我尝试过的:

    1. 硒。它有效,但有三大缺点: 1. 它需要安装网络浏览器和驱动程序。 2. 对 CPU 和内存有很大的要求。 3. 无法处理大频道。
    2. 使用 youtube-dl。像这样:
    import youtube_dl
        youtube_dl_options = {
            'skip_download': True,
            'ignoreerrors': True
        }
        with youtube_dl.YoutubeDL(youtube_dl_options) as ydl:
            videos = ydl.extract_info(f'https://www.youtube.com/channel/{channel_id}/videos')
    

    这也适用于小型频道,但对于较大的频道,我会因为在这么短的时间内发出如此多的请求而被 youtube 阻止(因为 youtube-dl 会为频道中的每个视频下载更多信息)。

    所以我创建了库 scrapetube,它使用 Web API 来获取所有视频。

    【讨论】:

      【解决方案4】:

      来自https://stackoverflow.com/a/65440501/2585501

      如果 a) 频道有超过 50 个视频,或者 b) 需要在平面 txt 列表中格式化的 youtube 视频 ID,则此方法特别有用:

      1. 获取 Youtube API v3 密钥(请参阅https://stackoverflow.com/a/65440324/2585501
      2. 获取频道的Youtube频道ID(见https://stackoverflow.com/a/16326307/2585501
      3. 获取频道的Uploads Playlist ID:https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails(基于https://www.youtube.com/watch?v=RjUlmco7v2M
      4. 安装 youtube-dl(例如 pip3 install --upgrade youtube-dlsudo apt-get install youtube-dl
      5. 使用 youtube-dl 下载上传播放列表:youtube-dl -j --flat-playlist "https://<yourYoutubePlaylist>" | jq -r '.id' | sed 's_^_https://youtu.be/_' > videoList.txt(请参阅 https://superuser.com/questions/1341684/youtube-dl-how-download-only-the-playlist-not-the-files-therein

      【讨论】:

        【解决方案5】:

        Here is 来自 Google Developers 的视频,展示了如何在 YouTube API 的 v3 中列出频道中的所有视频。

        有两个步骤:

        1. 查询频道以获取“上传”ID。例如https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails

        2. 使用此“上传”ID 来查询 PlaylistItems 以获取视频列表。例如https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50

        【讨论】:

        • 可以“上传”给定频道的 ID 更改吗?
        • 似乎上传与 channelId 相同,但 API 非常不一致,有人可以回答这个stackoverflow.com/questions/43568521/…
        • @ishandutta2007 没有上传 ID 与频道 ID 不同。
        • @virtualmic@Peter 完美解决方案伙计们,谢谢
        • @MattBooth 很到位。看起来模式是 Channel ID = UC + { User ID }, Upload Playlist ID = UU + { User ID } 。我猜它是在创建时为每个频道自动生成的(或者对于旧频道,当从 YT 的 API 切换到 Google 的 API 时)。仍然找不到任何消息来源证实,但通过数百个频道的测试,他们都遵循了这个模式。 UC 可以表示用户频道,而 UU 可以是用户上传。
        【解决方案6】:

        获取频道列表:

        通过forUserName获取频道列表:

        https://www.googleapis.com/youtube/v3/channels?part=snippet,contentDetails,statistics&forUsername=Apple&key=

        通过频道ID获取频道列表:

        https://www.googleapis.com/youtube/v3/channels/?part=snippet,contentDetails,statistics&id=UCE_M8A5yxnLfW0KghEeajjw&key=

        获取频道部分:

        https://www.googleapis.com/youtube/v3/channelSections?part=snippet,contentDetails&channelId=UCE_M8A5yxnLfW0KghEeajjw&key=

        获取播放列表:

        频道 ID 获取播放列表:

        https://www.googleapis.com/youtube/v3/playlists?part=snippet,contentDetails&channelId=UCq-Fj5jknLsUf-MWSy4_brA&maxResults=50&key=

        通过带有pageToken的频道ID获取播放列表

        https://www.googleapis.com/youtube/v3/playlists?part=snippet,contentDetails&channelId=UCq-Fj5jknLsUf-MWSy4_brA&maxResults=50&key=&pageToken=CDIQAA

        获取播放列表项:

        通过PlayListId获取PlaylistItems列表:

        https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&maxResults=25&playlistId=PLHFlHpPjgk70Yv3kxQvkDEO5n5tMQia5I&key=

        获取视频:

        通过视频ID获取视频列表:

        https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=YxLCwfA1cLw&key=

        通过多个视频ID获取视频列表:

        https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=YxLCwfA1cLw,Qgy6LaO3SB0,7yPJXGO2Dcw&key=

        获取cmets列表

        通过视频ID获取评论列表:

        https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=el****kQak&key=A**********k

        通过频道ID获取评论列表:

        https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&channelId=U*****Q&key=AI********k

        通过allThreadsRelatedToChannelId获取评论列表:

        https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&allThreadsRelatedToChannelId=UC*****ntcQ&key=AI*****k

        这里所有的 api 都是 Get 方法。

        根据频道 ID,我们无法直接获取所有视频,这是重点。

        用于集成https://developers.google.com/youtube/v3/quickstart/ios?ver=swift

        【讨论】:

        • 如何将多个频道 ID 发送到 api,我可以使用逗号分隔的频道 ID
        • 如何使用 api 获得前 10/50/100 个 youtube 频道?
        【解决方案7】:

        感谢此处和其他地方共享的参考资料,我制作了一个在线脚本/工具,可以用来获取频道的所有视频。

        它结合了对youtube.channels.listplaylistItemsvideos 的 API 调用。它使用递归函数使异步回调在获得有效响应后运行下一次迭代。

        这还可以限制一次发出的实际请求数量,从而确保您不会违反 YouTube API 规则。分享缩短的 sn-ps,然后是完整代码的链接。通过使用响应中的 nextPageToken 值来获取接下来的 50 个结果等,我得到了每次调用限制的 50 个最大结果。

        function getVideos(nextPageToken, vidsDone, params) {
            $.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
                key: params.accessKey,
                part: "snippet",
                maxResults: 50,
                playlistId: params.playlistId,
                fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken",
                pageToken: ( nextPageToken || '')
                },
                function(data) {
                    // commands to process JSON variable, extract the 50 videos info
        
                    if ( vidsDone < params.vidslimit) {
        
                        // Recursive: the function is calling itself if
                        // all videos haven't been loaded yet
                        getVideos( data.nextPageToken, vidsDone, params);
        
                    }
                     else {
                         // Closing actions to do once we have listed the videos needed.
                     }
            });
        }
        

        这获得了视频的基本列表,包括 ID、标题、发布日期等。但是要获得每个视频的更多详细信息,例如观看次数和点赞数,必须对 videos 进行 API 调用。

        // Looping through an array of video id's
        function fetchViddetails(i) {
            $.getJSON("https://www.googleapis.com/youtube/v3/videos", {
                key: document.getElementById("accesskey").value,
                part: "snippet,statistics",
                id: vidsList[i]
                }, function(data) {
        
                    // Commands to process JSON variable, extract the video
                    // information and push it to a global array
                    if (i < vidsList.length - 1) {
                        fetchViddetails(i+1) // Recursive: calls itself if the
                                             //            list isn't over.
                    }
        });
        

        请参阅 full code herelive version here。 (编辑:固定 github 链接)
        编辑:依赖项:JQuery,Papa.parse

        【讨论】:

        • 你确定这行得通吗? GitHub 页面消失了,然后当我在字段中输入 API 密钥和频道 ID 时,我收到错误。
        • @JoffreyBaratheon 感谢您指出损坏的 github 链接。我刚刚运行它..它的工作原理。获取该播放列表 ID 很棘手。请参阅:github.com/answerquest/answerquest.github.io/issues/2
        • 干得好。与更新的 github 链接配合得很好。你需要 jquery 和 papaparse.min.js
        • @thE_iNviNciblE 感谢您提出这个问题。提到它。
        • @nikhil-vj 它不适用于现实世界的场景,您不应向客户端浏览器提供 youtube API-Token。但是对于编程教育来说,这是一项不错的工作:-)
        【解决方案8】:

        示例解决方案在 Python 中。来自此视频的帮助:video 与许多其他答案一样,上传 id 将首先从频道 id 中检索。

        导入 urllib.request 导入json 键 = "YOUR_YOUTUBE_API_v3_BROWSER_KEY" #频道列表:如果您粘贴频道 ID 或用户名 - “id”或“forUsername”,请提及 ytids = [["bbcnews","forUsername"],["UCjq4pjKj9X4W9i7UnYShpVg","id"]] 新闻标题 = [] 对于 ytid,ytids 中的 ytparam: urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"="+ytid+"&key="+key 使用 urllib.request.urlopen(urld) 作为 url: 数据 = json.loads(url.read()) uploadsdet = datad['items'] #从频道id获取上传id uploadid = uploadsdet[0]['contentDetails']['relatedPlaylists']['uploads'] #检索列表 urld = "https://www.googleapis.com/youtube/v3/playlistItems?part=sn-p%2CcontentDetails&maxResults=50&playlistId="+uploadid+"&key="+key 使用 urllib.request.urlopen(urld) 作为 url: 数据 = json.loads(url.read()) 对于 datad['items'] 中的数据: ntitle = 数据['sn-p']['title'] nlink = 数据['contentDetails']['videoId'] newstitles.append([nlink,ntitle]) 对于链接,新闻标题中的标题: 打印(链接,标题)

        【讨论】:

          【解决方案9】:

          由于 500 个视频限制,回答此问题的每个人都遇到问题,这里有一个替代解决方案,使用 Python 3 中的 youtube_dl。此外,不需要 API 密钥

          1. 安装 youtube_dl:sudo pip3 install youtube-dl
          2. Find out your target channel's channel id。 ID将以UC开头。将频道的 C 替换为上传的 U(即 UU...),这是上传播放列表
          3. 使用 youtube-dl 的 播放列表下载器功能。理想情况下,您不想下载默认播放列表中的每个视频,而只下载元数据。

          示例(警告 -- 需要数十分钟):

          import youtube_dl, pickle
          
                       # UCVTyTA7-g9nopHeHbeuvpRA is the channel id (1517+ videos)
          PLAYLIST_ID = 'UUVTyTA7-g9nopHeHbeuvpRA'  # Late Night with Seth Meyers
          
          with youtube_dl.YoutubeDL({'ignoreerrors': True}) as ydl:
          
              playd = ydl.extract_info(PLAYLIST_ID, download=False)
          
              with open('playlist.pickle', 'wb') as f:
                  pickle.dump(playd, f, pickle.HIGHEST_PROTOCOL)
          
              vids = [vid for vid in playd['entries'] if 'A Closer Look' in vid['title']]
              print(sum('Trump' in vid['title'] for vid in vids), '/', len(vids))
          

          【讨论】:

          • 我认为这是最好的答案,因为它不需要 API 密钥。要使其更加自动化,您可以使用@for /f "usebackq tokens=2 delims=: " %a in (`dl-list.py^|findstr information`) do @echo https://www.youtube.com/watch?v=%a。它将打印视频的所有 URL。 PLAYLIST_ID 可以是播放列表或频道 ID。
          • 你可以推断,但我忘了说我把代码保存为dl-list.py
          【解决方案10】:

          最近我不得不从一个频道中检索所有视频,根据 YouTube 开发者文档: https://developers.google.com/youtube/v3/docs/playlistItems/list

          function playlistItemsListByPlaylistId($service, $part, $params) {
              $params = array_filter($params);
              $response = $service->playlistItems->listPlaylistItems(
                  $part,
                  $params
              );
          
              print_r($response);
          }
          
          playlistItemsListByPlaylistId($service,
              'snippet,contentDetails',
              array('maxResults' => 25, 'playlistId' => 'id of "uploads" playlist'));
          

          其中$service 是您的Google_Service_YouTube 对象。

          因此,您必须从频道获取信息以检索实际上包含频道上传的所有视频的“上传”播放列表:https://developers.google.com/youtube/v3/docs/channels/list

          如果是此 API 的新手,我强烈建议将代码示例从默认的 sn-p 转换为完整示例。

          所以从频道中检索所有视频的基本代码可以是:

          class YouTube
          {
              const       DEV_KEY = 'YOUR_DEVELOPPER_KEY';
              private     $client;
              private     $youtube;
              private     $lastChannel;
          
              public function __construct()
              {
                  $this->client = new Google_Client();
                  $this->client->setDeveloperKey(self::DEV_KEY);
                  $this->youtube = new Google_Service_YouTube($this->client);
                  $this->lastChannel = false;
              }
          
              public function getChannelInfoFromName($channel_name)
              {
                  if ($this->lastChannel && $this->lastChannel['modelData']['items'][0]['snippet']['title'] == $channel_name)
                  {
                      return $this->lastChannel;
                  }
                  $this->lastChannel = $this->youtube->channels->listChannels('snippet, contentDetails, statistics', array(
                      'forUsername' => $channel_name,
                  ));
                  return ($this->lastChannel);
              }
          
              public function getVideosFromChannelName($channel_name, $max_result = 5)
              {
                  $this->getChannelInfoFromName($channel_name);
                  $params = [
                      'playlistId' => $this->lastChannel['modelData']['items'][0]['contentDetails']['relatedPlaylists']['uploads'],
                      'maxResults'=> $max_result,
                  ];
                  return ($this->youtube->playlistItems->listPlaylistItems('snippet,contentDetails', $params));
              }
          }
          
          $yt = new YouTube();
          echo '<pre>' . print_r($yt->getVideosFromChannelName('CHANNEL_NAME'), true) . '</pre>';
          

          【讨论】:

          • 这是否会获取所有带有标题的视频、视频的 URL、识别视频的图像、喜欢/cmets 的数量?有关如何发布的一些信息会有所帮助。谢谢。
          【解决方案11】:

          【讨论】:

          • 你如何从频道列表中解析 playlist_id ?
          【解决方案12】:

          尝试如下。它可能会帮助你。

          https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news

          在这里作者可以指定您的频道名称,“q”可以指定搜索关键字。

          【讨论】:

          • 该 API 的文档在哪里?
          • 此 API 不再可用:“YouTube 数据 API (v2) 已于 2014 年 3 月 4 日正式弃用”
          【解决方案13】:

          您需要查看YouTube Data API。您将在那里找到有关如何访问 API 的文档。您也可以找到client libraries

          您也可以自己提出请求。以下是从频道中检索最新视频的示例 URL:

          https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20
          

          之后,您将收到带有视频 ID 和详细信息的JSON,您可以像这样构建您的视频 URL:

          http://www.youtube.com/watch?v={video_id_here}
          

          【讨论】:

          • 这只会返回第一个 maxResults=20(最多 50 个)视频,而不是整个频道目录。如果您想要更多结果,请按照here 所述使用 pageToken。
          • Romulus Urakagi Ts'ai:在请求视频时,您提供了 channelId,即频道过滤器。
          • 值得注意的是,使用下一页令牌您最多只能从一个频道获取 500 个视频。
          • @TonyPaternite 我如何获得超过 500 个视频。我目前正面临这个问题。
          • 小心使用搜索,因为它的报价成本为 100!
          【解决方案14】:

          如文档所述 (link),您可以使用频道资源类型和操作 List 来获取频道中的所有视频。此操作必须使用参数“通道 id”执行。

          【讨论】:

          • 说起来容易,但你为什么不把你的答案放在一个好的和有效的例子中???
          【解决方案15】:

          使用已弃用的 API 版本 2,上传的 URL(频道 UCqAEtEr0A0Eo2IVcuWBfB9g)是:

          https://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads

          有一个 API 版本 3。

          【讨论】:

          • 对于 UCqAEtEr0A0Eo2IVcuWBfB9g 它有效,我认为这是因为它是由单个用户上传的。 HC-8jgBP-4rlI怎么样
          • 直到今天才查看我的消息。你说得对。仅适用于用户频道。
          • 链接已失效。
          【解决方案16】:

          以下是不需要任何特殊包的 Python 替代方案。通过提供频道 ID,它会返回该频道的视频链接列表。请注意,您需要API Key 才能使用它。

          import urllib
          import json
          
          def get_all_video_in_channel(channel_id):
              api_key = YOUR API KEY
          
              base_video_url = 'https://www.youtube.com/watch?v='
              base_search_url = 'https://www.googleapis.com/youtube/v3/search?'
          
              first_url = base_search_url+'key={}&channelId={}&part=snippet,id&order=date&maxResults=25'.format(api_key, channel_id)
          
              video_links = []
              url = first_url
              while True:
                  inp = urllib.urlopen(url)
                  resp = json.load(inp)
          
                  for i in resp['items']:
                      if i['id']['kind'] == "youtube#video":
                          video_links.append(base_video_url + i['id']['videoId'])
          
                  try:
                      next_page_token = resp['nextPageToken']
                      url = first_url + '&pageToken={}'.format(next_page_token)
                  except:
                      break
              return video_links
          

          【讨论】:

          • 这是如何工作的?我将 API KEY 使用单引号 ' ' 粘贴到 api_key 变量中,然后调用传入通道 id 的函数,然后运行 ​​python 程序,但没有任何反应。
          • @JoffreyBaratheon 该函数返回一个数组,您需要将其包含到一个变量中。例如:video_list = get_all_video_in_channel("ABC123EFG456") 然后您可以使用print(video_list) 打印它以查看数组
          • 尽管这可能是最快的方法,但“搜索”的成本是 100 单位,这可能会导致超出配额。
          【解决方案17】:

          这是返回您频道下所有视频 ID 的代码

          <?php 
              $baseUrl = 'https://www.googleapis.com/youtube/v3/';
              // https://developers.google.com/youtube/v3/getting-started
              $apiKey = 'API_KEY';
              // If you don't know the channel ID see below
              $channelId = 'CHANNEL_ID';
          
              $params = [
                  'id'=> $channelId,
                  'part'=> 'contentDetails',
                  'key'=> $apiKey
              ];
              $url = $baseUrl . 'channels?' . http_build_query($params);
              $json = json_decode(file_get_contents($url), true);
          
              $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads'];
          
              $params = [
                  'part'=> 'snippet',
                  'playlistId' => $playlist,
                  'maxResults'=> '50',
                  'key'=> $apiKey
              ];
              $url = $baseUrl . 'playlistItems?' . http_build_query($params);
              $json = json_decode(file_get_contents($url), true);
          
              $videos = [];
              foreach($json['items'] as $video)
                  $videos[] = $video['snippet']['resourceId']['videoId'];
          
              while(isset($json['nextPageToken'])){
                  $nextUrl = $url . '&pageToken=' . $json['nextPageToken'];
                  $json = json_decode(file_get_contents($nextUrl), true);
                  foreach($json['items'] as $video)
                      $videos[] = $video['snippet']['resourceId']['videoId'];
              }
              print_r($videos);
          

          注意:您可以在以下位置获取频道 ID 登录后https://www.youtube.com/account_advanced

          【讨论】:

          • 这绝对是一个有效的干净解决方案。目前在生产中使用。
          • 谢谢老哥,刚刚粘贴就可以了,一切正常!
          猜你喜欢
          • 2015-07-16
          • 2016-08-05
          • 2015-09-02
          • 2015-03-11
          • 2016-07-11
          • 2016-03-01
          • 2016-03-12
          • 2018-03-30
          相关资源
          最近更新 更多