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); }; |
然后你只需要打电话给
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文档所概述的流程进行布局。
在https://console.developers.google.com/apis/credentials创建新项目。
- 在左上角的google apis徽标旁边,转到选择一个项目并创建项目+。
- 请稍等片刻,等待创建完成。
创建新的API密钥。你需要它来访问v3下的视频信息。
- 如果您还不在,请转到左侧导航器下的凭证,API和服务>凭证。
- 在凭证选项卡下,单击创建凭证并选择API密钥。
- 将API密钥复制到剪贴板。
- 有关您可以访问的内容的更多信息,请参见:https://developers.google.com/youtube/v3/getting started部分。为了方便起见,我将在这里复制它们的一个示例(示例4)。URL中的
fields 和part 参数在这里是键。
例子
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" } } ] } |
。
这将以
如果喜欢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(); |