Python SMTP Email Code - How to Send HTML Email from Python Code with Authentication at SMTP Server
Introduction This post has the complete code to send email through smtp server…
September 07, 2018
Youtube APIs are great way to fetch details about video or channels. I’ve written a nodejs module for youtube api, and its documentation is available at: Gyanblog Youtube Nodejs Module.
The documentation page describe how you can use the module, fetch details about a video like:
etc
There is an API available in that module: fetchAllVideosFromChannel, which will give a brief detail about each video from a channel. But, to get detailed attributes for a video, you need to call another API: getVideoDetail and getAllCommentsForVideo.
'use strict';
const fs = require('fs');
const async = require('async');
const youtubeService = require('youtube-api-es6').youtubeService;
const youtubeConfig = {
key: 'Your key'
};
return youtubeService.init(youtubeConfig)
.then(function() {
const channelId = 'UCNNxPxH_zIPxvWy5QMFkruA'; //channel ID
return youtubeService.fetchAllVideosFromChannel(channelId)
})
.then(function(allVideos) {
//get details of all videos
return new Promise(function (resolve, reject) {
//get details about each single video in details
async.eachLimit(allVideos, 1,
function (video, callback) {
return youtubeService.getVideoDetail(video.id.videoId)
.then(function (videoDetail) {
return youtubeService.getAllCommentsForVideo(video.id.videoId)
.then(function(comments) {
videoDetail.comments = comments;
return videoDetail;
});
}.bind(this))
.then(function (videoDetail) {
//write in file
const video_filepath = 'result/' + videoDetail.items[0].id + '.json';
console.log('Write in file: ', video_filepath);
fs.writeFileSync(video_filepath, JSON.stringify(videoDetail));
callback();
})
.catch(function (err) {
logger.log('error', err);
callback(err);
});
}.bind(this), function (err) {
if (err) {
reject(err);
} else {
resolve();
}
}
);
}.bind(this));
}.bind(this));
Note: Result folder must exist in aboev example. The code will write filenames in format:
<video_id>.json
Example: RvBJ6XdFfj4.json
Sample output for a video:
{
"comments": [
{
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/cHRQb_eanfimPvW3gfVrnIx112I\"",
"id": "UgxTDLaAnG5ffFyyioR4AaABAg",
"kind": "youtube#commentThread",
"snippet": {
"canReply": true,
"isPublic": true,
"topLevelComment": {
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/b_WVOqHakED1c8XBbafBKnCHDbs\"",
"id": "UgxTDLaAnG5ffFyyioR4AaABAg",
"kind": "youtube#comment",
"snippet": {
"authorChannelId": {
"value": "UCkORvzRSAzfCdoqjix2bKKQ"
},
"authorChannelUrl": "http://www.youtube.com/channel/UCkORvzRSAzfCdoqjix2bKKQ",
"authorDisplayName": "robert Intros",
"authorProfileImageUrl": "https://yt3.ggpht.com/-q_saRhxhAnI/AAAAAAAAAAI/AAAAAAAAAAA/KUIqhCm4FsI/s28-c-k-no-mo-rj-c0xffffff/photo.jpg",
"canRate": true,
"likeCount": 1,
"publishedAt": "2018-08-03T11:36:41.000Z",
"textDisplay": "this is for freign countries not in india homes",
"textOriginal": "this is for freign countries not in india homes",
"updatedAt": "2018-08-03T11:36:41.000Z",
"videoId": "RvBJ6XdFfj4",
"viewerRating": "none"
}
},
"totalReplyCount": 0,
"videoId": "RvBJ6XdFfj4"
}
},
{
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/FIpplXlb9GTpd0sN5QPp75yEg6Y\"",
"id": "UgxuDsgy174uzrg9H6t4AaABAg",
"kind": "youtube#commentThread",
"snippet": {
"canReply": true,
"isPublic": true,
"topLevelComment": {
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/Puxdgvh9B6ttAa5KGrVvbKYZ8jI\"",
"id": "UgxuDsgy174uzrg9H6t4AaABAg",
"kind": "youtube#comment",
"snippet": {
"authorChannelId": {
"value": "UCygc3sRNG_EmaWTXHufnW3A"
},
"authorChannelUrl": "http://www.youtube.com/channel/UCygc3sRNG_EmaWTXHufnW3A",
"authorDisplayName": "Laila Lakshmi Sripathi",
"authorProfileImageUrl": "https://yt3.ggpht.com/-1XWathYsq34/AAAAAAAAAAI/AAAAAAAAAAA/cNTOFQ22VPE/s28-c-k-no-mo-rj-c0xffffff/photo.jpg",
"canRate": true,
"likeCount": 1,
"publishedAt": "2017-11-24T10:04:21.000Z",
"textDisplay": "nice",
"textOriginal": "nice",
"updatedAt": "2017-11-24T10:04:21.000Z",
"videoId": "RvBJ6XdFfj4",
"viewerRating": "none"
}
},
"totalReplyCount": 0,
"videoId": "RvBJ6XdFfj4"
}
},
{
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/4EocfPom6yqVOEqNyruW6T-ezrk\"",
"id": "UghVDICYWi-MMXgCoAEC",
"kind": "youtube#commentThread",
"snippet": {
"canReply": true,
"isPublic": true,
"topLevelComment": {
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/LTbO3uy2JjeqTyX1rGu686gDXEw\"",
"id": "UghVDICYWi-MMXgCoAEC",
"kind": "youtube#comment",
"snippet": {
"authorChannelId": {
"value": "UCUluqA6JeuARlse8Pd9FuYg"
},
"authorChannelUrl": "http://www.youtube.com/channel/UCUluqA6JeuARlse8Pd9FuYg",
"authorDisplayName": "ventende",
"authorProfileImageUrl": "https://yt3.ggpht.com/-szU1YVE5rwM/AAAAAAAAAAI/AAAAAAAAAAA/g9Na6gX-Ncg/s28-c-k-no-mo-rj-c0xffffff/photo.jpg",
"canRate": true,
"likeCount": 1,
"publishedAt": "2017-07-26T00:25:40.000Z",
"textDisplay": "Would be easier to maintain a 3D screen system projecting an aquarium. With all sorts of scenarios.",
"textOriginal": "Would be easier to maintain a 3D screen system projecting an aquarium. With all sorts of scenarios.",
"updatedAt": "2017-07-26T00:26:06.000Z",
"videoId": "RvBJ6XdFfj4",
"viewerRating": "none"
}
},
"totalReplyCount": 0,
"videoId": "RvBJ6XdFfj4"
}
},
{
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/Ml-tMq3ATMVar3Edtu7KzcDkQyo\"",
"id": "Ughzq0vxKMHb-HgCoAEC",
"kind": "youtube#commentThread",
"replies": {
"comments": [
{
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/C5jXW3EzE1170v__DwRQ32h-Qlc\"",
"id": "Ughzq0vxKMHb-HgCoAEC.8LT1ebzH4-w8L_h9qdCMwc",
"kind": "youtube#comment",
"snippet": {
"authorChannelId": {
"value": "UCNNxPxH_zIPxvWy5QMFkruA"
},
"authorChannelUrl": "http://www.youtube.com/channel/UCNNxPxH_zIPxvWy5QMFkruA",
"authorDisplayName": "Plan n Design",
"authorProfileImageUrl": "https://yt3.ggpht.com/-jOyekwseTi0/AAAAAAAAAAI/AAAAAAAAAAA/Kx-yMDRdmcc/s28-c-k-no-mo-rj-c0xffffff/photo.jpg",
"canRate": true,
"likeCount": 0,
"parentId": "Ughzq0vxKMHb-HgCoAEC",
"publishedAt": "2016-11-22T12:26:29.000Z",
"textDisplay": "thanks",
"textOriginal": "thanks",
"updatedAt": "2016-11-22T12:26:29.000Z",
"videoId": "RvBJ6XdFfj4",
"viewerRating": "none"
}
}
]
},
"snippet": {
"canReply": true,
"isPublic": true,
"topLevelComment": {
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/kI82qIiZQQ7Zkzz8N4Q4Hk8eoPQ\"",
"id": "Ughzq0vxKMHb-HgCoAEC",
"kind": "youtube#comment",
"snippet": {
"authorChannelId": {
"value": "UCw21Eo0hzkQwVecUQqp9STA"
},
"authorChannelUrl": "http://www.youtube.com/channel/UCw21Eo0hzkQwVecUQqp9STA",
"authorDisplayName": "Life's Student",
"authorProfileImageUrl": "https://yt3.ggpht.com/-eUO9G6Ar2-M/AAAAAAAAAAI/AAAAAAAAAAA/U4ZzatHJWZI/s28-c-k-no-mo-rj-c0xffffff/photo.jpg",
"canRate": true,
"likeCount": 0,
"publishedAt": "2016-11-19T13:00:24.000Z",
"textDisplay": "you forgot built in fish aquarium (in the tags)",
"textOriginal": "you forgot built in fish aquarium (in the tags)",
"updatedAt": "2016-11-19T13:00:51.000Z",
"videoId": "RvBJ6XdFfj4",
"viewerRating": "none"
}
},
"totalReplyCount": 1,
"videoId": "RvBJ6XdFfj4"
}
}
],
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/ehDMB8rcAP7BzzM0wfQiBiSWwTM\"",
"items": [
{
"contentDetails": {
"caption": "false",
"definition": "hd",
"dimension": "2d",
"duration": "PT1M10S",
"licensedContent": true,
"projection": "rectangular"
},
"etag": "\"XI7nbFXulYBIpL0ayR_gDh3eu1k/gE1XJtoHGLSXTpJW_7B9tquY72Q\"",
"id": "RvBJ6XdFfj4",
"kind": "youtube#video",
"snippet": {
"categoryId": "26",
"channelId": "UCNNxPxH_zIPxvWy5QMFkruA",
"channelTitle": "Plan n Design",
"defaultAudioLanguage": "en-GB",
"defaultLanguage": "en-GB",
"description": "Description of the video",
"title": "22 Extremely Interesting Ideas to put Aquarium in Interior Spaces- Plan n Design"
},
"publishedAt": "2016-08-22T06:15:01.000Z",
"tags": [
"Plan n Design"
],
"thumbnails": {
"default": {
"height": 90,
"url": "https://i.ytimg.com/vi/RvBJ6XdFfj4/default.jpg",
"width": 120
},
"high": {
"height": 360,
"url": "https://i.ytimg.com/vi/RvBJ6XdFfj4/hqdefault.jpg",
"width": 480
},
"maxres": {
"height": 720,
"url": "https://i.ytimg.com/vi/RvBJ6XdFfj4/maxresdefault.jpg",
"width": 1280
},
"medium": {
"height": 180,
"url": "https://i.ytimg.com/vi/RvBJ6XdFfj4/mqdefault.jpg",
"width": 320
},
"standard": {
"height": 480,
"url": "https://i.ytimg.com/vi/RvBJ6XdFfj4/sddefault.jpg",
"width": 640
}
},
"title": "22 Extremely Interesting Ideas to put Aquarium in Interior Spaces- Plan n Design"
},
"statistics": {
"commentCount": "5",
"dislikeCount": "45",
"favoriteCount": "0",
"likeCount": "426",
"viewCount": "131645"
},
"topicDetails": {
"relevantTopicIds": [
"/m/019_rr",
"/m/03glg",
"/m/019_rr",
"/m/03glg"
],
"topicCategories": [
"https://en.wikipedia.org/wiki/Hobby",
"https://en.wikipedia.org/wiki/Lifestyle_(sociology)"
]
}
}
],
"kind": "youtube#videoListResponse",
"pageInfo": {
"resultsPerPage": 1,
"totalResults": 1
}
}
In my case, I tried to fetch planndesign youtube channel, and it fetched me 109 videos currently as of 14 December 2018.
Hope you enjoyed reading this.
Introduction This post has the complete code to send email through smtp server…
This is due to our web server are configured to deny accessing this directory…
Its essential to prepare a git branching strategy. This helps greatly in…
Introduction I have an automation script, that I want to run on different…
Static websites have several advantages over dyanamic websites. If you are…
So, you want to run your code in parallel so that your can process faster, or…
Introduction In this post we will see following: How to schedule a job on cron…
Introduction There are some cases, where I need another git repository while…
Introduction In this post, we will see how to fetch multiple credentials and…
Introduction I have an automation script, that I want to run on different…
Introduction I had to write a CICD system for one of our project. I had to…
Introduction Java log4j has many ways to initialize and append the desired…