从YouTube视频中获取标题

Get title from YouTube videos

我想提取YouTube视频的标题。我该怎么做?

谢谢。


获取YouTube视频信息的最简单方法是解析从以下位置检索到的字符串:http://youtube.com/get_video_info?视频ID=XXXXXXXX

使用类似于php的parse_str()的工具,您可以获得关于视频的几乎所有内容的一个很好的数组:

1
2
3
$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$id);
parse_str($content, $ytarr);
echo $ytarr['title'];

它将使用$id作为视频的ID打印视频的标题。


一种方法是从youtube中检索视频,如下所示

然后从YouTube发送的Atom提要中提取标题。这里显示了一个示例提要


使用javascript数据API:

1
2
3
4
5
6
7
8
9
10
var loadInfo = function (videoId) {
    var gdata = document.createElement("script");
    gdata.src ="http://gdata.youtube.com/feeds/api/videos/" + videoId +"?v=2&alt=jsonc&callback=storeInfo";
    var body = document.getElementsByTagName("body")[0];
    body.appendChild(gdata);
};

var storeInfo = function (info) {
    console.log(info.data.title);
};

然后你只需要打电话给loadInfo(videoId)

API文档中提供了更多信息。


我认为最好的方法是使用YouTube的gdata,然后从返回的XML中获取信息。

http://gdata.youtube.com/feeds/api/videos/6_kfpsb8ri

更新:现在有了一个更新的API,您应该改为使用它

https://developers.google.com/youtube/v3/getting-started网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
     &fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics

Description: This example modifies the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId properties.

API response:

{
"videos": [
  {
  "id":"7lCDEYXw3mM",
  "snippet": {
   "channelId":"UC_x5XG1OV2P6uZZ5FSM9Ttw",
   "title":"Google I/O 101: Q&A On Using Google APIs",
   "categoryId":"28"
   },
  "statistics": {
   "viewCount":"3057",
   "likeCount":"25",
   "dislikeCount":"0",
   "favoriteCount":"17",
   "commentCount":"12"
   }
  }
 ]
}


1
2
3
4
5
6
7
8
9
10
// This is the youtube video URL: http://www.youtube.com/watch?v=nOHHta68DdU
$code ="nOHHta68DdU";
// Get video feed info (xml) from youtube, but only the title | http://php.net/manual/en/function.file-get-contents.php
$video_feed = file_get_contents("http://gdata.youtube.com/feeds/api/videos?v=2&q=".$code."&max-results=1&fields=entry(title)&prettyprint=true");
// xml to object | http://php.net/manual/en/function.simplexml-load-string.php
$video_obj = simplexml_load_string($video_feed);
// Get the title string to a variable
$video_str = $video_obj->entry->title;
// Output
echo $video_str;


对于bash、wget和lynx:

1
2
3
4
5
6
7
8
9
#!/bin/bash
read -e -p"Youtube address?" address
page=$(wget"$address" -O - 2>/dev/null)
title=$(echo"$page" | grep"   -")
title="$(lynx --dump -force-html <(echo"<html><body>
$title
</body></html>")| grep"  -")"
title="${title/*   - /}"
echo"$title"


你好,在python3,我创立了两种方法

1)无API密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import urllib.request
import json
import urllib
import pprint

#change to yours VideoID or change url inparams
VideoID ="SZj6rAYkYOg"

params = {"format":"json","url":"https://www.youtube.com/watch?v=%s" % VideoID}
url ="https://www.youtube.com/oembed"
query_string = urllib.parse.urlencode(params)
url = url +"?" + query_string

with urllib.request.urlopen(url) as response:
    response_text = response.read()
    data = json.loads(response_text.decode())
    pprint.pprint(data)
    print(data['title'])

