Tôi muốn trích xuất các video Tiêu đề của YouTube. Tôi có thể làm cái này như thế nào?Tải tiêu đề từ video trên YouTube
Cảm ơn.
Tôi muốn trích xuất các video Tiêu đề của YouTube. Tôi có thể làm cái này như thế nào?Tải tiêu đề từ video trên YouTube
Cảm ơn.
Cách dễ nhất để có được thông tin về một đoạn video youtube afaik là phải phân tích chuỗi lấy từ: http://youtube.com/get_video_info?video_id=XXXXXXXX
Sử dụng một cái gì đó như PHP parse_str(), bạn có thể có được một mảng đẹp gần bất cứ điều gì về video:
$content = file_get_contents("http://youtube.com/get_video_info?video_id=".$id);
parse_str($content, $ytarr);
echo $ytarr['title'];
Điều đó sẽ in tiêu đề cho video bằng id $ làm id của video.
Phương pháp này rất thuận tiện. Có bất kỳ tài liệu chính thức nào về phương pháp này không? Cảm ơn. –
Không xa như tôi có thể nói, dẫn tôi tin rằng nó có thể không thực sự là phương pháp best_, vì get_video_info rất có thể sẽ chết giống như get_video. Tuy nhiên, bằng cách sử dụng phương pháp này, bạn có thể truy cập một số thông tin không được cung cấp trong API chính thức (chẳng hạn như URL luồng trực tiếp để tải xuống video Youtube, như get_video được cung cấp). Giải pháp ngắn: Nếu chính thức API Youtube (như Alex.Bullard trả lời ở đây) không cung cấp thông tin mong muốn, hãy thử thăm dò get_video_info – Cruel
Cảm ơn @Cruel, đó chỉ là thông tin tôi cần :) –
Với bash, wget và lynx:
#!/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"
Sử dụng JavaScript dữ liệu API:
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);
};
Sau đó, bạn chỉ cần gọi loadInfo(videoId)
.
Thông tin thêm có sẵn trên API documentation.
Điều này không còn hoạt động: ( –
YouTube đóng API cũ. Hãy xem tại đây để biết thêm thông tin về phiên bản mới https://developers.google.com/youtube/v3/getting-started. – sirLisko
// 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;
Nó sẽ là tốt hơn để thêm một số nhận xét vào mã của bạn –
Ok, cảm ơn. Tôi đã thêm ý kiến ... :) – glocsw
Nếu bạn đã quen với java, hãy thử trình phân tích cú pháp Jsoup.
Document document = Jsoup.connect("http://www.youtube.com/ABDCEF").get();
document.title();
Tôi tin rằng cách tốt nhất là sử dụng gdata của YouTube, và sau đó lấy thông tin từ XML được trả về
http://gdata.youtube.com/feeds/api/videos/6_Ukfpsb8RI
Cập nhật: Có một API mới ra ngay bây giờ mà bạn nên sử dụng thay vì
https://developers.google.com/youtube/v3/getting-started
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"
}
}
]
}
Dưới đây là một số cắt và dán mã cho ColdFusion:
http://trycf.com/gist/f296d14e456a7c925d23a1282daa0b90
Nó hoạt động trên CF9 (và rất có thể, các phiên bản trước đó) sử dụng YouTube v3 API, đòi hỏi một khóa API.
Tôi đã để lại một số nhận xét và công cụ xếp gọn trong đó, cho bất kỳ ai muốn đào sâu hơn. Hy vọng nó sẽ giúp ai đó.
Hãy thử cách này, tôi nhận tên và url của từng video trong danh sách phát, bạn có thể sửa đổi mã này theo yêu cầu của mình.
$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])
}
Bạn có thể làm bằng Json để có được tất cả các thông tin về video
$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'};
Tôi hy vọng nó sẽ giải quyết vấn đề của bạn.
Nếu kịch bản xử lý python hàng loạt được đánh giá cao: Tôi sử dụng BeautifulSoup để dễ dàng phân tích các tiêu đề từ HTML, urllib để tải xuống các thư viện HTML và unicodecsv để lưu tất cả các ký tự từ tiêu đề Youtube.
Điều duy nhất bạn cần làm là đặt csv với đơn cột (tên) url với URL của video Youtube trong cùng một thư mục như kịch bản là gì và đặt tên nó là yt-urls.csv và chạy kịch bản. Bạn sẽ nhận được tệp yt-urls-titles.csv chứa URL và tiêu đề của nó.
#!/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})
Tôi sẽ trình bày quy trình như được nêu trong YouTube API v3 documentation.
Tạo dự án mới tại https://console.developers.google.com/apis/credentials.
Tạo khóa API mới. Bạn sẽ cần nó để truy cập thông tin video theo v3.
https://www.googleapis.com/youtube/v3/videos?id=<YOUR VIDEO ID HERE>&key=<YOUR API KEY HERE>%20&part=snippet
fields
và part
trong URL là khóa ở đây.Các URL
được, tốt, những gì URL bạn có thể vào thông qua trình duyệt của bạn để kiểm tra xem nó ra. Đổi lại, bạn sẽ nhận được những gì dưới API response:
.
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"
}
}
]
}
này cung cấp cho bạn thông tin video trong các định dạng tập tin .json
. Nếu dự án của bạn truy cập thông tin này thông qua JavaScript, bạn có thể đến đây tiếp theo: How to get JSON from URL in Javascript?.
Trích xuất từ đâu? – Zed
mỗi lần khi bạn mở youtube, nó sẽ hiển thị tiêu đề bên dưới tiêu đề video được nhúng – webkul
chấp nhận câu trả lời nếu nó giải quyết được vấn đề của bạn. – Reddy