feat: add ChannelRss

- add documentation
- small model refactor: rename player VideoPlayerDetails.thumbnails to thumbnail
This commit is contained in:
ThetaDev 2022-09-27 15:23:09 +02:00
parent 6ac5bc3782
commit 305c3ee70e
29 changed files with 2222 additions and 118 deletions

View file

@ -14,7 +14,9 @@ members = [".", "codegen", "cli"]
[features]
default = ["default-tls"]
all = ["rss", "html"]
rss = ["quick-xml"]
html = ["askama_escape"]
# Reqwest TLS
@ -44,6 +46,7 @@ filenamify = "0.1.0"
ress = "0.11.4"
phf = "0.11.1"
askama_escape = {version = "0.10.3", optional = true}
quick-xml = {version = "0.25.0", features = ["serialize"], optional = true}
[dev-dependencies]
env_logger = "0.9.0"

View file

@ -11,8 +11,8 @@ inspired by [NewPipe](https://github.com/TeamNewPipe/NewPipeExtractor).
- TODO: Livestream support
- [X] **Playlist**
- [X] **VideoDetails** (metadata, comments, recommended videos)
- [ ] **Channel**
- [ ] **ChannelRSS**
- [X] **Channel** (videos, playlists, info)
- [X] **ChannelRSS**
- [ ] **Search**
- [ ] **Search suggestions**
- [ ] **Trending**

View file

@ -42,7 +42,7 @@ use crate::{
/// The dictionary contains the information required to parse dates and numbers
/// in all supported languages.
pub struct Entry {
pub(crate) struct Entry {
/// Should the language be parsed by character instead of by word?
/// (e.g. Chinese/Japanese)
pub by_char: bool,
@ -79,7 +79,7 @@ pub struct Entry {
"#;
let mut code_timeago_tokens = r#"#[rustfmt::skip]
pub fn entry(lang: Language) -> Entry {
pub(crate) fn entry(lang: Language) -> Entry {
match lang {
"#
.to_owned();

View file

@ -1,3 +1,5 @@
//! Persistent cache storage
use std::{
fs,
path::{Path, PathBuf},

View file

@ -1,5 +1,4 @@
use anyhow::{anyhow, bail, Result};
use reqwest::Method;
use serde::Serialize;
use url::Url;
@ -68,7 +67,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"channel_videos",
channel_id,
Method::POST,
"browse",
&request_body,
)
@ -89,7 +87,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"channel_videos_continuation",
ctoken,
Method::POST,
"browse",
&request_body,
)
@ -111,7 +108,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"channel_playlists",
channel_id,
Method::POST,
"browse",
&request_body,
)
@ -132,7 +128,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"channel_videos_continuation",
ctoken,
Method::POST,
"browse",
&request_body,
)
@ -151,7 +146,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"channel_info",
channel_id,
Method::POST,
"browse",
&request_body,
)

92
src/client/channel_rss.rs Normal file
View file

@ -0,0 +1,92 @@
use std::collections::BTreeMap;
use anyhow::Result;
use crate::{model::ChannelRss, report::Report};
use super::{response, RustyPipeQuery};
impl RustyPipeQuery {
pub async fn channel_rss(&self, channel_id: &str) -> Result<ChannelRss> {
let url = format!(
"https://www.youtube.com/feeds/videos.xml?channel_id={}",
channel_id
);
let xml = self
.client
.http_request_txt(self.client.inner.http.get(&url).build()?)
.await?;
match quick_xml::de::from_str::<response::ChannelRss>(&xml) {
Ok(feed) => Ok(feed.into()),
Err(e) => {
if let Some(reporter) = &self.client.inner.reporter {
let report = Report {
info: Default::default(),
level: crate::report::Level::ERR,
operation: "channel_rss".to_owned(),
error: Some(e.to_string()),
msgs: Vec::new(),
deobf_data: None,
http_request: crate::report::HTTPRequest {
url: url,
method: "GET".to_owned(),
req_header: BTreeMap::new(),
req_body: String::new(),
status: 200,
resp_body: xml,
},
};
reporter.report(&report);
}
Err(e.into())
}
}
}
}
#[cfg(test)]
mod tests {
use std::{fs::File, io::BufReader, path::Path};
use chrono::{Datelike, Timelike};
use crate::{
client::{response, RustyPipe},
model::ChannelRss,
};
#[tokio::test]
async fn get_channel_rss() {
let rp = RustyPipe::builder().strict().build();
let channel = rp
.query()
.channel_rss("UCHnyfMqiRRG1u-2MsSQLbXA")
.await
.unwrap();
assert_eq!(channel.id, "UCHnyfMqiRRG1u-2MsSQLbXA");
assert_eq!(channel.name, "Veritasium");
assert_eq!(channel.create_date.year(), 2010);
assert_eq!(channel.create_date.month(), 7);
assert_eq!(channel.create_date.day(), 21);
assert_eq!(channel.create_date.hour(), 7);
assert_eq!(channel.create_date.minute(), 18);
assert!(!channel.videos.is_empty());
}
#[test]
fn map_channel_rss() {
let xml_path = Path::new("testfiles/channel_rss/base.xml");
let xml_file = File::open(xml_path).unwrap();
let feed: response::ChannelRss =
quick_xml::de::from_reader(BufReader::new(xml_file)).unwrap();
let map_res: ChannelRss = feed.into();
insta::assert_ron_snapshot!("map_channel_rss", map_res);
}
}

View file

@ -1,3 +1,5 @@
//! YouTube API Client
mod channel;
mod pagination;
mod player;
@ -5,6 +7,9 @@ mod playlist;
mod response;
mod video_details;
#[cfg(feature = "rss")]
mod channel_rss;
use std::fmt::Debug;
use std::sync::Arc;
@ -14,7 +19,7 @@ use fancy_regex::Regex;
use log::{error, warn};
use once_cell::sync::Lazy;
use rand::Rng;
use reqwest::{header, Client, ClientBuilder, Method, Request, RequestBuilder, Response};
use reqwest::{header, Client, ClientBuilder, Request, RequestBuilder, Response};
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use tokio::sync::Mutex;
@ -787,24 +792,16 @@ impl RustyPipeQuery {
/// - `ctype`: Client type (`Desktop`, `DesktopMusic`, `Android`, ...)
/// - `method`: HTTP method
/// - `endpoint`: YouTube API endpoint (`https://www.youtube.com/youtubei/v1/<XYZ>?key=...`)
async fn request_builder(
&self,
ctype: ClientType,
method: Method,
endpoint: &str,
) -> RequestBuilder {
async fn request_builder(&self, ctype: ClientType, endpoint: &str) -> RequestBuilder {
match ctype {
ClientType::Desktop => self
.client
.inner
.http
.request(
method,
format!(
"{}{}?key={}{}",
YOUTUBEI_V1_URL, endpoint, DESKTOP_API_KEY, DISABLE_PRETTY_PRINT_PARAMETER
),
)
.post(format!(
"{}{}?key={}{}",
YOUTUBEI_V1_URL, endpoint, DESKTOP_API_KEY, DISABLE_PRETTY_PRINT_PARAMETER
))
.header(header::ORIGIN, "https://www.youtube.com")
.header(header::REFERER, "https://www.youtube.com")
.header(header::COOKIE, self.client.inner.consent_cookie.to_owned())
@ -817,16 +814,13 @@ impl RustyPipeQuery {
.client
.inner
.http
.request(
method,
format!(
"{}{}?key={}{}",
YOUTUBE_MUSIC_V1_URL,
endpoint,
DESKTOP_MUSIC_API_KEY,
DISABLE_PRETTY_PRINT_PARAMETER
),
)
.post(format!(
"{}{}?key={}{}",
YOUTUBE_MUSIC_V1_URL,
endpoint,
DESKTOP_MUSIC_API_KEY,
DISABLE_PRETTY_PRINT_PARAMETER
))
.header(header::ORIGIN, "https://music.youtube.com")
.header(header::REFERER, "https://music.youtube.com")
.header(header::COOKIE, self.client.inner.consent_cookie.to_owned())
@ -839,13 +833,10 @@ impl RustyPipeQuery {
.client
.inner
.http
.request(
method,
format!(
"{}{}?key={}{}",
YOUTUBEI_V1_URL, endpoint, DESKTOP_API_KEY, DISABLE_PRETTY_PRINT_PARAMETER
),
)
.post(format!(
"{}{}?key={}{}",
YOUTUBEI_V1_URL, endpoint, DESKTOP_API_KEY, DISABLE_PRETTY_PRINT_PARAMETER
))
.header(header::ORIGIN, "https://www.youtube.com")
.header(header::REFERER, "https://www.youtube.com")
.header("X-YouTube-Client-Name", "1")
@ -854,16 +845,13 @@ impl RustyPipeQuery {
.client
.inner
.http
.request(
method,
format!(
"{}{}?key={}{}",
YOUTUBEI_V1_GAPIS_URL,
endpoint,
ANDROID_API_KEY,
DISABLE_PRETTY_PRINT_PARAMETER
),
)
.post(format!(
"{}{}?key={}{}",
YOUTUBEI_V1_GAPIS_URL,
endpoint,
ANDROID_API_KEY,
DISABLE_PRETTY_PRINT_PARAMETER
))
.header(
header::USER_AGENT,
format!(
@ -876,16 +864,10 @@ impl RustyPipeQuery {
.client
.inner
.http
.request(
method,
format!(
"{}{}?key={}{}",
YOUTUBEI_V1_GAPIS_URL,
endpoint,
IOS_API_KEY,
DISABLE_PRETTY_PRINT_PARAMETER
),
)
.post(format!(
"{}{}?key={}{}",
YOUTUBEI_V1_GAPIS_URL, endpoint, IOS_API_KEY, DISABLE_PRETTY_PRINT_PARAMETER
))
.header(
header::USER_AGENT,
format!(
@ -911,7 +893,6 @@ impl RustyPipeQuery {
/// - `endpoint`: YouTube API endpoint (`https://www.youtube.com/youtubei/v1/<XYZ>?key=...`)
/// - `body`: Serializable request body to be sent in json format
/// - `deobf`: Deobfuscator (is passed to the mapper to deobfuscate stream URLs).
#[allow(clippy::too_many_arguments)]
async fn execute_request_deobf<
R: DeserializeOwned + MapResponse<M> + Debug,
M,
@ -921,13 +902,12 @@ impl RustyPipeQuery {
ctype: ClientType,
operation: &str,
id: &str,
method: Method,
endpoint: &str,
body: &B,
deobf: Option<&Deobfuscator>,
) -> Result<M> {
let request = self
.request_builder(ctype, method.clone(), endpoint)
.request_builder(ctype, endpoint)
.await
.json(body)
.build()?;
@ -943,9 +923,7 @@ impl RustyPipeQuery {
let create_report = |level: Level, error: Option<String>, msgs: Vec<String>| {
if let Some(reporter) = &self.client.inner.reporter {
let report = Report {
package: "rustypipe".to_owned(),
version: "0.1.0".to_owned(),
date: chrono::Local::now(),
info: Default::default(),
level,
operation: format!("{}({})", operation, id),
error,
@ -953,7 +931,7 @@ impl RustyPipeQuery {
deobf_data: deobf.map(Deobfuscator::get_data),
http_request: crate::report::HTTPRequest {
url: request_url,
method: method.to_string(),
method: "POST".to_string(),
req_header: request_headers
.iter()
.map(|(k, v)| {
@ -1030,11 +1008,10 @@ impl RustyPipeQuery {
ctype: ClientType,
operation: &str,
id: &str,
method: Method,
endpoint: &str,
body: &B,
) -> Result<M> {
self.execute_request_deobf::<R, M, B>(ctype, operation, id, method, endpoint, body, None)
self.execute_request_deobf::<R, M, B>(ctype, operation, id, endpoint, body, None)
.await
}
}

View file

@ -7,7 +7,6 @@ use anyhow::{anyhow, bail, Result};
use chrono::{Local, NaiveDateTime, NaiveTime, TimeZone};
use fancy_regex::Regex;
use once_cell::sync::Lazy;
use reqwest::Method;
use serde::Serialize;
use url::Url;
@ -98,7 +97,6 @@ impl RustyPipeQuery {
client_type,
"player",
video_id,
Method::POST,
"player",
&request_body,
Some(&deobf),
@ -175,7 +173,7 @@ impl MapResponse<VideoPlayer> for response::Player {
title: video_details.title,
description: video_details.short_description,
length: video_details.length_seconds,
thumbnails: video_details.thumbnail.into(),
thumbnail: video_details.thumbnail.into(),
channel: ChannelId {
id: video_details.channel_id,
name: video_details.author,
@ -439,7 +437,7 @@ fn map_audio_stream(
deobf: &Deobfuscator,
last_nsig: &mut [String; 2],
) -> MapResult<Option<AudioStream>> {
static LANG_PATTERN: Lazy<Regex> = Lazy::new(|| Regex::new(r#"^([a-z]{2})\."#).unwrap());
static LANG_PATTERN: Lazy<Regex> = Lazy::new(|| Regex::new(r#"^([a-z]{2,3})\."#).unwrap());
let (mtype, codecs) = some_or_bail!(
parse_mime(&f.mime_type),
@ -631,7 +629,7 @@ mod tests {
#[case::android(ClientType::Android)]
#[case::ios(ClientType::Ios)]
#[test_log::test(tokio::test)]
async fn t_get_player(#[case] client_type: ClientType) {
async fn get_player(#[case] client_type: ClientType) {
let rp = RustyPipe::builder().strict().build();
let player_data = rp.query().player("n4tK7LYFxI0", client_type).await.unwrap();
@ -647,7 +645,7 @@ mod tests {
));
}
assert_eq!(player_data.details.length, 259);
assert!(!player_data.details.thumbnails.is_empty());
assert!(!player_data.details.thumbnail.is_empty());
assert_eq!(player_data.details.channel.id, "UC_aEa8K-EOJ3D6gOs7HcyNg");
assert_eq!(player_data.details.channel.name, "NoCopyrightSounds");
assert!(player_data.details.view_count > 146818808);
@ -733,6 +731,18 @@ mod tests {
assert!(player_data.expires_in_seconds > 10000);
}
#[tokio::test]
async fn tmp() {
let rp = RustyPipe::builder().strict().build();
let player_data = rp
.query()
.player("tVWWp1PqDus", ClientType::Desktop)
.await
.unwrap();
dbg!(&player_data);
}
#[test]
fn t_cipher_to_url() {
let signature_cipher = "s=w%3DAe%3DA6aDNQLkViKS7LOm9QtxZJHKwb53riq9qEFw-ecBWJCAiA%3DcEg0tn3dty9jEHszfzh4Ud__bg9CEHVx4ix-7dKsIPAhIQRw8JQ0qOA&sp=sig&url=https://rr5---sn-h0jelnez.googlevideo.com/videoplayback%3Fexpire%3D1659376413%26ei%3Dvb7nYvH5BMK8gAfBj7ToBQ%26ip%3D2003%253Ade%253Aaf06%253A6300%253Ac750%253A1b77%253Ac74a%253A80e3%26id%3Do-AB_BABwrXZJN428ZwDxq5ScPn2AbcGODnRlTVhCQ3mj2%26itag%3D251%26source%3Dyoutube%26requiressl%3Dyes%26mh%3DhH%26mm%3D31%252C26%26mn%3Dsn-h0jelnez%252Csn-4g5ednsl%26ms%3Dau%252Conr%26mv%3Dm%26mvi%3D5%26pl%3D37%26initcwndbps%3D1588750%26spc%3DlT-Khi831z8dTejFIRCvCEwx_6romtM%26vprv%3D1%26mime%3Daudio%252Fwebm%26ns%3Db_Mq_qlTFcSGlG9RpwpM9xQH%26gir%3Dyes%26clen%3D3781277%26dur%3D229.301%26lmt%3D1655510291473933%26mt%3D1659354538%26fvip%3D5%26keepalive%3Dyes%26fexp%3D24001373%252C24007246%26c%3DWEB%26rbqsm%3Dfr%26txp%3D4532434%26n%3Dd2g6G2hVqWIXxedQ%26sparams%3Dexpire%252Cei%252Cip%252Cid%252Citag%252Csource%252Crequiressl%252Cspc%252Cvprv%252Cmime%252Cns%252Cgir%252Cclen%252Cdur%252Clmt%26lsparams%3Dmh%252Cmm%252Cmn%252Cms%252Cmv%252Cmvi%252Cpl%252Cinitcwndbps%26lsig%3DAG3C_xAwRQIgCKCGJ1iu4wlaGXy3jcJyU3inh9dr1FIfqYOZEG_MdmACIQCbungkQYFk7EhD6K2YvLaHFMjKOFWjw001_tLb0lPDtg%253D%253D";

View file

@ -1,7 +1,6 @@
use std::convert::TryFrom;
use anyhow::{anyhow, bail, Result};
use reqwest::Method;
use serde::Serialize;
use crate::{
@ -34,7 +33,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"playlist",
playlist_id,
Method::POST,
"browse",
&request_body,
)
@ -52,7 +50,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"get_playlist_continuation",
ctoken,
Method::POST,
"browse",
&request_body,
)

View file

@ -0,0 +1,81 @@
use chrono::{DateTime, Utc};
use serde::Deserialize;
use super::Thumbnail;
#[derive(Clone, Debug, Deserialize)]
pub struct ChannelRss {
#[serde(rename = "$unflatten=yt:channelId")]
pub channel_id: String,
#[serde(rename = "$unflatten=title")]
pub title: String,
#[serde(rename = "$unflatten=published")]
pub create_date: DateTime<Utc>,
pub entry: Vec<Entry>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Entry {
#[serde(rename = "$unflatten=yt:videoId")]
pub video_id: String,
#[serde(rename = "$unflatten=title")]
pub title: String,
#[serde(rename = "$unflatten=published")]
pub published: DateTime<Utc>,
#[serde(rename = "$unflatten=updated")]
pub updated: DateTime<Utc>,
#[serde(rename = "$unflatten=media:group")]
pub media_group: MediaGroup,
}
#[derive(Clone, Debug, Deserialize)]
pub struct MediaGroup {
#[serde(rename = "$unflatten=media:thumbnail")]
pub thumbnail: Thumbnail,
#[serde(rename = "$unflatten=media:description")]
pub description: String,
#[serde(rename = "$unflatten=media:community")]
pub community: Community,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Community {
#[serde(rename = "$unflatten=media:starRating")]
pub rating: Rating,
#[serde(rename = "$unflatten=media:statistics")]
pub statistics: Statistics,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Rating {
pub count: u32,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Statistics {
pub views: u64,
}
impl From<ChannelRss> for crate::model::ChannelRss {
fn from(feed: ChannelRss) -> Self {
Self {
id: feed.channel_id,
name: feed.title,
videos: feed
.entry
.into_iter()
.map(|item| crate::model::ChannelRssVideo {
id: item.video_id,
title: item.title,
description: item.media_group.description,
thumbnail: item.media_group.thumbnail.into(),
publish_date: item.published,
update_date: item.updated,
view_count: item.media_group.community.statistics.views,
like_count: item.media_group.community.rating.count,
})
.collect(),
create_date: feed.create_date,
}
}
}

View file

@ -14,6 +14,11 @@ pub use video_details::VideoComments;
pub use video_details::VideoDetails;
pub use video_details::VideoRecommendations;
#[cfg(feature = "rss")]
pub mod channel_rss;
#[cfg(feature = "rss")]
pub use channel_rss::ChannelRss;
use serde::Deserialize;
use serde_with::{json::JsonString, serde_as, DefaultOnError, VecSkipError};

File diff suppressed because one or more lines are too long

View file

@ -8,7 +8,7 @@ VideoPlayer(
title: "Inspiring Cinematic Uplifting (Creative Commons)",
description: Some("► Download Music: http://bit.ly/2QLufeh\nImportant to know! You can download this track for free through Patreon. You will pay only for new tracks! So join others and let\'s make next track together!\n\n► MORE MUSIC: Become my patron and get access to all our music from Patreon library. More Info here: http://bit.ly/2JJDFHb\n\n► Additional edit versions of this track you can download here: http://bit.ly/2WdRinT (5 versions)\n--------------------- \n\n►DESCRIPTION:\nInspiring Cinematic Uplifting Trailer Background - epic music for trailer video project with powerful drums, energetic orchestra and gentle piano melody. This motivational cinematic theme will work as perfect background for beautiful epic moments, landscapes, nature, drone video, motivational products and achievements.\n--------------------- \n\n► LICENSE:\n● If you need a license for your project, you can purchase it here: \nhttps://1.envato.market/ajicu (Audiojungle)\nhttps://bit.ly/3fWZZuI (Pond5)\n--------------------- \n\n► LISTEN ON:\n● Spotify - https://spoti.fi/2sHm3UH\n● Apple Music - https://apple.co/3qBjbUO\n--------------------- \n\n► SUBSCRIBE FOR MORE: \nPatreon: http://bit.ly/2JJDFHb\nYoutube: http://bit.ly/2AYBzfA\nFacebook: http://bit.ly/2T6dTx5\nInstagram: http://bit.ly/2BHJ8rB\nTwitter: http://bit.ly/2MwtOlT\nSoundCloud: http://bit.ly/2IwVVmt\nAudiojungle: https://1.envato.market/ajrsm\nPond5: https://bit.ly/2TLi1rW\n--------------------- \n►Photo by Vittorio Staffolani from Pexels\n--------------------- \n\nFAQ:\n\n► Can I use this music in my videos? \n● Sure! Just download this track and you are ready to use it! We only ask to credit us. \n-------------------- \n\n► What is \"Creative Commons\"? \nCreative Commons is a system that allows you to legally use “some rights reserved” music, movies, images, and other content — all for free. Licensees may copy, distribute, display and perform the work and make derivative works and remixes based on it only if they give the author or licensor the credits.\n-------------------- \n\n► Will I have any copyright issues with this track?\n● No, you should not have any copyright problems with this track!\n-------------------- \n\n► Is it necessary to become your patron?\n● No it\'s not necessary. But we recommend you to become our patron because you will get access to huge library of music. You will download only highest quality files. You will find additional edited versions of every track. You always be tuned with our news. You will find music not only from Roman Senyk but also from another talented authors.\n-------------------- \n\n► Why I received a copyright claim when I used this track?\n● Do not panic! This is very common situation. Content ID fingerprint system can mismatch our music. Just dispute the claim by showing our original track. Or send us the link to your video (romansenykmusic@gmail.com) and attach some screenshot with claim information. Claim will be released until 24 hours!\n\n► How to credit you in my video?\n● Just add to the description of your project information about Author, Name of Song and the link to our original track. Or copy and paste:\n\nMusic Info: Inspiring Cinematic Uplifting by RomanSenykMusic.\nMusic Link: https://youtu.be/pPvd8UxmSbQ\n--------------------- \n\n► If you have any questions, you can write in the comments for this video or by email: romansenykmusic@gmail.com\n--------------------- \n\nStay tuned! The best is yet to come! \nThanks For Listening!\nRoman Senyk"),
length: 163,
thumbnails: [
thumbnail: [
Thumbnail(
url: "https://i.ytimg.com/vi_webp/pPvd8UxmSbQ/default.webp",
width: 120,

View file

@ -8,7 +8,7 @@ VideoPlayer(
title: "Inspiring Cinematic Uplifting (Creative Commons)",
description: Some("► Download Music: http://bit.ly/2QLufeh\nImportant to know! You can download this track for free through Patreon. You will pay only for new tracks! So join others and let\'s make next track together!\n\n► MORE MUSIC: Become my patron and get access to all our music from Patreon library. More Info here: http://bit.ly/2JJDFHb\n\n► Additional edit versions of this track you can download here: http://bit.ly/2WdRinT (5 versions)\n--------------------- \n\n►DESCRIPTION:\nInspiring Cinematic Uplifting Trailer Background - epic music for trailer video project with powerful drums, energetic orchestra and gentle piano melody. This motivational cinematic theme will work as perfect background for beautiful epic moments, landscapes, nature, drone video, motivational products and achievements.\n--------------------- \n\n► LICENSE:\n● If you need a license for your project, you can purchase it here: \nhttps://1.envato.market/ajicu (Audiojungle)\nhttps://bit.ly/3fWZZuI (Pond5)\n--------------------- \n\n► LISTEN ON:\n● Spotify - https://spoti.fi/2sHm3UH\n● Apple Music - https://apple.co/3qBjbUO\n--------------------- \n\n► SUBSCRIBE FOR MORE: \nPatreon: http://bit.ly/2JJDFHb\nYoutube: http://bit.ly/2AYBzfA\nFacebook: http://bit.ly/2T6dTx5\nInstagram: http://bit.ly/2BHJ8rB\nTwitter: http://bit.ly/2MwtOlT\nSoundCloud: http://bit.ly/2IwVVmt\nAudiojungle: https://1.envato.market/ajrsm\nPond5: https://bit.ly/2TLi1rW\n--------------------- \n►Photo by Vittorio Staffolani from Pexels\n--------------------- \n\nFAQ:\n\n► Can I use this music in my videos? \n● Sure! Just download this track and you are ready to use it! We only ask to credit us. \n-------------------- \n\n► What is \"Creative Commons\"? \nCreative Commons is a system that allows you to legally use “some rights reserved” music, movies, images, and other content — all for free. Licensees may copy, distribute, display and perform the work and make derivative works and remixes based on it only if they give the author or licensor the credits.\n-------------------- \n\n► Will I have any copyright issues with this track?\n● No, you should not have any copyright problems with this track!\n-------------------- \n\n► Is it necessary to become your patron?\n● No it\'s not necessary. But we recommend you to become our patron because you will get access to huge library of music. You will download only highest quality files. You will find additional edited versions of every track. You always be tuned with our news. You will find music not only from Roman Senyk but also from another talented authors.\n-------------------- \n\n► Why I received a copyright claim when I used this track?\n● Do not panic! This is very common situation. Content ID fingerprint system can mismatch our music. Just dispute the claim by showing our original track. Or send us the link to your video (romansenykmusic@gmail.com) and attach some screenshot with claim information. Claim will be released until 24 hours!\n\n► How to credit you in my video?\n● Just add to the description of your project information about Author, Name of Song and the link to our original track. Or copy and paste:\n\nMusic Info: Inspiring Cinematic Uplifting by RomanSenykMusic.\nMusic Link: https://youtu.be/pPvd8UxmSbQ\n--------------------- \n\n► If you have any questions, you can write in the comments for this video or by email: romansenykmusic@gmail.com\n--------------------- \n\nStay tuned! The best is yet to come! \nThanks For Listening!\nRoman Senyk"),
length: 163,
thumbnails: [
thumbnail: [
Thumbnail(
url: "https://i.ytimg.com/vi/pPvd8UxmSbQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBSNHImLtGal2a95M5oyTT_uuTZlw",
width: 168,

View file

@ -8,7 +8,7 @@ VideoPlayer(
title: "Inspiring Cinematic Uplifting",
description: None,
length: 163,
thumbnails: [
thumbnail: [
Thumbnail(
url: "https://i.ytimg.com/vi/pPvd8UxmSbQ/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AOn4CLC-0nIQMyPuy8CtzqTMl6z1rmG_XQ",
width: 400,

View file

@ -8,7 +8,7 @@ VideoPlayer(
title: "Inspiring Cinematic Uplifting (Creative Commons)",
description: Some("► Download Music: http://bit.ly/2QLufeh\nImportant to know! You can download this track for free through Patreon. You will pay only for new tracks! So join others and let\'s make next track together!\n\n► MORE MUSIC: Become my patron and get access to all our music from Patreon library. More Info here: http://bit.ly/2JJDFHb\n\n► Additional edit versions of this track you can download here: http://bit.ly/2WdRinT (5 versions)\n--------------------- \n\n►DESCRIPTION:\nInspiring Cinematic Uplifting Trailer Background - epic music for trailer video project with powerful drums, energetic orchestra and gentle piano melody. This motivational cinematic theme will work as perfect background for beautiful epic moments, landscapes, nature, drone video, motivational products and achievements.\n--------------------- \n\n► LICENSE:\n● If you need a license for your project, you can purchase it here: \nhttps://1.envato.market/ajicu (Audiojungle)\nhttps://bit.ly/3fWZZuI (Pond5)\n--------------------- \n\n► LISTEN ON:\n● Spotify - https://spoti.fi/2sHm3UH\n● Apple Music - https://apple.co/3qBjbUO\n--------------------- \n\n► SUBSCRIBE FOR MORE: \nPatreon: http://bit.ly/2JJDFHb\nYoutube: http://bit.ly/2AYBzfA\nFacebook: http://bit.ly/2T6dTx5\nInstagram: http://bit.ly/2BHJ8rB\nTwitter: http://bit.ly/2MwtOlT\nSoundCloud: http://bit.ly/2IwVVmt\nAudiojungle: https://1.envato.market/ajrsm\nPond5: https://bit.ly/2TLi1rW\n--------------------- \n►Photo by Vittorio Staffolani from Pexels\n--------------------- \n\nFAQ:\n\n► Can I use this music in my videos? \n● Sure! Just download this track and you are ready to use it! We only ask to credit us. \n-------------------- \n\n► What is \"Creative Commons\"? \nCreative Commons is a system that allows you to legally use “some rights reserved” music, movies, images, and other content — all for free. Licensees may copy, distribute, display and perform the work and make derivative works and remixes based on it only if they give the author or licensor the credits.\n-------------------- \n\n► Will I have any copyright issues with this track?\n● No, you should not have any copyright problems with this track!\n-------------------- \n\n► Is it necessary to become your patron?\n● No it\'s not necessary. But we recommend you to become our patron because you will get access to huge library of music. You will download only highest quality files. You will find additional edited versions of every track. You always be tuned with our news. You will find music not only from Roman Senyk but also from another talented authors.\n-------------------- \n\n► Why I received a copyright claim when I used this track?\n● Do not panic! This is very common situation. Content ID fingerprint system can mismatch our music. Just dispute the claim by showing our original track. Or send us the link to your video (romansenykmusic@gmail.com) and attach some screenshot with claim information. Claim will be released until 24 hours!\n\n► How to credit you in my video?\n● Just add to the description of your project information about Author, Name of Song and the link to our original track. Or copy and paste:\n\nMusic Info: Inspiring Cinematic Uplifting by RomanSenykMusic.\nMusic Link: https://youtu.be/pPvd8UxmSbQ\n--------------------- \n\n► If you have any questions, you can write in the comments for this video or by email: romansenykmusic@gmail.com\n--------------------- \n\nStay tuned! The best is yet to come! \nThanks For Listening!\nRoman Senyk"),
length: 163,
thumbnails: [
thumbnail: [
Thumbnail(
url: "https://i.ytimg.com/vi/pPvd8UxmSbQ/mqdefault.jpg",
width: 320,

View file

@ -8,7 +8,7 @@ VideoPlayer(
title: "Inspiring Cinematic Uplifting (Creative Commons)",
description: Some("► Download Music: http://bit.ly/2QLufeh\nImportant to know! You can download this track for free through Patreon. You will pay only for new tracks! So join others and let\'s make next track together!\n\n► MORE MUSIC: Become my patron and get access to all our music from Patreon library. More Info here: http://bit.ly/2JJDFHb\n\n► Additional edit versions of this track you can download here: http://bit.ly/2WdRinT (5 versions)\n--------------------- \n\n►DESCRIPTION:\nInspiring Cinematic Uplifting Trailer Background - epic music for trailer video project with powerful drums, energetic orchestra and gentle piano melody. This motivational cinematic theme will work as perfect background for beautiful epic moments, landscapes, nature, drone video, motivational products and achievements.\n--------------------- \n\n► LICENSE:\n● If you need a license for your project, you can purchase it here: \nhttps://1.envato.market/ajicu (Audiojungle)\nhttps://bit.ly/3fWZZuI (Pond5)\n--------------------- \n\n► LISTEN ON:\n● Spotify - https://spoti.fi/2sHm3UH\n● Apple Music - https://apple.co/3qBjbUO\n--------------------- \n\n► SUBSCRIBE FOR MORE: \nPatreon: http://bit.ly/2JJDFHb\nYoutube: http://bit.ly/2AYBzfA\nFacebook: http://bit.ly/2T6dTx5\nInstagram: http://bit.ly/2BHJ8rB\nTwitter: http://bit.ly/2MwtOlT\nSoundCloud: http://bit.ly/2IwVVmt\nAudiojungle: https://1.envato.market/ajrsm\nPond5: https://bit.ly/2TLi1rW\n--------------------- \n►Photo by Vittorio Staffolani from Pexels\n--------------------- \n\nFAQ:\n\n► Can I use this music in my videos? \n● Sure! Just download this track and you are ready to use it! We only ask to credit us. \n-------------------- \n\n► What is \"Creative Commons\"? \nCreative Commons is a system that allows you to legally use “some rights reserved” music, movies, images, and other content — all for free. Licensees may copy, distribute, display and perform the work and make derivative works and remixes based on it only if they give the author or licensor the credits.\n-------------------- \n\n► Will I have any copyright issues with this track?\n● No, you should not have any copyright problems with this track!\n-------------------- \n\n► Is it necessary to become your patron?\n● No it\'s not necessary. But we recommend you to become our patron because you will get access to huge library of music. You will download only highest quality files. You will find additional edited versions of every track. You always be tuned with our news. You will find music not only from Roman Senyk but also from another talented authors.\n-------------------- \n\n► Why I received a copyright claim when I used this track?\n● Do not panic! This is very common situation. Content ID fingerprint system can mismatch our music. Just dispute the claim by showing our original track. Or send us the link to your video (romansenykmusic@gmail.com) and attach some screenshot with claim information. Claim will be released until 24 hours!\n\n► How to credit you in my video?\n● Just add to the description of your project information about Author, Name of Song and the link to our original track. Or copy and paste:\n\nMusic Info: Inspiring Cinematic Uplifting by RomanSenykMusic.\nMusic Link: https://youtu.be/pPvd8UxmSbQ\n--------------------- \n\n► If you have any questions, you can write in the comments for this video or by email: romansenykmusic@gmail.com\n--------------------- \n\nStay tuned! The best is yet to come! \nThanks For Listening!\nRoman Senyk"),
length: 163,
thumbnails: [
thumbnail: [
Thumbnail(
url: "https://i.ytimg.com/vi/pPvd8UxmSbQ/default.jpg",
width: 120,

View file

@ -1,7 +1,6 @@
use std::convert::TryFrom;
use anyhow::{anyhow, bail, Result};
use reqwest::Method;
use serde::Serialize;
use crate::{
@ -44,7 +43,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"video_details",
video_id,
Method::POST,
"next",
&request_body,
)
@ -62,7 +60,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"video_recommendations",
ctoken,
Method::POST,
"next",
&request_body,
)
@ -80,7 +77,6 @@ impl RustyPipeQuery {
ClientType::Desktop,
"video_comments",
ctoken,
Method::POST,
"next",
&request_body,
)

View file

@ -7,7 +7,7 @@ use crate::{
/// The dictionary contains the information required to parse dates and numbers
/// in all supported languages.
pub struct Entry {
pub(crate) struct Entry {
/// Should the language be parsed by character instead of by word?
/// (e.g. Chinese/Japanese)
pub by_char: bool,
@ -43,7 +43,7 @@ pub struct Entry {
}
#[rustfmt::skip]
pub fn entry(lang: Language) -> Entry {
pub(crate) fn entry(lang: Language) -> Entry {
match lang {
Language::Af => Entry {
by_char: false,

View file

@ -1,3 +1,5 @@
//! YouTube audio/video downloader
use std::{cmp::Ordering, ffi::OsString, ops::Range, path::PathBuf};
use anyhow::{anyhow, bail, Result};

View file

@ -1,3 +1,8 @@
//! # RustyPipe
//!
//! Client for the public YouTube / YouTube Music API (Innertube),
//! inspired by [NewPipe](https://github.com/TeamNewPipe/NewPipeExtractor).
#![allow(dead_code)]
#![warn(clippy::todo)]

View file

@ -1,3 +1,5 @@
//! YouTube API request and response models
pub mod locale;
mod ordering;
mod paginator;
@ -11,85 +13,148 @@ pub use param::ChannelOrder;
use std::ops::Range;
use chrono::{DateTime, Local};
use chrono::{DateTime, Local, Utc};
use serde::{Deserialize, Serialize};
use self::richtext::RichText;
/*
#COMMON
*/
/// Video thumbnail or other image
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Thumbnail {
pub url: String,
pub width: u32,
pub height: u32,
}
/*
#PLAYER
*/
pub trait FileFormat {
/// Get the file extension (".xyz") of the file format
fn extension(&self) -> &str;
}
/// Video player data
#[derive(Clone, Debug, Serialize, Deserialize)]
#[non_exhaustive]
pub struct VideoPlayer {
/// Video metadata
pub details: VideoPlayerDetails,
/// List of streams containing both audio and video
pub video_streams: Vec<VideoStream>,
/// List of streams containing video only
pub video_only_streams: Vec<VideoStream>,
/// List of streams containing audio only
pub audio_streams: Vec<AudioStream>,
/// List of subtitles
pub subtitles: Vec<Subtitle>,
/// Lifetime of the stream URLs in seconds
pub expires_in_seconds: u32,
}
/// Video metadata from the player
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct VideoPlayerDetails {
/// Unique YouTube video ID
pub id: String,
/// Video title
pub title: String,
/// Video description in plaintext format
pub description: Option<String>,
/// Video length in seconds
pub length: u32,
pub thumbnails: Vec<Thumbnail>,
/// Video thumbnail
pub thumbnail: Vec<Thumbnail>,
/// Channel of the video
pub channel: ChannelId,
/// Video publishing date. Start date in case of a livestream.
pub publish_date: Option<DateTime<Local>>,
/// Number of views / current viewers in case of a livestream.
pub view_count: u64,
/// List of words that describe the topic of the video
pub keywords: Vec<String>,
pub category: Option<String>,
/// True if the video is/was livestreamed
pub is_live_content: bool,
/// True if the video is not age-restricted
pub is_family_safe: Option<bool>,
}
/// Video stream
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct VideoStream {
/// Video stream URL
pub url: String,
/// YouTube stream format identifier
pub itag: u32,
pub bitrate: u32,
pub average_bitrate: u32,
/// Video file size in bytes
pub size: Option<u64>,
pub index_range: Option<Range<u32>>,
pub init_range: Option<Range<u32>>,
/// Video width in pixels
pub width: u32,
/// Video height in pixels
pub height: u32,
/// Video frames per second
pub fps: u8,
/// Quality text (e.g. "1080p60")
pub quality: String,
/// True if the video is HDR
pub hdr: bool,
/// MIME file type
pub mime: String,
/// Video file format
pub format: VideoFormat,
/// Video codec
pub codec: VideoCodec,
/// True if the deobfuscation of the nsig url parameter failed
/// and the stream will be throttled
pub throttled: bool,
}
/// Audio stream
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct AudioStream {
/// Audio stream URL
pub url: String,
/// YouTube stream format identifier
pub itag: u32,
pub bitrate: u32,
pub average_bitrate: u32,
/// Audio file size in bytes
pub size: u64,
pub index_range: Option<Range<u32>>,
pub init_range: Option<Range<u32>>,
/// MIME file type
pub mime: String,
/// Audio file format
pub format: AudioFormat,
/// Audio codec
pub codec: AudioCodec,
/// True if the deobfuscation of the nsig url parameter failed
/// and the stream will be throttled
pub throttled: bool,
/// Audio track information
///
/// Videos can have multiple audio tracks (different languages).
/// In this case, this object shows to which track the stream belongs to.
///
/// This is None if the video contains only 1 audio track.
pub track: Option<AudioTrack>,
}
/// Video codec
#[derive(
Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
@ -108,6 +173,7 @@ pub enum VideoCodec {
Av01,
}
/// Audio codec
#[derive(
Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
@ -122,23 +188,36 @@ pub enum AudioCodec {
Opus,
}
/// The video file format
/// Video file type
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum VideoFormat {
/// `*.3gp`
#[serde(rename = "3gp")]
ThreeGp,
/// `*.mp4`
Mp4,
/// `*.webm`
Webm,
}
/// Audio track information
///
/// Videos can have multiple audio tracks (different languages).
/// In this case, this object shows to which track the stream belongs to.
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct AudioTrack {
/// Track ID (e.g. `en.0`)
pub id: String,
/// 2/3 letter language code (e.g. `en`)
///
/// Extracted from the track ID
pub lang: Option<String>,
/// Language name (e.g. "English")
pub lang_name: String,
/// True if this is the default audio track
pub is_default: bool,
}
@ -152,11 +231,14 @@ impl FileFormat for VideoFormat {
}
}
/// Audio file type
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum AudioFormat {
/// `*.m4a`
M4a,
/// `*.webm`
Webm,
}
@ -169,20 +251,128 @@ impl FileFormat for AudioFormat {
}
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Thumbnail {
pub url: String,
pub width: u32,
pub height: u32,
}
/// YouTube provides subtitles in different formats.
///
/// srv1 (XML) is the default format, to request a different format you have
/// to append `&fmt=<Format>` to the URL.
///
/// # Subtitle formats
///
/// ### `srv1` (default)
///
/// ```xml
/// <?xml version="1.0" encoding="utf-8"?>
/// <transcript>
/// <text start="0.12" dur="1.59">- [Mr Beast] I built two massive circles</text>
/// <text start="1.71" dur="3.39">and put 100 boys in one
/// and 100 girls in the other</text>
/// </transcript>
/// ```
///
/// ### `srv2`
///
/// ```xml
/// <?xml version="1.0" encoding="utf-8"?>
/// <timedtext>
/// <text t="120" d="1590">- [Mr Beast] I built two massive circles</text>
/// <text t="1710" d="3390">and put 100 boys in one
/// and 100 girls in the other</text>
/// </timedtext>
/// ```
///
/// ### `srv3`
///
/// ```xml
/// <?xml version="1.0" encoding="utf-8"?>
/// <timedtext format="3">
/// <body>
/// <p t="120" d="1590">- [Mr Beast] I built two massive circles</p>
/// <p t="1710" d="3390">and put 100 boys in one
/// and 100 girls in the other</p>
/// </body>
/// </timedtext>
/// ```
///
/// ### `json3`
///
/// ```json
/// {
/// "wireMagic": "pb3",
/// "pens": [{}],
/// "wsWinStyles": [{}],
/// "wpWinPositions": [{}],
/// "events": [
/// {
/// "tStartMs": 120,
/// "dDurationMs": 1590,
/// "segs": [
/// {
/// "utf8": "- [Mr Beast] I built two massive circles"
/// }
/// ]
/// },
/// {
/// "tStartMs": 1710,
/// "dDurationMs": 3390,
/// "segs": [
/// {
/// "utf8": "and put 100 boys in one\nand 100 girls in the other"
/// }
/// ]
/// }
/// ]
/// }
/// ```
///
/// ### Timed Text Markup Language (`ttml`)
///
/// ```xml
/// <?xml version="1.0" encoding="utf-8" ?>
/// <tt xml:lang="en-US" xmlns="http://www.w3.org/ns/ttml" xmlns:ttm="http://www.w3.org/ns/ttml#metadata" xmlns:tts="http://www.w3.org/ns/ttml#styling" xmlns:ttp="http://www.w3.org/ns/ttml#parameter" ttp:profile="http://www.w3.org/TR/profile/sdp-us" >
/// <head>
/// <styling>
/// <style xml:id="s1" tts:textAlign="center" tts:extent="90% 90%" tts:origin="5% 5%" tts:displayAlign="after"/>
/// <style xml:id="s2" tts:fontSize=".72c" tts:backgroundColor="black" tts:color="white"/>
/// </styling>
/// <layout>
/// <region xml:id="r1" style="s1"/>
/// </layout>
/// </head>
/// <body region="r1">
/// <div>
/// <p begin="00:00:00.120" end="00:00:01.710" style="s2">- [Mr Beast] I built two massive circles</p>
/// <p begin="00:00:01.710" end="00:00:05.100" style="s2">and put 100 boys in one<br />and 100 girls in the other</p>
/// </div>
/// </body>
/// </tt>
/// ```
///
/// ### WebVTT (`vtt`)
///
/// ```txt
/// WEBVTT
/// Kind: captions
/// Language: en-US
///
/// 00:00:00.120 --> 00:00:01.710
/// - [Mr Beast] I built two massive circles
///
/// 00:00:01.710 --> 00:00:05.100
/// and put 100 boys in one
/// and 100 girls in the other
/// ```
///
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Subtitle {
/// URL of the subtitle file
pub url: String,
/// Subtitle language code (e.g. "en")
pub lang: String,
/// Subtitle language name (e.g. "English")
pub lang_name: String,
/// True if the subtitle was automatically generated
/// by YouTube's speech recognition
pub auto_generated: bool,
}
@ -190,34 +380,53 @@ pub struct Subtitle {
#PLAYLIST
*/
/// YouTube playlist
#[derive(Clone, Debug, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Playlist {
/// Unique YouTube playlist ID
pub id: String,
/// Playlist name
pub name: String,
/// Playlist videos
pub videos: Paginator<PlaylistVideo>,
/// Number of videos in the playlist
pub video_count: u32,
/// Playlist thumbnail
pub thumbnail: Vec<Thumbnail>,
/// Playlist description in plaintext format
pub description: Option<String>,
/// Channel of the playlist
pub channel: Option<ChannelId>,
/// Last update date
pub last_update: Option<DateTime<Local>>,
/// Textual last update date
pub last_update_txt: Option<String>,
}
/// YouTube video extracted from a playlist
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct PlaylistVideo {
/// Unique YouTube video ID
pub id: String,
/// Video title
pub title: String,
/// Video length in seconds
pub length: u32,
/// Video thumbnail
pub thumbnail: Vec<Thumbnail>,
/// Channel of the video
pub channel: ChannelId,
}
/// Channel identifier
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelId {
/// Unique YouTube channel ID
pub id: String,
/// Channel name
pub name: String,
}
@ -225,6 +434,8 @@ pub struct ChannelId {
#VIDEO DETAILS
*/
/// VideoDetails contains additional information that YouTube shows next
/// to the video player.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct VideoDetails {
@ -232,7 +443,7 @@ pub struct VideoDetails {
pub id: String,
/// Video title
pub title: String,
/// Video description
/// Video description in rich text format
pub description: RichText,
/// Channel of the video
pub channel: ChannelTag,
@ -265,11 +476,17 @@ pub struct VideoDetails {
/// Note: Recommendations are not available for age-restricted videos
pub recommended: Paginator<RecommendedVideo>,
/// Paginator to fetch comments (most liked first)
///
/// Is initially empty.
pub top_comments: Paginator<Comment>,
/// Paginator to fetch comments (latest first)
///
/// Is initially empty.
pub latest_comments: Paginator<Comment>,
}
/// Chapter of a video
///
/// Videos can consist of different chapters, which YouTube shows
/// on the seek bar and below the description text.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
@ -287,6 +504,7 @@ pub struct Chapter {
@RECOMMENDATIONS
*/
/// YouTube video fetched from the recommendations next to a video
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct RecommendedVideo {
@ -318,6 +536,7 @@ pub struct RecommendedVideo {
pub is_live: bool,
}
/// Channel information attached to a video or comment
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelTag {
@ -341,6 +560,7 @@ pub struct ChannelTag {
@COMMENTS
*/
/// Verification status of a channel
#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
@ -355,11 +575,14 @@ pub enum Verification {
}
impl Verification {
/// Returns true if the verification status is not None
/// (either Verified or Artist).
pub fn verified(&self) -> bool {
self != &Self::None
}
}
/// Comment under a YouTube video
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Comment {
@ -395,6 +618,10 @@ pub struct Comment {
#CHANNEL
*/
/// YouTube channel object.
///
/// Contains channel metadata as well as additional content
/// depending on which channel tab is fetched.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Channel<T> {
@ -426,6 +653,7 @@ pub struct Channel<T> {
pub content: T,
}
/// Video fetched from a YouTube channel
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelVideo {
@ -457,6 +685,7 @@ pub struct ChannelVideo {
pub is_short: bool,
}
/// Playlist fetched from a YouTube channel
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelPlaylist {
@ -470,6 +699,7 @@ pub struct ChannelPlaylist {
pub video_count: Option<u32>,
}
/// Additional channel metadata fetched from the "About" tab.
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelInfo {
@ -480,3 +710,41 @@ pub struct ChannelInfo {
/// Links to other websites or social media profiles
pub links: Vec<(String, String)>,
}
/// YouTube channel RSS feed
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelRss {
/// Unique YouTube Channel-ID (e.g. `UC-lHJZR3Gqxm24_Vd_AJ5Yw`)
pub id: String,
/// Channel name
pub name: String,
/// List of the latest channel videos
pub videos: Vec<ChannelRssVideo>,
/// Channel creation date (second-accurate).
pub create_date: DateTime<Utc>,
}
/// YouTube video fetched from a channel's RSS feed
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct ChannelRssVideo {
/// Unique YouTube video ID
pub id: String,
/// Video title
pub title: String,
/// Video description in plaintext format
pub description: String,
/// Video thumbnail
pub thumbnail: Thumbnail,
/// Video publishing date (second-accurate).
pub publish_date: DateTime<Utc>,
/// Date and time when the RSS feed entry was last updated.
pub update_date: DateTime<Utc>,
/// View count
pub view_count: u64,
/// Number of likes
///
/// Zero if the like count was hidden by the creator.
pub like_count: u32,
}

View file

@ -2,6 +2,8 @@ use std::convert::TryInto;
use serde::{Deserialize, Serialize};
/// Wrapper around progressively fetched items
///
/// The paginator is a wrapper around a list of items that are fetched
/// in pages from the YouTube API (e.g. playlist items,
/// video recommendations or comments).

View file

@ -1,3 +1,5 @@
//! Error reporting
use std::{
collections::BTreeMap,
fs::File,
@ -12,13 +14,9 @@ use serde::{Deserialize, Serialize};
use crate::deobfuscate::DeobfData;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Report {
/// Rust package name (`rustypipe`)
pub package: String,
/// Package version (`0.1.0`)
pub version: String,
/// Date/Time when the event occurred
pub date: DateTime<Local>,
pub info: Info,
/// Report level
pub level: Level,
/// RustyPipe operation (e.g. `get_player`)
@ -35,6 +33,18 @@ pub struct Report {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct Info {
/// Rust package name (`rustypipe`)
pub package: String,
/// Package version (`0.1.0`)
pub version: String,
/// Date/Time when the event occurred
pub date: DateTime<Local>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub struct HTTPRequest {
/// Request URL
pub url: String,
@ -61,6 +71,16 @@ pub enum Level {
ERR,
}
impl Default for Info {
fn default() -> Self {
Self {
package: "rustypipe".to_owned(),
version: "0.1.0".to_owned(),
date: chrono::Local::now(),
}
}
}
pub trait Reporter {
fn report(&self, report: &Report);
}
@ -103,7 +123,11 @@ fn get_report_path(root: &Path, report: &Report, ext: &str) -> Result<PathBuf> {
std::fs::create_dir_all(root)?;
}
let filename_prefix = format!("{}_{:?}", report.date.format("%F_%H-%M-%S"), report.level);
let filename_prefix = format!(
"{}_{:?}",
report.info.date.format("%F_%H-%M-%S"),
report.level
);
let mut report_path = root.to_path_buf();
report_path.push(format!("{}.{}", filename_prefix, ext));

View file

@ -1,3 +1,20 @@
//! Parser for textual dates and times.
//!
//! The YouTube API mostly outputs pre-formatted dates and times
//! like "18 minutes ago" or "Jul 2, 2014" instead of standardized
//! machine-readable date and time formats.
//!
//! Additionally these formats are localized, meaning they depend
//! on the configured language.
//!
//! This module can parse these dates using an embedded dictionary which
//! contains date/time unit tokens for all supported languages.
//!
//! Note that this module is public so it can be tested from outside
//! the crate, which is important for including new languages, too.
//!
//! It is not intended to be used to parse textual dates that are not from YouTube.
use std::ops::Mul;
use chrono::{DateTime, Duration, Local, NaiveDate, NaiveDateTime, NaiveTime, TimeZone};
@ -5,18 +22,21 @@ use serde::{Deserialize, Serialize};
use crate::{dictionary, model::Language, util};
/// Parsed TimeAgo string, contains amount and time unit.
///
/// Example: "14 hours ago" => `TimeAgo {n: 14, unit: TimeUnit::Hour}`
#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct TimeAgo {
pub n: u8,
pub unit: TimeUnit,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub struct TaToken {
pub n: u8,
pub unit: Option<TimeUnit>,
}
/// Parsed date string that may be relative or absolute.
///
/// Examples:
///
/// - "Jul 2, 2014" => `ParsedDate::Absolute("2014-07-02")`
/// - "2 months ago" => `ParsedDate::Relative(TimeAgo {n: 2, unit: TimeUnit::Month})`
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum ParsedDate {
Absolute(NaiveDate),
@ -35,7 +55,14 @@ pub enum TimeUnit {
Year,
}
pub enum DateCmp {
/// Value of a parsed TimeAgo token, used in the dictionary
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub(crate) struct TaToken {
pub n: u8,
pub unit: Option<TimeUnit>,
}
pub(crate) enum DateCmp {
Y,
M,
D,
@ -135,6 +162,9 @@ fn parse_textual_month(entry: &dictionary::Entry, filtered_str: &str) -> Option<
}
}
/// Parse a TimeAgo string (e.g. "29 minutes ago") into a TimeAgo object.
///
/// Returns None if the date could not be parsed.
pub fn parse_timeago(lang: Language, textual_date: &str) -> Option<TimeAgo> {
let entry = dictionary::entry(lang);
let filtered_str = filter_str(textual_date);
@ -144,6 +174,9 @@ pub fn parse_timeago(lang: Language, textual_date: &str) -> Option<TimeAgo> {
parse_ta_token(&entry, false, &filtered_str).map(|ta| ta * qu)
}
/// Parse a TimeAgo string (e.g. "29 minutes ago") into a Chrono DateTime object.
///
/// Returns None if the date could not be parsed.
pub fn parse_timeago_to_dt(lang: Language, textual_date: &str) -> Option<DateTime<Local>> {
parse_timeago(lang, textual_date).map(|ta| ta.into())
}
@ -160,6 +193,9 @@ pub(crate) fn parse_timeago_or_warn(
res
}
/// Parse a textual date (e.g. "29 minutes ago" or "Jul 2, 2014") into a ParsedDate object.
///
/// Returns None if the date could not be parsed.
pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option<ParsedDate> {
let entry = dictionary::entry(lang);
let filtered_str = filter_str(textual_date);
@ -206,6 +242,9 @@ pub fn parse_textual_date(lang: Language, textual_date: &str) -> Option<ParsedDa
}
}
/// Parse a textual date (e.g. "29 minutes ago" or "Jul 2, 2014") into a Chrono DateTime object.
///
/// Returns None if the date could not be parsed.
pub fn parse_textual_date_to_dt(lang: Language, textual_date: &str) -> Option<DateTime<Local>> {
parse_textual_date(lang, textual_date).map(|ta| ta.into())
}

View file

@ -0,0 +1,988 @@
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:yt="http://www.youtube.com/xml/schemas/2015" xmlns:media="http://search.yahoo.com/mrss/" xmlns="http://www.w3.org/2005/Atom">
<link rel="self" href="http://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA"/>
<id>yt:channel:UCHnyfMqiRRG1u-2MsSQLbXA</id>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>Veritasium</title>
<link rel="alternate" href="https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2010-07-21T07:18:02+00:00</published>
<entry>
<id>yt:video:daaDuC1kbds</id>
<yt:videoId>daaDuC1kbds</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>World's Highest Jumping Robot</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=daaDuC1kbds"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-08-31T13:00:16+00:00</published>
<updated>2022-09-13T15:21:37+00:00</updated>
<media:group>
<media:title>World's Highest Jumping Robot</media:title>
<media:content url="https://www.youtube.com/v/daaDuC1kbds?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i1.ytimg.com/vi/daaDuC1kbds/hqdefault.jpg" width="480" height="360"/>
<media:description>This tiny robot can jump higher than anything else in the world. This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Huge thanks to Dr. Elliot Hawkes and the rest of the group - Charles Xiao, Chris Keeley, Dr. Morgan Pope, and Dr. Günter Niemeyer - for having us at UCSB and showing us their high-flying jumper. This work was partially supported by an Early Career Faculty Grant from NASAs Space Technology Research Grants Program.
▀▀▀
References:
Hawkes, E.W., Xiao, C., Peloquin, R., Keeley, C., Begley, M.R., Pope, M.T., &amp; Niemeyer, G. (2022). Engineered jumpers overcome biological limits via work multiplication. Nature, 604, 657-661. https://rdcu.be/cMePc
https://ve42.co/Hawkes2022
Fernandez, S. (2022). Hitting New Heights. The Current, UC Santa Barbara. https://ve42.co/Fernandez2022
Bushwick, S. (2022). Record-Breaking Jumping Robot Can Leap a 10-Story Building. Engineering, Scientific American. https://ve42.co/Bushwick2022
Mack, E. (2022). This Robot Can Leap Nine Stories in One Jump, Will Go Even Higher on Moon. Science, CNET. https://ve42.co/Mack2022
Ashby, M. (2020). Materials Selection in Mechanical Design (4th edition). Elsevier.
Jumping robot leaps to record heights. Nature Video - https://ve42.co/NatureJumper
MultiMo-Bat Robot - https://ve42.co/MultiMoBat
Galago Jump - https://ve42.co/GalagoJump
Slingshot Spider - https://ve42.co/SlingshotSpider
▀▀▀
Special thanks to Patreon supporters: RayJ Johnson, Brian Busbee, Jerome Barakos M.D., Amadeo Bee, TTST, Balkrishna Heroor, Chris LaClair, John H. Austin, Jr., OnlineBookClub.org, Matthew Gonzalez, Eric Sexton, john kiehl, Nathan Lanza, Diffbot, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Robert Blum, Sunil Nagaraj, Richard Sundvall, Lee Redden, Stephen Wilcox, Marinus Kuivenhoven, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Emily Zhang and Derek Muller
Filmed by Derek Muller and Trenton Oliver
Animation by Mike Radjabov and Ivy Tello
Edited by Trenton Oliver
Additional video/photos supplied by Pond5 and Getty Images
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="146208" average="5.00" min="1" max="5"/>
<media:statistics views="6842183"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:5eW6Eagr9XA</id>
<yt:videoId>5eW6Eagr9XA</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The 4 things it takes to be an expert</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=5eW6Eagr9XA"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-08-02T16:51:13+00:00</published>
<updated>2022-08-13T08:54:40+00:00</updated>
<media:group>
<media:title>The 4 things it takes to be an expert</media:title>
<media:content url="https://www.youtube.com/v/5eW6Eagr9XA?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/5eW6Eagr9XA/hqdefault.jpg" width="480" height="360"/>
<media:description>Which experts have real expertise? This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Thanks to https://www.chess24.com/ and Chessable for the clip of Magnus.
▀▀▀
Chase, W. G., &amp; Simon, H. A. (1973). Perception in chess. Cognitive psychology, 4(1), 55-81. https://ve42.co/chess1
Calderwood, R., Klein, G. A., &amp; Crandall, B. W. (1988). Time pressure, skill, and move quality in chess. The American Journal of Psychology, 481-493. https://ve42.co/chess2
Hogarth, R. M., Lejarraga, T., &amp; Soyer, E. (2015). The two settings of kind and wicked learning environments. Current Directions in Psychological Science, 24(5), 379-385. https://ve42.co/Hogarth
Ægisdóttir, S., White, M. J., Spengler, P. M., Maugherman, A. S., Anderson, L. A., Cook, R. S., ... &amp; Rush, J. D. (2006). The meta-analysis of clinical judgment project: Fifty-six years of accumulated research on clinical versus statistical prediction. The Counseling Psychologist, 34(3), 341-382. https://ve42.co/anderson1
Ericsson, K. A. (2015). Acquisition and maintenance of medical expertise: a perspective from the expert-performance approach with deliberate practice. Academic Medicine, 90(11), 1471-1486. https://ve42.co/anderson2
Goldberg, S. B., Rousmaniere, T., Miller, S. D., Whipple, J., Nielsen, S. L., Hoyt, W. T., &amp; Wampold, B. E. (2016). Do psychotherapists improve with time and experience? A longitudinal analysis of outcomes in a clinical setting. Journal of Counseling Psychology, 63(1), 1. https://ve42.co/goldberg1
Ericsson, K. A., Krampe, R. T., &amp; Tesch-Römer, C. (1993). The role of deliberate practice in the acquisition of expert performance. Psychological Review, 100(3), 363. https://ve42.co/anderson3
Egan, D. E., &amp; Schwartz, B. J. (1979). Chunking in recall of symbolic drawings. Memory &amp; Cognition, 7(2), 149-158. https://ve42.co/chunking1
Tetlock, P. E. (2017). Expert political judgment. In Expert Political Judgment. Princeton University Press. https://ve42.co/Tetlock
Melton, R. S. (1952). A comparison of clinical and actuarial methods of prediction with an assessment of the relative accuracy of different clinicians. Unpublished Ph.D. thesis, University of Minnesota.
Meehl, E. P. (1954). Clinical versus Statistical Prediction: A Theoretical Analysis and a Review of the Evidence. University of Minnesota Press. https://ve42.co/Meehl1954
Kahneman, D. (2011). Thinking, fast and slow. Farrar, Straus and Giroux. https://ve42.co/Kahneman
▀▀▀
Special thanks to Patreon supporters: RayJ Johnson, Brian Busbee, Jerome Barakos M.D., Amadeo Bee, Julian Lee, Inconcision, TTST, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Matthew Gonzalez, Eric Sexton, john kiehl, Diffbot, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Timothy OBrien, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller and Petr Lebedev
Animation by Ivy Tello and Fabio Albertelli
Filmed by Derek Muller and Raquel Nuno
Additional video/photos supplied by Getty Images
Music from Epidemic Sound (https://ve42.co/music)
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="348196" average="5.00" min="1" max="5"/>
<media:statistics views="6386672"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:EvknN89JoWo</id>
<yt:videoId>EvknN89JoWo</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Man Who Killed Millions and Saved Billions</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=EvknN89JoWo"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-07-22T17:03:09+00:00</published>
<updated>2022-09-08T20:14:32+00:00</updated>
<media:group>
<media:title>The Man Who Killed Millions and Saved Billions</media:title>
<media:content url="https://www.youtube.com/v/EvknN89JoWo?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/EvknN89JoWo/hqdefault.jpg" width="480" height="360"/>
<media:description>Fritz Haber is the scientist who arguably most transformed the world. Part of this video is sponsored by Wren. Offset your carbon footprint on Wren: https://www.wren.co/start/veritasium1. For the first 100 people who sign up, I will personally pay for the first month of your subscription!
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
A huge thanks to Dan Charles for writing a fantastic biography of Fritz Haber, for taking the time to talk to us about it, and providing valuable feedback. This video would not be what it is without his contributions. http://site.danielcharles.us https://ve42.co/Charles
Thanks to Tom de Prinse from Explosions and Fire for helping us with the chemistry of explosives. If you like explosions and/or fire, you will love his channel. https://www.youtube.com/c/ExplosionsFire2
Thanks to Michael Kuiper of CSIRO for the animation of the composition of air - https://www.youtube.com/watch?v=j9JvX58aRfg
Special thanks to Sonya Pemberton, Karl Kruszelnicki, Mary Dobbie, Olivia McRae, and the patreon supporters for giving us feedback on the earlier version of this video.
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
References:
The primary reference used is Vaclav Smils excellent book, Enriching The Earth
Smil, V. (2004). Enriching the earth: Fritz Haber, Carl Bosch, and the transformation of world food production. MIT press. https://ve42.co/Smil
Mastermind: The Rise and Fall of Fritz Haber, the Nobel Laureate Who Launched the Age of Chemical Warfare, by Dan Charles https://ve42.co/Charles
Stoltzenberg, D. (2004). Fritz Haber: Chemist, Nobel Laureate, German, Jew. Chemical Heritage Foundation. https://ve42.co/Stoltzenberg
Postgate, J. R. (1982). The fundamentals of nitrogen fixation. CUP Archive. https://ve42.co/postgate
Miles, A. G. (1992). Biological nitrogen fixation. https://ve42.co/Miles
Friedrich, B., &amp; Hoffmann, D. (2017). Clara Immerwahr: A life in the shadow of Fritz Haber. In One Hundred Years of Chemical Warfare: Research, Deployment, Consequences(pp. 45-67). Springer, Cham. https://ve42.co/Friedrich2017
Da Silva, G. (2020). What is ammonium nitrate, the chemical that exploded in Beirut. Sci Am, 5. https://ve42.co/Silva
Rodrigues, P., &amp; Micael, J. (2021). The importance of guano birds to the Inca Empire and the first conservation measures implemented by humans. https://ve42.co/rodrigues
Allison, F. E. (1957). Nitrogen and soil fertility. Soil, the, 85-94. https://ve42.co/Allison
Crookes, W. (1898). Address of the President before the British Association for the Advancement of Science, Bristol, 1898. Science, 8(200), 561-575. https://ve42.co/Crookes
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Special thanks to Patreon supporters: RayJ Johnson, Brian Busbee, Jerome Barakos M.D., Amadeo Bee, Julian Lee, Inconcision, TTST, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Matthew Gonzalez, Eric Sexton, john kiehl, Diffbot, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Timothy OBrien, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Written by Petr Lebedev, Derek Muller, Felicity Nelson and Kovi Rose
Edited by Trenton Oliver
Animation by Jakub Mistek, Fabio Albertelli, Ivy Tello, Alex Drakoulis, Nils Ramses Kullack, and Charlie Davies
SFX by Shaun Clifford
Filmed by Petr Lebedev, Derek Muller and Raquel Nuno
Photo of nitrogen deficiency in rice from https://ve42.co/rice
Additional video/photos supplied by Getty Images
Music from Epidemic Sound: https://ve42.co/music</media:description>
<media:community>
<media:starRating count="472788" average="5.00" min="1" max="5"/>
<media:statistics views="12311178"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:iSNsgj1OCLA</id>
<yt:videoId>iSNsgj1OCLA</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Riddle That Seems Impossible Even If You Know The Answer</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=iSNsgj1OCLA"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-06-30T12:20:58+00:00</published>
<updated>2022-07-27T02:26:52+00:00</updated>
<media:group>
<media:title>The Riddle That Seems Impossible Even If You Know The Answer</media:title>
<media:content url="https://www.youtube.com/v/iSNsgj1OCLA?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/iSNsgj1OCLA/hqdefault.jpg" width="480" height="360"/>
<media:description>The 100 Prisoners Riddle feels completely impossible even once you know the answer. This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Special thanks to Destin of Smarter Every Day (https://ve42.co/SED), Toby of Tibees (https://ve42.co/Tibees), and Jabril of Jabrils (https://ve42.co/Jabrils) for taking the time to think about this mind bending riddle.
Huge thanks to Luke West for building plots and for his help with the math.
Huge thanks to Dr. Eugene Curtin and Dr. Max Warshauer for their great article on the problem and taking the time to help us understand it: https://ve42.co/CurtinWarshauer
Thanks to Dr. John Baez for his help with finding alternate ways to do the calculations.
Thanks to Simon Pampena for his input and analysis.
Other 100 Prisoners Riddle videos:
minutephysics: https://www.youtube.com/watch?v=C5-I0bAuEUE
Vsauce2: https://www.youtube.com/watch?v=kOnEEeHZp94
Stand-up Maths: https://www.youtube.com/watch?v=a1DUUnhk3uE
TED-Ed: https://www.youtube.com/watch?v=vIdStMTgNl0
▀▀▀
References:
Original paper: Gál, A., &amp; Miltersen, P.B. (2003). The Cell Probe Complexity of Succinct Data Structures. BRICS, Department of Computer Science, University of Aarhus. All rights reserved. https://ve42.co/GalMiltersen
Winkler, P. (2006). Seven Puzzles You Think You Must Not Have Heard Correctly. https://ve42.co/Winkler2006
The 100 Prisoners Problem https://ve42.co/100PWiki
Golomb, S. &amp; Gaal, P. (1998). On the Number of Permutations on n Objects with Greatest Cycle Length k. Advances in Applied Mathematics, 20(1), 98-107. https://ve42.co/Golomb1998
Lamb, E. (2012). Puzzling Prisoners Presented to Promote North America's Only Museum of Math. Observations, Scientific American. https://ve42.co/Lamb2012
Permutations https://ve42.co/PermutationsWiki
Probability that a random permutation of n elements has a cycle of length k greater than n/2, Math SE. https://ve42.co/BaezProbSE
Counting Cycle Structures in Sn, Math SE. https://ve42.co/CountCyclesSE
What is the distribution of cycle lengths in derangements? In particular, expected longest cycle, Math SE. https://ve42.co/JorikiSE
The Manim Community Developers. (2021). Manim - Mathematical Animation Framework (Version v0.13.1). https://www.manim.community/
▀▀▀
Special thanks to Patreon supporters: RayJ Johnson, Brian Busbee, Jerome Barakos M.D., Amadeo Bee, Julian Lee, Inconcision, TTST, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Matthew Gonzalez, Eric Sexton, john kiehl, Diffbot, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Timothy OBrien, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller and Emily Zhang
Filmed by Derek Muller and Petr Lebedev
Animation by Ivy Tello and Jesús Rascón
Edited by Trenton Oliver
Additional video/photos supplied by Getty Images
Music from Epidemic Sound and Jonny Hyman
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="286016" average="5.00" min="1" max="5"/>
<media:statistics views="7458757"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:6etTERFUlUI</id>
<yt:videoId>6etTERFUlUI</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Absurd Search For Dark Matter</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=6etTERFUlUI"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-06-02T12:06:02+00:00</published>
<updated>2022-07-17T17:05:49+00:00</updated>
<media:group>
<media:title>The Absurd Search For Dark Matter</media:title>
<media:content url="https://www.youtube.com/v/6etTERFUlUI?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/6etTERFUlUI/hqdefault.jpg" width="480" height="360"/>
<media:description>This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription. Astronomers think there should be 5 times as much dark matter as ordinary matter a shadow universe that makes up most of the mass in the universe. But after decades of trying, no experiments have found any trace of dark matter except one.
A massive thanks to the wonderful people at the ARC Centre of Excellence for Dark Matter Physics https://www.centredarkmatter.org for showing us around and being on camera Fleur Morrison, A/Prof Phillip Urquijo, Prof Elisabetta Barberio, Madeleine Zurowski and Grace Lawrence.
Thanks to Leo Fincher-Johnson and everyone at the Stawell gold mine for having us.
Massive thanks to Prof. Geraint Lewis Geraint has been Veritasiums go-to expert for anything astrophysics and cosmology related. Please check out his website, and buy his books, theyre great https://www.geraintflewis.com
Thanks to Prof. Timothy Tait for the help to make sure we got the science right.
Thanks to Ingo Berg for illustrating the effect of dark matter on the rotation of a galaxy https://beltoforion.de/en/spiral_galaxy_renderer/spiral-galaxy-renderer.html
▀▀▀
Galaxy cluster simulation from IllustrisTNG https://www.tng-project.org
Venn Diagram of Dark Matter from Tim Tait https://ve42.co/venn
The Bullet Cluster Image from Magellan, Hubble and Chandra telescopes https://ve42.co/BC2
Bullet cluster animation from Andrew Robertson / Institute for Computational Cosmology / Durham University https://ve42.co/BC3
▀▀▀
Bernabei, R., Belli, P., Cappella, F., Cerulli, R., Dai, C. J., dAngelo, A., ... &amp; Ye, Z. P. (2008). First results from DAMA/LIBRA and the combined results with DAMA/NaI. The European Physical Journal C, 56(3), 333-355. https://ve42.co/DAMA2008
Zwicky, F. (1933). Die rotverschiebung von extragalaktischen nebeln. Helvetica physica acta, 6, 110-127. https://ve42.co/Zwicky1
Zwicky, F. (1937). On the Masses of Nebulae and of Clusters of Nebulae. The Astrophysical Journal, 86, 217. https://ve42.co/Zwicky2
Rubin, V. C., &amp; Ford Jr, W. K. (1970). Rotation of the Andromeda nebula from a spectroscopic survey of emission regions. The Astrophysical Journal, 159, 379. https://ve42.co/Rubin1
Bosma, A., &amp; Van der Kruit, P. C. (1979). The local mass-to-light ratio in spiral galaxies. Astronomy and Astrophysics, 79, 281-286. https://ve42.co/Bosma1
Milgrom, M. (1983). A modification of the Newtonian dynamics as a possible alternative to the hidden mass hypothesis. The Astrophysical Journal, 270, 365-370. https://ve42.co/mond1
Sanders, R. H., &amp; McGaugh, S. S. (2002). Modified Newtonian dynamics as an alternative to dark matter. Annual Review of Astronomy and Astrophysics, 40(1), 263-317. https://ve42.co/Mond2
M. Markevitch; A. H. Gonzalez; D. Clowe; A. Vikhlinin; L. David; W. Forman; C. Jones; S. Murray &amp; W. Tucker (2004). &quot;Direct constraints on the dark matter self-interaction cross-section from the merging galaxy cluster 1E0657-56&quot;. Astrophys. J. 606 (2): 819824. https://ve42.co/BC1
Great website about the CMB http://background.uchicago.edu/~whu/intermediate/driving2.html
Galli, S., Iocco, F., Bertone, G., &amp; Melchiorri, A. (2009). CMB constraints on dark matter models with large annihilation cross section. Physical Review D, 80(2), 023505. https://ve42.co/CMB1
Antonello, M., Barberio, E., Baroncelli, T., Benziger, J., Bignell, L. J., Bolognino, I., ... &amp; Xu, J. (2019). The SABRE project and the SABRE Proof-of-Principle. The European Physical Journal C, 79(4), 1-8. https://ve42.co/SABRE1
▀▀▀
Special thanks to Patreon supporters: Inconcision, Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller and Petr Lebedev
Edited by Trenton Oliver
Animation by Ivy Tello and Mike Radjabov
Filmed by Derek Muller and Petr Lebedev
Additional video/photos supplied by Getty Image
B-roll supplied by Stawell Gold Mine
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="215034" average="5.00" min="1" max="5"/>
<media:statistics views="5716470"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:Q1bSDnuIPbo</id>
<yt:videoId>Q1bSDnuIPbo</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>How did they actually take this picture? (Very Long Baseline Interferometry)</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=Q1bSDnuIPbo"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-05-12T14:52:13+00:00</published>
<updated>2022-09-06T13:18:59+00:00</updated>
<media:group>
<media:title>How did they actually take this picture? (Very Long Baseline Interferometry)</media:title>
<media:content url="https://www.youtube.com/v/Q1bSDnuIPbo?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/Q1bSDnuIPbo/hqdefault.jpg" width="480" height="360"/>
<media:description>This is an image of the supermassive black hole, Sagittarius A*, at the center of our Milky Way galaxy.
Visit https://www.kiwico.com/veritasium30 to get 30% off your first month of any crate!
▀▀▀
Image of Sgr A* from EHT collaboration
Event Horizon Telescope collaboration: https://ve42.co/EHT
Animations from The Relativistic Astrophysics group, Institute for Theoretical Physics, Goethe-Universität Frankfurt. Massive thanks to Prof. Luciano Rezzolla, Dr Christian Fromm and Dr Alejandro Cruz-Osorio.
A huge thanks to Prof. Peter Tuthill and Dr Manisha Caleb for feedback on earlier versions of this video and helping explain VLBI.
Great video by Thatcher Chamberlin about VLBI here https://youtu.be/Y8rAHTvpJbk
Animations and simulations with English text:
L. R. Weih &amp; L. Rezzolla (Goethe University Frankfurt)
https://youtu.be/jvftAadCFRI
Video of stars going around Sgr A* from European Southern Observatory
https://www.eso.org/public/videos/eso1825e/
Video zooming into the center of our galaxy from European Southern Observatory
https://www.youtube.com/watch?v=dXAU0gzsPOw
Video of observation of M87 courtesy of:
C. M. Fromm, Y. Mizuno &amp; L. Rezzolla (Goethe University Frankfurt)
https://youtu.be/meOKmzhTcIY
Video of observation of SgrA* courtesy of
C. M. Fromm, Y. Mizuno &amp; L. Rezzolla (Goethe University Frankfurt)
Z. Younsi (University College London)
https://youtu.be/VnsZj9RvhFU
Video of telescopes in the array 2017:
C. M. Fromm &amp; L. Rezzolla (Goethe University Frankfurt)
https://youtu.be/Ame7fzBuFnk
Animations and simulations (no text):
L. R. Weih &amp; L. Rezzolla (Goethe University Frankfurt)
https://youtu.be/XmvpKFSvB7A
▀▀▀
Special thanks to Patreon supporters: Inconcision, Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller
Animation by Ivy Tello, Mike Radjabov, Maria Raykova
Filmed by Petr Lebedev</media:description>
<media:community>
<media:starRating count="188380" average="5.00" min="1" max="5"/>
<media:statistics views="4478525"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:oI_X2cMHNe0</id>
<yt:videoId>oI_X2cMHNe0</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>How Electricity Actually Works</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=oI_X2cMHNe0"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-04-29T13:59:54+00:00</published>
<updated>2022-08-03T23:51:20+00:00</updated>
<media:group>
<media:title>How Electricity Actually Works</media:title>
<media:content url="https://www.youtube.com/v/oI_X2cMHNe0?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/oI_X2cMHNe0/hqdefault.jpg" width="480" height="360"/>
<media:description>This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Special thanks to:
Bruce Sherwood, Ruth Chabay, Aaron Titus, and Steve Spicklemore
https://matterandinteractions.org
VPython simulation: http://tinyurl.com/SurfaceCharge
Thanks to Ansys for help with the simulations: https://www.ansys.com/products/electronics/ansys-hfss
Huge thanks to Richard Abbott from Caltech for all his modeling
Electrical Engineering YouTubers:
Electroboom: https://www.youtube.com/c/Electroboom
Alpha Phoenix: https://www.youtube.com/c/AlphaPhoenixChannel
eevblog: https://www.youtube.com/c/EevblogDave
Ben Watson: https://www.youtube.com/channel/UCgZUVIEtBnnBpFWJuxl_E5g
Big Clive: https://www.youtube.com/c/Bigclive
Z Y: https://www.youtube.com/user/ZongyiYang
NYU Quantum Technology Lab
https://www.youtube.com/channel/UCk7io8SN3ZwKvkpnMCbIGsA
Dr. Ben Miles
https://www.youtube.com/channel/UCUeZBocfxALSUdOgNJB5ySA
Further analysis of the large circuit is available here: https://ve42.co/bigcircuit
Special thanks to Dr Geraint Lewis for bringing up this question in the first place and discussing it with us. Check out his and Dr Chris Ferries new book here: https://ve42.co/Universe2021
▀▀▀
References:
A great video about the Poynting vector by the Science Asylum: https://youtu.be/C7tQJ42nGno
Sefton, I. M. (2002). Understanding electricity and circuits: What the text books dont tell you. In Science Teachers Workshop. -- https://ve42.co/Sefton
Feynman, R. P., Leighton, R. B., &amp; Sands, M. (1965). The feynman lectures on physics; vol. Ii, chapter 27. American Journal of Physics, 33(9), 750-752. -- https://ve42.co/Feynman27
Hunt, B. J. (2005). The Maxwellians. Cornell University Press.
Müller, R. (2012). A semiquantitative treatment of surface charges in DC circuits. American Journal of Physics, 80(9), 782-788. -- https://ve42.co/Muller2012
Galili, I., &amp; Goihbarg, E. (2005). Energy transfer in electrical circuits: A qualitative account. American journal of physics, 73(2), 141-144. -- https://ve42.co/Galili2004
Deno, D. W. (1976). Transmission line fields. IEEE Transactions on Power Apparatus and Systems, 95(5), 1600-1611. -- https://ve42.co/Deno76
▀▀▀
Special thanks to Patreon supporters: Inconcision, Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller
Edited by Derek Muller
Filmed by Trenton Oliver and Petr Lebedev
Animation by Mike Radjabov and Ivy Tello
Additional video/photos supplied by Getty Images
Music from Epidemic Sound and Jonny Hyman
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="286572" average="5.00" min="1" max="5"/>
<media:statistics views="6793328"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:IV3dnLzthDA</id>
<yt:videoId>IV3dnLzthDA</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Man Who Accidentally Killed The Most People In History</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=IV3dnLzthDA"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-04-22T15:37:40+00:00</published>
<updated>2022-08-19T15:39:46+00:00</updated>
<media:group>
<media:title>The Man Who Accidentally Killed The Most People In History</media:title>
<media:content url="https://www.youtube.com/v/IV3dnLzthDA?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/IV3dnLzthDA/hqdefault.jpg" width="480" height="360"/>
<media:description>One scientist caused two environmental disasters and the deaths of millions. A part of this video is sponsored by Wren. Offset your carbon footprint on Wren: https://www.wren.co/start/veritasium. For the first 100 people who sign up, I will personally pay for the first month of your subscription!
Massive thanks to Prof. Francois Tissot for suggesting we make a video on the topic of isotope geochemistry. Huge thanks to Prof. Bruce Lanphear for consulting with us on lead and cardiovascular diseases. Thanks to the Caltech Archives for the audio of Pattersons interview. Thanks to Vincent Mai for lending us your Snatoms kit. Thanks to Rayner Moss for the help with the fire-piston.
Pattersons 1995 interview audio courtesy of the Archives, California Institute of Technology.
▀▀▀
Other great resources you should check out:
Bill Bryson has a chapter in his fantastic “A Short History of Nearly Everything”
Radiolab have a wonderful podcast: https://www.wnycstudios.org/podcasts/...
Cosmos: A Spacetime Odyssey has a wonderful episode S1E7 which does a great job of telling the story of Clair Patterson
A fantastic Mental floss article https://www.mentalfloss.com/article/9...
▀▀▀
References:
Much of the lead-crime hypothesis data is from Rick Nevins work https://ricknevin.com/
WHO factsheet on lead poisoning https://www.who.int/news-room/fact-sh...
WHO press release about the end of leaded gasoline https://news.un.org/en/story/2021/08/...
UNICEF report https://ve42.co/UNICEF
Needleman, H. (2004). Lead poisoning. Annu. Rev. Med., 55, 209-222. https://ve42.co/Needleman1
Needleman, H. L. (1991). Human lead exposure. CRC Press. https://ve42.co/Needleman2
Needleman, H. L. et al. (1979). Deficits in psychologic and classroom performance of children with elevated dentine lead levels. New England journal of medicine, 300(13), 689-695. https://ve42.co/Needleman3
Needleman, H. L. et al. (1996). Bone lead levels and delinquent behavior. Jama, 275(5), 363-369. https://ve42.co/Needleman4
Kovarik, W. J. (1993). The ethyl controversy: the news media and the public health debate over leaded gasoline, 1924-1926 https://ve42.co/Kovarik2
Edelmann, F. T. (2016). The life and legacy of Thomas Midgley Jr. In Papers and Proceedings of the Royal Society of Tasmania https://ve42.co/Edelmann
More, A. F. et al. (2017). Nextgeneration ice core technology reveals true minimum natural levels of lead (Pb) in the atmosphere: Insights from the Black Death. GeoHealth, 1(4), 211-219. https://ve42.co/More1
McFarland, M. J., et al. (2022). PNAS 119(11), e2118631119. https://ve42.co/McFarland
Kovarik, W. (2005). Ethyl-leaded gasoline. International Journal of Occupational and Environmental Health, 11(4), 384-397. https://ve42.co/Kovarik3
Nevin, R. (2007). Understanding international crime trends: the legacy of preschool lead exposure. Environmental research, 104(3), 315-336. https://ve42.co/Nevin2007
Ericson, J. E., et al. (1979). Skeletal concentrations of lead in ancient Peruvians. New England Journal of Medicine, 300(17), 946-951. https://ve42.co/Ericson1
Patterson, Claire. The Isotopic Composition of Trace Quantities of Lead and Calcium https://ve42.co/Patterson1
Boutron, C. F., &amp; Patterson, C. C. (1986). Lead concentration changes in Antarctic ice during the Wisconsin/Holocene transition. Nature, 323(6085), 222-225. https://ve42.co/Boulton1
Patterson, C. (1956). Age of meteorites and the earth. Geochimica et Cosmochimica Acta, 10(4), 230-237. https://ve42.co/Patterson2
Lanphear, B. P. et al (2018). Low-level lead exposure and mortality in US adults: a population-based cohort study. The Lancet Public Health, 3(4), e177-e184. https://ve42.co/Lanphear1
Schaule, B. K., &amp; Patterson, C. C. (1981). Lead concentrations in the northeast Pacific: evidence for global anthropogenic perturbations. Earth and Planetary Science Letters, 54(1), 97-116. https://ve42.co/Schaule1
▀▀▀
Special thanks to Patreon supporters: Inconcision, Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller, Petr Lebedev, Chris Stewart, and Katie Barnshaw
Edited by Trenton Oliver
Filmed by Petr Lebedev
Animation by Fabio Albertelli, Jakub Misiek, Iván Tello, Mike Radjabov, and Caleb Worcester
SFX by Shaun Clifford
Additional video/photos supplied by Getty Images
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="714272" average="5.00" min="1" max="5"/>
<media:statistics views="22611395"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:7ziWrneMYss</id>
<yt:videoId>7ziWrneMYss</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>How Horses Save Humans From Snakebites</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=7ziWrneMYss"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-03-22T11:55:53+00:00</published>
<updated>2022-07-23T16:52:53+00:00</updated>
<media:group>
<media:title>How Horses Save Humans From Snakebites</media:title>
<media:content url="https://www.youtube.com/v/7ziWrneMYss?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/7ziWrneMYss/hqdefault.jpg" width="480" height="360"/>
<media:description>This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription. To make antivenom, you first need to collect venom from the worlds most deadly snakes.
Huge thanks to the Australian Reptile Park for having us over to film special thanks to Zac Bower for milking all of these snakes for us and Caitlin Vine for organizing the shoot. Absolute legends. https://www.reptilepark.com.au
Huge thanks to Dr Timothy Jackson from the Australian Venom Research Unit for answering our questions, and fact checking the script. This video would not have been the same without you.
Thanks to Seqirus Australia for providing B-roll footage of the horses and the antivenom production.
▀▀▀
References:
Calmette, A. (1896). Le venin des serpents: Physiologie de l'envenimation, traitement des morsures venimeuses par le sérum des animaux vaccinés. Paris: Société d'éditions scientifiques.
Broad, A. J., Sutherland, S. K., &amp; Coulter, A. R. (1979). The lethality in mice of dangerous Australian and other snake venom. Toxicon, 17(6), 661-664. https://ve42.co/Broad79
WHO Expert Committee on Biological Standardization. (2016). WHO guidelines for the production, control and regulation of snake antivenom immunoglobulins. Geneve, Switzerland. https://ve42.co/WHO2016
Calmette, A. (1896). The treatment of animals poisoned with snake venom by the injection of antivenomous serum. British medical journal, 2(1859), 399. https://ve42.co/Calmette1896
Hawgood, B. J. (1999). Doctor Albert Calmette 18631933: founder of antivenomous serotherapy and of antituberculous BCG vaccination. Toxicon, 37(9), 1241-1258. https://ve42.co/Hawgood99
Pucca, M. B., Cerni, F. A., Janke, R., Bermúdez-Méndez, E., Ledsgaard, L., Barbosa, J. E., &amp; Laustsen, A. H. (2019). History of envenoming therapy and current perspectives. Frontiers in immunology, 1598. https://ve42.co/Pucca19
Kang, T. S., Georgieva, D., Genov, N., Murakami, M. T., Sinha, M., Kumar, R. P., ... &amp; Kini, R. M. (2011). Enzymatic toxins from snake venom: structural characterization and mechanism of catalysis. The FEBS journal, 278(23), 4544-4576. https://ve42.co/Kang2011
Hawgood, B. J. (2007). Albert Calmette (18631933) and Camille Guerin (18721961): the C and G of BCG vaccine. Journal of medical biography, 15(3), 139-146. https://ve42.co/Hawgood2007
Vonk, F. J., Admiraal, J. F., Jackson, K., Reshef, R., de Bakker, M. A., Vanderschoot, K., ... &amp; Richardson, M. K. (2008). Evolutionary origin and development of snake fangs. Nature, 454(7204), 630-633. https://ve42.co/vonk2008
Bochner, R. (2016). Paths to the discovery of antivenom serotherapy in France. Journal of Venomous Animals and Toxins including Tropical Diseases, 22. https://ve42.co/Bochner2016
Young, B. A., Herzog, F., Friedel, P., Rammensee, S., Bausch, A., &amp; van Hemmen, J. L. (2011). Tears of venom: hydrodynamics of reptilian envenomation. Physical review letters, 106(19), 198103. https://ve42.co/Young2011
Madras Medical Journal, Volume Second, July-December 1870. Page 355
▀▀▀
Special thanks to Patreon supporters: Inconcision, Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Benedikt Heinen, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Petr Lebedev and Derek Muller
Edited by Trenton Oliver
Filmed by Jason Tran and Petr Lebedev
Animation by Fabio Albertelli, Jakub Misiek, Iván Tello and Mike Radjabov.
Molecule animation by Reciprocal Space https://www.reciprocal.space
Additional video/photos supplied by Getty Image
B-roll supplied by Seqirus Australia
Music from Epidemic Sound and Jonny Hyman
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="203454" average="5.00" min="1" max="5"/>
<media:statistics views="12244708"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:GVsUOuSjvcg</id>
<yt:videoId>GVsUOuSjvcg</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>Future Computers Will Be Radically Different (Analog Computing)</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=GVsUOuSjvcg"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2022-03-01T11:37:38+00:00</published>
<updated>2022-08-04T14:47:24+00:00</updated>
<media:group>
<media:title>Future Computers Will Be Radically Different (Analog Computing)</media:title>
<media:content url="https://www.youtube.com/v/GVsUOuSjvcg?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/GVsUOuSjvcg/hqdefault.jpg" width="480" height="360"/>
<media:description>Visit https://brilliant.org/Veritasium/ to get started learning STEM for free, and the first 200 people will get 20% off their annual premium subscription. Digital computers have served us well for decades, but the rise of artificial intelligence demands a totally new kind of computer: analog.
Thanks to Mike Henry and everyone at Mythic for the analog computing tour! https://www.mythic-ai.com/
Thanks to Dr. Bernd Ulmann, who created The Analog Thing and taught us how to use it. https://the-analog-thing.org
Moores Law was filmed at the Computer History Museum in Mountain View, CA.
Welch Labs ALVINN video: https://www.youtube.com/watch?v=H0igiP6Hg1k
▀▀▀
References:
Crevier, D. (1993). AI: The Tumultuous History Of The Search For Artificial Intelligence. Basic Books. https://ve42.co/Crevier1993
Valiant, L. (2013). Probably Approximately Correct. HarperCollins. https://ve42.co/Valiant2013
Rosenblatt, F. (1958). The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain. Psychological Review, 65(6), 386-408. https://ve42.co/Rosenblatt1958
NEW NAVY DEVICE LEARNS BY DOING; Psychologist Shows Embryo of Computer Designed to Read and Grow Wiser (1958). The New York Times, p. 25. https://ve42.co/NYT1958
Mason, H., Stewart, D., and Gill, B. (1958). Rival. The New Yorker, p. 45. https://ve42.co/Mason1958
Alvinn driving NavLab footage https://ve42.co/NavLab
Pomerleau, D. (1989). ALVINN: An Autonomous Land Vehicle In a Neural Network. NeurIPS, (2)1, 305-313. https://ve42.co/Pomerleau1989
ImageNet website https://ve42.co/ImageNet
Russakovsky, O., Deng, J. et al. (2015). ImageNet Large Scale Visual Recognition Challenge. https://ve42.co/ImageNetChallenge
AlexNet Paper: Krizhevsky, A., Sutskever, I., Hinton, G. (2012). ImageNet Classification with Deep Convolutional Neural Networks. NeurIPS, (25)1, 1097-1105. https://ve42.co/AlexNet
Karpathy, A. (2014). Blog post: What I learned from competing against a ConvNet on ImageNet. https://ve42.co/Karpathy2014
Fick, D. (2018). Blog post: Mythic @ Hot Chips 2018. https://ve42.co/MythicBlog
Jin, Y. &amp; Lee, B. (2019). 2.2 Basic operations of flash memory. Advances in Computers, 114, 1-69. https://ve42.co/Jin2019
Demler, M. (2018). Mythic Multiplies in a Flash. The Microprocessor Report. https://ve42.co/Demler2018
Aspinity (2021). Blog post: 5 Myths About AnalogML. https://ve42.co/Aspinity
Wright, L. et al. (2022). Deep physical neural networks trained with backpropagation. Nature, 601, 49555. https://ve42.co/Wright2022
Waldrop, M. M. (2016). The chips are down for Moores law. Nature, 530, 144147. https://ve42.co/Waldrop2016
▀▀▀
Special thanks to Patreon supporters: Kelly Snook, TTST, Ross McCawley, Balkrishna Heroor, 65square.com, Chris LaClair, Avi Yashchin, John H. Austin, Jr., OnlineBookClub.org, Dmitry Kuzmichev, Matthew Gonzalez, Eric Sexton, john kiehl, Anton Ragin, Benedikt Heinen, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Burt Humburg, Blake Byers, Dumky, Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Josh Hibschman, Mac Malkawi, Michael Schneider, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
▀▀▀
Written by Derek Muller, Stephen Welch, and Emily Zhang
Filmed by Derek Muller, Petr Lebedev, and Emily Zhang
Animation by Iván Tello, Mike Radjabov, and Stephen Welch
Edited by Derek Muller
Additional video/photos supplied by Getty Images and Pond5
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev, and Emily Zhang</media:description>
<media:community>
<media:starRating count="300722" average="5.00" min="1" max="5"/>
<media:statistics views="8556995"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:IgF3OX8nT0w</id>
<yt:videoId>IgF3OX8nT0w</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Most Powerful Computers You've Never Heard Of</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=IgF3OX8nT0w"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2021-12-21T19:32:53+00:00</published>
<updated>2022-05-19T01:41:04+00:00</updated>
<media:group>
<media:title>The Most Powerful Computers You've Never Heard Of</media:title>
<media:content url="https://www.youtube.com/v/IgF3OX8nT0w?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/IgF3OX8nT0w/hqdefault.jpg" width="480" height="360"/>
<media:description>Analog computers were the most powerful computers for thousands of years, relegated to obscurity by the digital revolution. This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Thanks to Scott Wiedemann for the lego computer instructions https://www.youtube.com/watch?v=5X_Ft4YR_wU
Antikythera Archive &amp; Animations ©2005-2020 Images First Ltd. https://www.youtube.com/watch?v=1ebB0tyrMa8 &quot;The Antikythera Cosmos&quot; (2021) follows the latest developments from the UCL Antikythera Research Team as they recreate a dazzling display of the ancient Greek Cosmos at the front of the Antikythera Mechanism.
Tides video from NASA https://climate.nasa.gov/climate_resources/246/video-global-ocean-tides/
Ship animation from this painting https://ve42.co/Agamemnon
Moores Law, the op-amp, and the Norden bombsight were filmed at the Computer History Museum in Mountain View, CA.
▀▀▀
References:
Freeth, T., Bitsakis, Y., Moussas, X., Seiradakis, J. H., Tselikas, A., Mangou, H., ... &amp; Edmunds, M. G. (2006). Decoding the ancient Greek astronomical calculator known as the Antikythera Mechanism. Nature, 444(7119), 587-591. https://ve42.co/Freeth2006
Freeth, T., &amp; Jones, A. (2012). The cosmos in the Antikythera mechanism. ISAW Papers. https://ve42.co/Freeth2012
Cartwright, D. E. (2000). Tides: a scientific history. Cambridge University Press. https://ve42.co/tides
Thomson, W. (2017). Mathematical and physical papers. CUP Archive. https://ve42.co/Kelvinv6
Parker, B. B. (2007). Tidal analysis and prediction. NOAA NOS Center for Operational Oceanographic Products and Services. - https://ve42.co/Parker2007
Parker, B. (2011). The tide predictions for D-Day. Physics Today, 64(9), 35-40. https://ve42.co/Parker2011
Small, J. (2013). The Analogue Alternative. Routledge. https://ve42.co/Small2013
Zorpette, G. (1989). Parkinson's gun director. IEEE Spectrum, 26(4), 43. https://ve42.co/Zorpette89
Tremblay, M. (2009). Deconstructing the myth of the Norden Bombsight (Doctoral dissertation). https://ve42.co/Tremblay
Gladwell, M. (2021). The Bomber Mafia. Little, Brown and Company. - https://ve42.co/Gladwell2021
Mindell, D. A. (2000). Automations finest hour: Radar and system integration in World War II. Systems, Experts, and Computers: The Systems Approach in Management and Engineering, World War II and After. Edited by A. C. Hughes and T. P. Hughes, 27-56. https://ve42.co/Mindell
Haigh, T., Priestley, M., &amp; Rope, C. (2016). ENIAC in Action. The MIT Press. - https://ve42.co/Eniac2016
Soni, J., &amp; Goodman, R. (2017). A mind at play: how Claude Shannon invented the information age. Simon and Schuster. https://ve42.co/Soni
Haigh, T. &amp; Ceruzzi, P. (2021). A New History of Modern Computing. The MIT Press. - https://ve42.co/ModernComputing
Rid, T. (2016). Rise of the Machines: a Cybernetic History. Highbridge. - https://ve42.co/Rid2016
Ulmann, B. (2013). Analog computing. Oldenbourg Wissenschaftsverlag. https://ve42.co/Ulmann2013
▀▀▀
Special thanks to Patreon supporters: Dmitry Kuzmichev, Matthew Gonzalez, Baranidharan S, Eric Sexton, john kiehl, Daniel Brockman, Anton Ragin, S S, Benedikt Heinen, Diffbot, Micah Mangione, MJP, Gnare, Dave Kircher, Edward Larsen, Burt Humburg, Blak Byers, Dumky, , Evgeny Skvortsov, Meekay, Bill Linder, Paul Peijzel, Mac Malkawi, Michael Schneider, Ludovic Robillard, jim buckmaster, Juan Benet, Ruslan Khroma, Robert Blum, Richard Sundvall, Lee Redden, Vincent, Stephen Wilcox, Marinus Kuivenhoven, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Sam Lutfi, Ron Neal
Written by Derek Muller, Stephen Welch and Emily Zhang
Filmed by Derek Muller, Emily Zhang and Raquel Nuno
Animation by Fabio Albertelli, Jakub Misiek, Mike Radjabov, Iván Tello, Trenton Oliver
Edited by Derek Muller
Additional video supplied by Getty Images
Music from Epidemic Sound and Jonny Hyman
Produced by Derek Muller, Petr Lebedev and Emily Zhang</media:description>
<media:community>
<media:starRating count="325475" average="5.00" min="1" max="5"/>
<media:statistics views="8076321"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:ao2Jfm35XeE</id>
<yt:videoId>ao2Jfm35XeE</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Snowflake Mystery</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=ao2Jfm35XeE"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2021-12-01T07:35:28+00:00</published>
<updated>2022-07-22T03:01:07+00:00</updated>
<media:group>
<media:title>The Snowflake Mystery</media:title>
<media:content url="https://www.youtube.com/v/ao2Jfm35XeE?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/ao2Jfm35XeE/hqdefault.jpg" width="480" height="360"/>
<media:description>Dr Ken Libbrecht is the world expert on snowflakes, designer of custom snowflakes, snowflake consultant for the movie Frozen - his photos appear on postage stamps all over the world. This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Thanks to Dr Ken Libbrecht for showing us how to grow designer snowflakes. Obviously, this video would not have been possible without his help and his expertise. His website is full of information about snowflakes http://snowcrystals.com. His new book is also available to purchase from here -- https://ve42.co/SnowCrystalsBook
▀▀▀
References:
Libbrecht, K. G. (2019). A Quantitative Physical Model of the Snow Crystal Morphology Diagram. arXiv preprint arXiv:1910.09067. -- https://ve42.co/Libbrecht2019
▀▀▀
Special thanks to Patreon supporters: Luis Felipe, Anton Ragin, Paul Peijzel, S S, Benedikt Heinen, Diffbot, Micah Mangione, Juan Benet, Ruslan Khroma, Richard Sundvall, Lee Redden, Sam Lutfi, MJP, Gnare, Nick DiCandilo, Dave Kircher, Edward Larsen, Burt Humburg, Blake Byers, Dumky, Mike Tung, Evgeny Skvortsov, Meekay, Ismail Öncü Usta, Crated Comments, Anna, Mac Malkawi, Michael Schneider, Oleksii Leonov, Jim Osmun, Tyson McDowell, Ludovic Robillard, Jim buckmaster, fanime96, Ruslan Khroma, Robert Blum, Vincent, Marinus Kuivenhoven, Alfred Wallace, Arjun Chakroborty, Joar Wandborg, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson, Ron Neal
Written by Derek Muller
Filmed by Derek Muller, Raquel Nuno, Trenton Oliver and Emily Zhang
Edited by Trenton Oliver
Animations by Ivàn Tello and Trenton Oliver
Additional video supplied by Getty Images
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev and Emily Zhang</media:description>
<media:community>
<media:starRating count="278006" average="5.00" min="1" max="5"/>
<media:statistics views="7562341"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:9cNmUNHSBac</id>
<yt:videoId>9cNmUNHSBac</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>Most People Don't Know How Bikes Work</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=9cNmUNHSBac"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2021-11-28T15:00:07+00:00</published>
<updated>2022-08-02T16:54:23+00:00</updated>
<media:group>
<media:title>Most People Don't Know How Bikes Work</media:title>
<media:content url="https://www.youtube.com/v/9cNmUNHSBac?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/9cNmUNHSBac/hqdefault.jpg" width="480" height="360"/>
<media:description>Why are bicycles stable? The most common answer is gyroscopic effects, but this is not right. This video was sponsored by Kiwico. Get 50% off your first month of any crate at https://kiwico.com/veritasium50
Huge thanks to Rick Cavallaro for creating this bike on short notice. Thanks to all the friends who participated in the filming. Rick was also responsible for the Blackbird Faster Than The Wind Downwind Cart. https://youtu.be/jyQwgBAaBag
Much of the information presented here on the stability of a riderless bicycle stems from original research at
Delft http://bicycle.tudelft.nl/schwab/Bicycle/
and
Cornell http://ruina.tam.cornell.edu/research/topics/bicycle_mechanics/overview.html
This line of bicycle-balance research was initiated by Jim Papadopoulos: https://www.nature.com/articles/535338a
Great videos on bikes and counter-steering:
MinutePhysics: How Do Bikes Stay Up? https://youtu.be/oZAc5t2lkvo
MinutePhysics: The Counterintuitive Physics of Turning a Bike: https://youtu.be/llRkf1fnNDM
Why Bicycles Do Not Fall - Arend Schwab TED talk: https://youtu.be/2Y4mbT3ozcA
Today I Found Out: We Still Don't Know How Bicycles Work https://youtu.be/YWsK6rmsKSI
TU Delft - Smart motor in handlebars prevents bicycles from falling over: https://youtu.be/rBOQp2uY_lk
Andy Ruina Explains How Bicycles Balance Themselves: https://youtu.be/NcZCzr9ExKk
▀▀▀
More References:
TU Delft Bicycle Site: http://bicycle.tudelft.nl/schwab/Bicycle/
Bicycle stability program: http://ruina.tam.cornell.edu/research/topics/bicycle_mechanics/JBike6_web_folder/index.htm
▀▀▀
Special thanks to Patreon supporters: Luis Felipe, Anton Ragin, Paul Peijzel, S S, Benedikt Heinen, Diffbot, Micah Mangione, Juan Benet, Ruslan Khroma, Richard Sundvall, Lee Redden, Sam Lutfi, MJP, Gnare, Nick DiCandilo, Dave Kircher, Edward Larsen, Burt Humburg, Blake Byers, Dumky, Mike Tung, Evgeny Skvortsov, Meekay, Ismail Öncü Usta, Crated Comments, Anna, Mac Malkawi, Michael Schneider, Oleksii Leonov, Jim Osmun, Tyson McDowell, Ludovic Robillard, Jim buckmaster, fanime96, Ruslan Khroma, Robert Blum, Vincent, Marinus Kuivenhoven, Alfred Wallace, Arjun Chakroborty, Joar Wandborg, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson,Ron Neal
▀▀▀
Written by Derek Muller
Filmed by Trenton Oliver, Raquel Nuno and Derek Muller
Edited by Derek Muller
Music from Epidemic Sound and Jonny Hyman
Produced by Derek Muller, Petr Lebedev and Emily Zhang</media:description>
<media:community>
<media:starRating count="461590" average="5.00" min="1" max="5"/>
<media:statistics views="18527727"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:bHIhgxav9LY</id>
<yt:videoId>bHIhgxav9LY</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>The Big Misconception About Electricity</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=bHIhgxav9LY"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2021-11-19T18:26:03+00:00</published>
<updated>2022-01-14T09:22:05+00:00</updated>
<media:group>
<media:title>The Big Misconception About Electricity</media:title>
<media:content url="https://www.youtube.com/v/bHIhgxav9LY?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/bHIhgxav9LY/hqdefault.jpg" width="480" height="360"/>
<media:description>The misconception is that electrons carry potential energy around a complete conducting loop, transferring their energy to the load. This video was sponsored by Caséta by Lutron. Learn more at https://Lutron.com/veritasium
Further analysis of the large circuit is available here: https://ve42.co/bigcircuit
Special thanks to Dr Geraint Lewis for bringing up this question in the first place and discussing it with us. Check out his and Dr Chris Ferries new book here: https://ve42.co/Universe2021
Special thanks to Dr Robert Olsen for his expertise. He quite literally wrote the book on transmission lines, which you can find here: https://ve42.co/Olsen2018
Special thanks to Dr Richard Abbott for running a real-life experiment to test the model.
Huge thanks to all of the experts we talked to for this video -- Dr Karl Berggren, Dr Bruce Hunt, Dr Paul Stanley, Dr Joe Steinmeyer, Ian Sefton, and Dr David G Vallancourt.
▀▀▀
References:
A great video about the Poynting vector by the Science Asylum: https://youtu.be/C7tQJ42nGno
Sefton, I. M. (2002). Understanding electricity and circuits: What the text books dont tell you. In Science Teachers Workshop. -- https://ve42.co/Sefton
Feynman, R. P., Leighton, R. B., &amp; Sands, M. (1965). The feynman lectures on physics; vol. Ii, chapter 27. American Journal of Physics, 33(9), 750-752. -- https://ve42.co/Feynman27
Hunt, B. J. (2005). The Maxwellians. Cornell University Press.
Müller, R. (2012). A semiquantitative treatment of surface charges in DC circuits. American Journal of Physics, 80(9), 782-788. -- https://ve42.co/Muller2012
Galili, I., &amp; Goihbarg, E. (2005). Energy transfer in electrical circuits: A qualitative account. American journal of physics, 73(2), 141-144. -- https://ve42.co/Galili2004
Deno, D. W. (1976). Transmission line fields. IEEE Transactions on Power Apparatus and Systems, 95(5), 1600-1611. -- https://ve42.co/Deno76
▀▀▀
Special thanks to Patreon supporters: Luis Felipe, Anton Ragin, Paul Peijzel, S S, Benedikt Heinen, Diffbot, Micah Mangione, Juan Benet, Ruslan Khroma, Richard Sundvall, Lee Redden, Sam Lutfi, MJP, Gnare, Nick DiCandilo, Dave Kircher, Edward Larsen, Burt Humburg, Blake Byers, Dumky, Mike Tung, Evgeny Skvortsov, Meekay, Ismail Öncü Usta, Crated Comments, Anna, Mac Malkawi, Michael Schneider, Oleksii Leonov, Jim Osmun, Tyson McDowell, Ludovic Robillard, Jim buckmaster, fanime96, Ruslan Khroma, Robert Blum, Vincent, Marinus Kuivenhoven, Alfred Wallace, Arjun Chakroborty, Joar Wandborg, Clayton Greenwell, Michael Krugman, Cy 'kkm' K'Nelson,Ron Neal
Written by Derek Muller and Petr Lebedev
Animation by Mike Radjabov and Iván Tello
Filmed by Derek Muller and Emily Zhang
Footage of the sun by Raquel Nuno
Edited by Derek Muller
Additional video supplied by Getty Images
Music from Epidemic Sound
Produced by Derek Muller, Petr Lebedev and Emily Zhang</media:description>
<media:community>
<media:starRating count="519073" average="5.00" min="1" max="5"/>
<media:statistics views="16291303"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:cUzklzVXJwo</id>
<yt:videoId>cUzklzVXJwo</yt:videoId>
<yt:channelId>UCHnyfMqiRRG1u-2MsSQLbXA</yt:channelId>
<title>How Imaginary Numbers Were Invented</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=cUzklzVXJwo"/>
<author>
<name>Veritasium</name>
<uri>https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA</uri>
</author>
<published>2021-11-01T06:54:16+00:00</published>
<updated>2022-04-19T23:30:28+00:00</updated>
<media:group>
<media:title>How Imaginary Numbers Were Invented</media:title>
<media:content url="https://www.youtube.com/v/cUzklzVXJwo?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/cUzklzVXJwo/hqdefault.jpg" width="480" height="360"/>
<media:description>A general solution to the cubic equation was long considered impossible, until we gave up the requirement that math reflect reality. This video is sponsored by Brilliant. The first 200 people to sign up via https://brilliant.org/veritasium get 20% off a yearly subscription.
Thanks to Dr Amir Alexander, Dr Alexander Kontorovich, Dr Chris Ferrie, and Dr Adam Becker for the helpful advice and feedback on the earlier versions of the script.
▀▀▀
References:
Some great videos about the cubic:
500 years of not teaching the cubic formula. -- https://youtu.be/N-KXStupwsc
Imaginary Numbers are Real -- https://youtu.be/T647CGsuOVU
Dunham, W. (1990). Journey through genius: The great theorems of mathematics. New York. -- https://ve42.co/Dunham90
Toscano, F. (2020). The Secret Formula. Princeton University Press. -- https://ve42.co/Toscano2020
Bochner, S. (1963). The significance of some basic mathematical conceptions for physics. Isis, 54(2), 179-205. -- https://ve42.co/Bochner63
Muroi, K. (2019). Cubic equations of Babylonian mathematics. arXiv preprint arXiv:1905.08034. -- https://ve42.co/Murio21
Branson, W. Solving the cubic with Cardano, -- https://ve42.co/Branson2014
Rothman, T. (2013). Cardano v Tartaglia: The Great Feud Goes Supernatural. arXiv preprint arXiv:1308.2181. -- https://ve42.co/Rothman
Vali Siadat, M., &amp; Tholen, A. (2021). Omar Khayyam: Geometric Algebra and Cubic Equations. Math Horizons, 28(1), 12-15. -- https://ve42.co/Siadat21
Merino, O. (2006). A short history of complex numbers. University of Rhode Island. -- https://ve42.co/Merino2006
Cardano, G (1545), Ars magna or The Rules of Algebra, Dover (published 1993), ISBN 0-486-67811-3
Bombelli, R (1579) LAlgebra https://ve42.co/Bombelli
The Manim Community Developers. (2021). Manim Mathematical Animation Framework (Version v0.13.1) [Computer software]. https://www.manim.community/
▀▀▀
Special thanks to Patreon supporters: Luis Felipe, Anton Ragin, Paul Peijzel, S S, Benedikt Heinen, Diffbot, Micah Mangione, Juan Benet, Ruslan Khroma, Richard Sundvall, Lee Redden, Sam Lutfi, MJP, Gnare, Nick DiCandilo, Dave Kircher, Edward Larsen, Burt Humburg, Blake Byers, Dumky, Mike Tung, Evgeny Skvortsov, Meekay, Ismail Öncü Usta, Crated Comments, Anna, Mac Malkawi, Michael Schneider, Oleksii Leonov, Jim Osmun, Tyson McDowell, Ludovic Robillard, Jim buckmaster, fanime96, Ruslan Khroma, Robert Blum, Vincent, Marinus Kuivenhoven, Alfred Wallace, Arjun Chakroborty, Joar Wandborg, Clayton Greenwell, Pindex, Michael Krugman, Cy 'kkm' K'Nelson,Ron Neal
Executive Producer: Derek Muller
Writers: Derek Muller, Alex Kontorovich, Stephen Welch, Petr Lebedev
Animators: Fabio Albertelli, Jakub Misiek, Iván Tello, Jesús Rascón
SFX: Shaun Clifford
Camerapeople: Derek Muller, Emily Zhang
Editors: Derek Muller, Petr Lebedev
Producers: Derek Muller, Petr Lebedev, Emily Zhang
Additional video supplied by Getty Images
Music from Epidemic Sound and Jonny Hyman</media:description>
<media:community>
<media:starRating count="537359" average="5.00" min="1" max="5"/>
<media:statistics views="13586028"/>
</media:community>
</media:group>
</entry>
</feed>

View file

@ -0,0 +1,398 @@
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:yt="http://www.youtube.com/xml/schemas/2015" xmlns:media="http://search.yahoo.com/mrss/" xmlns="http://www.w3.org/2005/Atom">
<link rel="self" href="http://www.youtube.com/feeds/videos.xml?channel_id=UCdfxp4cUWsWryZOy-o427dw"/>
<id>yt:channel:UCdfxp4cUWsWryZOy-o427dw</id>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Nestlé</title>
<link rel="alternate" href="https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2009-10-07T14:00:36+00:00</published>
<entry>
<id>yt:video:Kti0T9JF0go</id>
<yt:videoId>Kti0T9JF0go</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>KitKat V PTC York Production | Nestlé B-Roll</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=Kti0T9JF0go"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-29T08:00:11+00:00</published>
<updated>2022-08-29T08:18:04+00:00</updated>
<media:group>
<media:title>KitKat V PTC York Production | Nestlé B-Roll</media:title>
<media:content url="https://www.youtube.com/v/Kti0T9JF0go?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/Kti0T9JF0go/hqdefault.jpg" width="480" height="360"/>
<media:description>Footage from the production for the test launch of KitKat V in 2021 at Nestlés Confectionery Product Technology Center in York.
You can download this B-roll stock footage from our corporate website here: http://www.nestle.com/media/videos
For regular Nestlé updates, follow:
https://www.facebook.com/Nestle
https://www.instagram.com/Nestle
https://www.twitter.com/Nestle</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="422"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:0L2TOCyvCH8</id>
<yt:videoId>0L2TOCyvCH8</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>KitKat V Hamburg Production | Nestlé B-Roll</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=0L2TOCyvCH8"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-29T08:00:01+00:00</published>
<updated>2022-08-29T08:18:08+00:00</updated>
<media:group>
<media:title>KitKat V Hamburg Production | Nestlé B-Roll</media:title>
<media:content url="https://www.youtube.com/v/0L2TOCyvCH8?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i1.ytimg.com/vi/0L2TOCyvCH8/hqdefault.jpg" width="480" height="360"/>
<media:description>Footage from the production line of KitKat V at Nestlés factory in Hamburg, Germany.
You can download this B-roll stock footage from our corporate website here: http://www.nestle.com/media/videos
For regular Nestlé updates, follow:
https://www.facebook.com/Nestle
https://www.instagram.com/Nestle
https://www.twitter.com/Nestle</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="500"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:PIXvtaQmnjA</id>
<yt:videoId>PIXvtaQmnjA</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>R+D Accelerator | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=PIXvtaQmnjA"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:38:47+00:00</published>
<updated>2022-08-26T14:44:53+00:00</updated>
<media:group>
<media:title>R+D Accelerator | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/PIXvtaQmnjA?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i1.ytimg.com/vi/PIXvtaQmnjA/hqdefault.jpg" width="480" height="360"/>
<media:description>Our R&amp;D Accelerator brings together Nestlé scientists, students and start-ups to advance science and technology by accelerating the development of innovative products and systems. Got an idea to submit? Go ahead! https://rdaccelerator.nestle.com/
#Nestlé Innovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="103"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:OAq0FBdxuuI</id>
<yt:videoId>OAq0FBdxuuI</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>R+D Accelerator | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=OAq0FBdxuuI"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:37:43+00:00</published>
<updated>2022-08-26T14:08:38+00:00</updated>
<media:group>
<media:title>R+D Accelerator | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/OAq0FBdxuuI?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/OAq0FBdxuuI/hqdefault.jpg" width="480" height="360"/>
<media:description>Do you have an innovation you could unlock with Nestlé partnership? Our R&amp;D Accelerator harnesses the expertise of Nestlés global R&amp;D network in food and nutrition as well as leading academic institutions and a wide range of innovation partners, suppliers and start-ups. Find out how to advance your idea with science and technology here: https://rdaccelerator.nestle.com/
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="70"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:rh2ryMOIQ8k</id>
<yt:videoId>rh2ryMOIQ8k</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>R+D Accelerator | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=rh2ryMOIQ8k"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:36:04+00:00</published>
<updated>2022-08-26T08:24:59+00:00</updated>
<media:group>
<media:title>R+D Accelerator | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/rh2ryMOIQ8k?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/rh2ryMOIQ8k/hqdefault.jpg" width="480" height="360"/>
<media:description>Calling all food and nutrition entrepreneurs! Got an idea adn looking for the science, technology and experts to put it into action? Check out our R&amp;D Accelerator that brings all those together in the pursuit of developing innovative products and systems: https://rdaccelerator.nestle.com/
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="85"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:Q0xHfgCmb0g</id>
<yt:videoId>Q0xHfgCmb0g</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>R+D Accelerator | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=Q0xHfgCmb0g"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:34:38+00:00</published>
<updated>2022-09-07T19:15:24+00:00</updated>
<media:group>
<media:title>R+D Accelerator | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/Q0xHfgCmb0g?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/Q0xHfgCmb0g/hqdefault.jpg" width="480" height="360"/>
<media:description>Our R&amp;D Accelerator brings together Nestlé scientists, students and start-ups to advance science and technology by accelerating the development of innovative products and systems. Got an idea to submit? Go ahead! https://rdaccelerator.nestle.com/
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="77"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:jD_EcIB4kq4</id>
<yt:videoId>jD_EcIB4kq4</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Brain Health | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=jD_EcIB4kq4"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:27:15+00:00</published>
<updated>2022-08-26T08:38:04+00:00</updated>
<media:group>
<media:title>Brain Health | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/jD_EcIB4kq4?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/jD_EcIB4kq4/hqdefault.jpg" width="480" height="360"/>
<media:description>Aging is a complex journey. Getting the most out of your health shouldnt have to be. Thats why our teams have dug into the data to support with living the fullest life in our later years. Check it out: https://nes.tl/HealthScience
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="39"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:KNSHhxGGAik</id>
<yt:videoId>KNSHhxGGAik</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Gut Microbiome | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=KNSHhxGGAik"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:26:13+00:00</published>
<updated>2022-08-26T08:29:53+00:00</updated>
<media:group>
<media:title>Gut Microbiome | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/KNSHhxGGAik?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i4.ytimg.com/vi/KNSHhxGGAik/hqdefault.jpg" width="480" height="360"/>
<media:description>In-depth research has given us an understanding of the gut microbiome. Now check out the health solutions weve worked on as a result: https://nes.tl/HealthScience
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="78"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:bPtEA9yjHVU</id>
<yt:videoId>bPtEA9yjHVU</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Cellular Decline | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=bPtEA9yjHVU"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:24:26+00:00</published>
<updated>2022-08-26T08:23:43+00:00</updated>
<media:group>
<media:title>Cellular Decline | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/bPtEA9yjHVU?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/bPtEA9yjHVU/hqdefault.jpg" width="480" height="360"/>
<media:description>Age-associated cellular decline can reduce a person's energy level, muscle function, immune response, and overall health. Our research and development teams believe health science can help address this. Discover the results their work has yielded: https://nes.tl/HealthScience
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="61"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:T0ugeidZ44k</id>
<yt:videoId>T0ugeidZ44k</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Nescafé Gold Roastery Collection | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=T0ugeidZ44k"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:21:43+00:00</published>
<updated>2022-08-26T08:35:57+00:00</updated>
<media:group>
<media:title>Nescafé Gold Roastery Collection | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/T0ugeidZ44k?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i1.ytimg.com/vi/T0ugeidZ44k/hqdefault.jpg" width="480" height="360"/>
<media:description>Our Nescafé Gold Blend Roastery Collection is carefully crafted for a great taste thanks to our teams' experimenting with roasting levels and times. With a range of flavors and intensities to choose from, theres something for everyone. Find your fave: https://nes.tl/NescafeGoldCollection
#NestleInnovates #Shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="61"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:DhMa-669pKU</id>
<yt:videoId>DhMa-669pKU</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Garden Gourmet Vuna | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=DhMa-669pKU"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:15:24+00:00</published>
<updated>2022-08-26T06:51:51+00:00</updated>
<media:group>
<media:title>Garden Gourmet Vuna | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/DhMa-669pKU?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i1.ytimg.com/vi/DhMa-669pKU/hqdefault.jpg" width="480" height="360"/>
<media:description>Cracking open a jar of Vuna you don't believe you're eating anything other than tuna. This is thanks to our creative R&amp;D colleagues. Check out this groundbreaking creation made from only six ingredients: https://nes.tl/VUNA-Story
#NestleInnovates #Shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="281"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:IVHIRHyEha0</id>
<yt:videoId>IVHIRHyEha0</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Wunda | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=IVHIRHyEha0"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:14:29+00:00</published>
<updated>2022-08-26T06:49:23+00:00</updated>
<media:group>
<media:title>Wunda | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/IVHIRHyEha0?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/IVHIRHyEha0/hqdefault.jpg" width="480" height="360"/>
<media:description>A milk-alternative powered by pea-protein and carbon neutral from creation sounds to good to be true? Not so. Check out the innovation that brought Wunda to life: https://nes.tl/WundaStory
#NestleInnovates #Shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="63"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:EKsM6WrGR7k</id>
<yt:videoId>EKsM6WrGR7k</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Plant-based Milo | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=EKsM6WrGR7k"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:13:14+00:00</published>
<updated>2022-08-26T06:59:11+00:00</updated>
<media:group>
<media:title>Plant-based Milo | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/EKsM6WrGR7k?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i2.ytimg.com/vi/EKsM6WrGR7k/hqdefault.jpg" width="480" height="360"/>
<media:description>Our Milo teams wanted to ensure that everyone has the chance to enjoy their iconic chocolate-malt flavor and crunch. That's why they've created nutritious, plant-based options. Learn more here: https://nes.tl/MiloPlantBased
#NestleInnovates #Shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="93"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:VhpNpEC5RNs</id>
<yt:videoId>VhpNpEC5RNs</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Smarties Paper Packaging | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=VhpNpEC5RNs"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:11:48+00:00</published>
<updated>2022-08-26T08:54:09+00:00</updated>
<media:group>
<media:title>Smarties Paper Packaging | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/VhpNpEC5RNs?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/VhpNpEC5RNs/hqdefault.jpg" width="480" height="360"/>
<media:description>Have you heard about the first global confectionery brand to use recyclable paper packaging? Hint: they're pretty smart. Get the detes here: https://nes.tl/SmartiesPaperStory
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="145"/>
</media:community>
</media:group>
</entry>
<entry>
<id>yt:video:Z1lTKnUzSDk</id>
<yt:videoId>Z1lTKnUzSDk</yt:videoId>
<yt:channelId>UCdfxp4cUWsWryZOy-o427dw</yt:channelId>
<title>Nescafé Gold Iced Latte | Nestlé Innovates</title>
<link rel="alternate" href="https://www.youtube.com/watch?v=Z1lTKnUzSDk"/>
<author>
<name>Nestlé</name>
<uri>https://www.youtube.com/channel/UCdfxp4cUWsWryZOy-o427dw</uri>
</author>
<published>2022-08-25T15:10:23+00:00</published>
<updated>2022-08-26T06:54:55+00:00</updated>
<media:group>
<media:title>Nescafé Gold Iced Latte | Nestlé Innovates</media:title>
<media:content url="https://www.youtube.com/v/Z1lTKnUzSDk?version=3" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i3.ytimg.com/vi/Z1lTKnUzSDk/hqdefault.jpg" width="480" height="360"/>
<media:description>Our coffee teams developed Nescafe Gold Iced Lattes a range for those who want to enjoy refreshing coffee shop style drinks at home. See how we're meeting all tastes and preferences through innovation: https://nes.tl/DailyGrinds
#NestleInnovates #shorts</media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views="119"/>
</media:community>
</media:group>
</entry>
</feed>

View file

@ -4,7 +4,7 @@
"title": "COSTA RICA IN 4K 60fps HDR (ULTRA HD)",
"description": "We've re-mastered and re-uploaded our favorite video in HDR!\n\nCHECK OUT OUR MOST POPULAR VIDEO: https://youtu.be/tO01J-M3g0U\n► INSTAGRAM: http://www.instagram.com/mysterybox\n► INSTAGRAM: http://www.instagram.com/jacobschwarz\n►WEBSITE: http://www.mysterybox.us\n►FACEBOOK: https://www.facebook.com/mysteryboxdi...\n\nMake sure to follow us on Instagram for BTS and sneak-peaks at upcoming projects. \n\nLICENSING & BUSINESS INQUIRIES\n► contact@mysterybox.us\n\nCHECK OUT OUR VIDEO PRODUCTION COMPANY\n► https://www.mysterybox.us\n\n4K PLAYLISTS\n► https://www.youtube.com/playlist?list...\n\nBLOG Check out our blog for great information on working in HDR and 8K. \n► http://www.mysterybox.us/blog\n\nSUBSCRIBE FOR MORE VIDS\n►https://www.youtube.com/user/jacobsch...\n\nMUSIC\n► Storyworks Music \"Promise of Dawn\"\nhttps://soundcloud.com/joshuapeterson/promise-of-dawn\nwww.storyworksmusic.com\n\n► SHOT ON\nRed Weapon LE w/Helium 8K s35 sensor (Stormtrooper33)\nCanon 16-35mm III \nCanon 24-70mm II\nSigma 150-500mm\nZeiss Classic 15mm\nMOVI M10\nAdobe Premiere and DaVinci Resolve\n\n\n\nLICENSING & BUSINESS INQUIRIES\n► contact@mysterybox.us\n\nThis video is subject to copyright owned by Mystery Box LLC. Any reproduction or republication of all or part of this video is expressly prohibited, unless Mystery Box has explicitly granted its prior written consent. All other rights reserved.\n\nCopyright © 2017 Mystery Box, LLC. All Rights Reserved.",
"length": 314,
"thumbnails": [
"thumbnail": [
{
"url": "https://i.ytimg.com/vi/LXb3EKWsInQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC0YPk1n3EyXOsJxvBcJsAgR1umog",
"width": 168,

View file

@ -4,7 +4,7 @@
"title": "100 Girls Vs 100 Boys For $500,000",
"description": "Giving away $25k on Current! Sign up and use my code “BEAST250” for a chance to win*: https://www.current.com/beast250\n\nSUBSCRIBE OR I TAKE YOUR DOG\n╔═╦╗╔╦╗╔═╦═╦╦╦╦╗╔═╗\n║╚╣║║║╚╣╚╣╔╣╔╣║╚╣═╣ \n╠╗║╚╝║║╠╗║╚╣║║║║║═╣\n╚═╩══╩═╩═╩═╩╝╚╩═╩═╝\n\n----------------------------------------------------------------\nfollow all of these or i will kick you\n• TikTok - https://www.tiktok.com/@mrbeast\n• Twitter - https://twitter.com/MrBeast\n• Instagram - https://www.instagram.com/mrbeast\n• Facebook - https://www.facebook.com/MrBeast6000/\n• Official Merch - https://www.shopmrbeast.com/\n• Beast Philanthropy - https://www.beastphilanthropy.org/\n\nText me @ +1 (917) 259-6364\nI'm Hiring! - https://www.mrbeastjobs.com/\nOrder a beast burger 🍔 - https://mrbeastburger.com\nChocolate 🍫 Win a Tesla or be in a MrBeast video - Buy now ▸ https://feastables.com\n-----------------------------------------------------------------—\n\nCurrent is a financial technology company, not a bank. Banking services provided by Choice Financial Group, Member FDIC. The Current Visa Debit Card is issued by Choice Financial Group pursuant to a license from Visa U.S.A. Inc. and may be used everywhere Visa debit cards are accepted.\n\n*NO PURCHASE OR PAYMENT NECESSARY TO ENTER OR WIN. Open to legal residents of the 50 U.S./D.C., age 18+ (19+ in AL and NE, 21+ in MS). Void outside the 50 U.S./D.C. and where prohibited. Sweepstakes starts at 12:00:01 AM ET on 7/9/22; ends at 11:59:59 PM ET on 10/9/22. Odds of winning will depend upon the number of eligible entries received. For full Official Rules and how to enter without becoming a Current member, visit https://www.current.com/beast250. Sponsor: Finco Services, Inc. d/b/a Current, 30 Cooper Square, Floor 4, New York, NY 10003.",
"length": 1013,
"thumbnails": [
"thumbnail": [
{
"url": "https://i.ytimg.com/vi/tVWWp1PqDus/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVfKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBg0pFmrd-KeoxX0Hb_lF9mvekfsw",
"width": 168,