示例结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{'author_name': 'Google Developers',
 'author_url': 'https://www.youtube.com/user/GoogleDevelopers',
 'height': 270,
 'html': '<iframe width="480" height="270" '
         'src="https://www.youtube.com/embed/SZj6rAYkYOg?feature=oembed" '
         'frameborder="0" allow="autoplay; encrypted-media" '
         'allowfullscreen></iframe>',
 'provider_name': 'YouTube',
 'provider_url': 'https://www.youtube.com/',
 'thumbnail_height': 360,
 'thumbnail_url': 'https://i.ytimg.com/vi/SZj6rAYkYOg/hqdefault.jpg',
 'thumbnail_width': 480,
 'title': 'Google I/O 101:  Google APIs: Getting Started Quickly',
 'type': 'video',
 'version': '1.0',
 'width': 480}
Google I/O 101:  Google APIs: Getting Started Quickly

2)使用google api-所需apikey

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import urllib.request
import json
import urllib
import pprint

APIKEY ="YOUR_GOOGLE_APIKEY"
VideoID ="YOUR_VIDEO_ID"

params = {'id': VideoID, 'key': APIKEY,
          'fields': 'items(id,snippet(channelId,title,categoryId),statistics)',
          'part': 'snippet,statistics'}

url = 'https://www.googleapis.com/youtube/v3/videos'

query_string = urllib.parse.urlencode(params)
url = url +"?" + query_string

with urllib.request.urlopen(url) as response:
    response_text = response.read()
    data = json.loads(response_text.decode())
    pprint.pprint(data)
    print("TITLE: %s" % data['items'][0]['snippet']['title'])

示例结果:

1
2
3
4
5
6
7
8
9
10
11
{'items': [{'id': 'SZj6rAYkYOg',
            'snippet': {'categoryId': '28',
                        'channelId': 'UC_x5XG1OV2P6uZZ5FSM9Ttw',
                        'title': 'Google I/O 101:  Google APIs: Getting '
                                 'Started Quickly'},
            'statistics': {'commentCount': '36',
                           'dislikeCount': '20',
                           'favoriteCount': '0',
                           'likeCount': '418',
                           'viewCount': '65783'}}]}
TITLE: Google I/O 101:  Google APIs: Getting Started Quickly


我将按照youtube api v3文档所概述的流程进行布局。

  • 登录您希望与YouTube API使用关联的Google帐户。
  • 在https://console.developers.google.com/apis/credentials创建新项目。

    • 在左上角的google apis徽标旁边,转到选择一个项目并创建项目+
    • 请稍等片刻,等待创建完成。
  • 创建新的API密钥。你需要它来访问v3下的视频信息。

    • 如果您还不在,请转到左侧导航器下的凭证,API和服务>凭证。
    • 在凭证选项卡下,单击创建凭证并选择API密钥。
    • 将API密钥复制到剪贴板。
  • 提供视频ID和新创建的API密钥,请转到此链接查看您的实际工作:https://www.googleapis.com/youtube/v3/videos?id=&key=%20&part=snippet(无尖括号)
    • 有关您可以访问的内容的更多信息,请参见:https://developers.google.com/youtube/v3/getting started部分。为了方便起见,我将在这里复制它们的一个示例(示例4)。URL中的fieldspart参数在这里是键。
  • 例子

    URL是,好吧,您可以通过浏览器访问哪个URL来查看它。作为回报,你应该得到API response:项下的东西。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
         &fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics

    Description: This example modifies the fields parameter from example 3
                 so that in the API response, each video resource's snippet
                 object only includes the channelId, title,
                 and categoryId properties.

    API response:

    {
    "videos": [
      {
      "id":"7lCDEYXw3mM",
      "snippet": {
       "channelId":"UC_x5XG1OV2P6uZZ5FSM9Ttw",
       "title":"Google I/O 101: Q&A On Using Google APIs",
       "categoryId":"28"
       },
      "statistics": {
       "viewCount":"3057",
       "likeCount":"25",
       "dislikeCount":"0",
       "favoriteCount":"17",
       "commentCount":"12"
       }
      }
     ]
    }

    这将以.json文件格式提供视频信息。如果您的项目是通过javascript访问这些信息,那么接下来您可能会到这里:如何从javascript中的URL获取JSON?.


    如果喜欢python批处理脚本:我使用beautifulsoup轻松地从html解析标题,使用urllib下载html和unicodecsv库,以便保存youtube标题中的所有字符。

    唯一需要做的就是将带有单列(命名)URL的csv和youtube视频的URL放在与脚本相同的文件夹中,并将其命名为yt-urls.csv并运行脚本。您将得到包含URL及其标题的文件yt-urls-titles.csv。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/python

    from bs4 import BeautifulSoup
    import urllib
    import unicodecsv as csv

    with open('yt-urls-titles.csv', 'wb') as f:
        resultcsv = csv.DictWriter(f, delimiter=';', quotechar='"',fieldnames=['url','title'])
        with open('yt-urls.csv', 'rb') as f:
            inputcsv = csv.DictReader(f, delimiter=';', quotechar='"')
            resultcsv.writeheader()
            for row in inputcsv:
                soup = BeautifulSoup(urllib.urlopen(row['url']).read(),"html.parser")
                resultcsv.writerow({'url': row['url'],'title': soup.title.string})

    您可以使用json获取有关视频的所有信息

    1
    2
    3
    4
    5
    6
    7
    8
    $jsonURL = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id={Your_Video_ID_Here}&key={Your_API_KEY}8&part=snippet");
    $json = json_decode($jsonURL);

    $vtitle = $json->{'items'}[0]->{'snippet'}->{'title'};
    $vdescription = $json->{'items'}[0]->{'snippet'}->{'description'};
    $vvid = $json->{'items'}[0]->{'id'};
    $vdate = $json->{'items'}[0]->{'snippet'}->{'publishedAt'};
    $vthumb = $json->{'items'}[0]->{'snippet'}->{'thumbnails'}->{'high'}->{'url'};

    我希望它能解决你的问题。


    以下是一些用于ColdFusion的剪切粘贴代码:

    http://trycf.com/gist/f296d14e456a7c925d23a1282daa0b90

    它使用youtube api v3在cf9(可能是更早的版本)上工作,而youtube apiv3需要一个api密钥。

    我为任何想深入挖掘的人留下了一些评论和诊断资料。希望它能帮助别人。


    与Matej M类似,但更简单地说:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import requests
    from bs4 import BeautifulSoup


    def get_video_name(id: str):
       """
        Return the name of the video as it appears on YouTube, given the video id.
       """
        r = requests.get(f'https://youtube.com/watch?v={id}')
        r.raise_for_status()
        soup = BeautifulSoup(r.content,"lxml")
        return soup.title.string


    if __name__ == '__main__':
        js = get_video_name("RJqimlFcJsM")
        print('

    ')
        print(js)


    Javax现在附带了这个功能。例如,显示视频的缩略图和标题是两行:

    1
    2
    SS map = youtubeVideoInfo("https://www.youtube.com/watch?v=4If_vFZdFTk"));
    showImage(map.get("title"), loadImage(map.get("thumbnail_url")));

    例子


    试试看,我正在获取播放列表中每个视频的名称和URL,您可以根据需要修改此代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $Playlist = ((Invoke-WebRequest"https://www.youtube.com/watch?v=HKkRbc6W6NA&list=PLz9M61O0WZqSUvHzPHVVC4IcqA8qe5K3r&
    index=1").Links | Where {$_.class -match"playlist-video"}).href
    $Fname = ((Invoke-WebRequest"https://www.youtube.com/watch?v=HKkRbc6W6NA&list=PLz9M61O0WZqSUvHzPHVVC4IcqA8qe5K3r&ind
    ex=1").Links | Where {$_.class -match"playlist-video"}).outerText
    $FinalText=""
    For($i=0;$i -lt $playlist.Length;$i++)
    {
    Write-Output("'"+($Fname[$i].split("|")[0]).split("|")[0]+"'+"+"https://www.youtube.com"+$Playlist[$i])
    }


    如果您熟悉Java,请尝试JTHOST解析器。

    1
    2
    Document document = Jsoup.connect("http://www.youtube.com/ABDCEF").get();
    document.title();