Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Module dependencies.
- */
- var express = require('express')
- , jsdom = require('jsdom')
- , request = require('request')
- , url = require('url')
- , app = module.exports = express.createServer()
- , routes = require('./routes')
- , user = require('./routes/user')
- , http = require('http')
- , path = require('path');
- var app = express();
- app.configure(function(){
- app.set('port', process.env.PORT || 3000);
- app.set('views', __dirname + '/views');
- app.set('view engine', 'jade');
- app.use(express.favicon());
- app.use(express.logger('dev'));
- app.use(express.bodyParser());
- app.use(express.methodOverride());
- app.use(app.router);
- app.use(express.static(path.join(__dirname, 'public')));
- });
- app.configure('development', function(){
- app.use(express.errorHandler());
- });
- app.get('/', routes.index);
- app.get('/users', user.list);
- app.get('/nodetube', function (req, res) {
- //Tell the request that we want to fetch youtube.com, send the results to a callback function
- request({
- uri: 'http://youtube.com'
- }, function (err, response, body) {
- var self = this;
- self.items = new Array(); //I feel like I want to save my results in an array
- //Just a basic error check
- if (err && response.statusCode !== 200) {
- console.log('Request error.');
- }
- //Send the body param as the HTML code we will parse in jsdom
- //also tell jsdom to attach jQuery in the scripts
- jsdom.env({
- html: body,
- scripts: ['http://code.jquery.com/jquery-1.6.min.js']
- }, function (err, window) {
- //Use jQuery just as in any regular HTML page
- var $ = window.jQuery,
- $body = $('div #page-container'),
- $videos = $body.find('.lohp-category-shelf-item');
- //I know .video-entry elements contain the regular sized thumbnails
- //for each one of the .video-entry elements found
- $videos.each(function (i, item) {
- //I will use regular jQuery selectors
- var $a = $(item).children('a'),
- //first anchor element which is children of our .video-entry item
- $title = $(item).find('.lohp-video-link').text(),
- //video title
- $time = $a.find('.video-time').text(),
- //video duration time
- $img = $a.find('span.yt-thumb-clip-inner img'); //thumbnail
- //and add all that data to my items array
- self.items[i] = {
- href: $a.attr('href'),
- title: $title.trim(),
- time: $time,
- //there are some things with youtube video thumbnails, those images whose data-thumb attribute
- //is defined use the url in the previously mentioned attribute as src for the thumbnail, otheriwse
- //it will use the default served src attribute.
- thumbnail: $img.attr('data-thumb') ? $img.attr('data-thumb') : $img.attr('src'),
- urlObj: url.parse($a.attr('href'), true) //parse our URL and the query string as well
- };
- });
- res.render('list', {
- title: 'NodeTube',
- items: self.items
- });
- });
- });
- });
- //Pass the video id to the video view
- app.get('/watch/:id', function(req, res){
- res.render('video', {
- title: 'Watch',
- vid: req.params.id
- });
- });
- http.createServer(app).listen(app.get('port'), function(){
- console.log("Express server listening on port " + app.get('port'));
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement