Advertisement
Adam_Martin

Untitled

Oct 4th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var request = require('request');
  2. var cheerio = require('cheerio');
  3.  
  4. //! set db adapter
  5. /* mongodb support */
  6. var mongoskin = null;
  7. try {
  8.   mongoskin = require('mongoskin');
  9. } catch (err) {
  10.  
  11. }
  12.  
  13. if (mongoskin) {
  14.  
  15.   var verifyVersion = function () {
  16.  
  17.     var data = [{
  18.       name: 'PHP',
  19.       url: 'http://www.php.net/',
  20.       getter: function ($) {
  21.         return $('.download-link').eq(0).text().trim();
  22.       },
  23.       chans: ['#php', '#webdev'],
  24.       text: 'Обновление  `PHP`. Новая версия:  %ver'
  25.     }, {
  26.       name: 'jQuery2x',
  27.       url: 'http://code.jquery.com/',
  28.       getter: function ($) {
  29.         return $('div#content ul').eq(0).text().replace(/\-.+/g, '').trim().replace(/.+\s/, '');
  30.       },
  31.       chans: ['#javascript', '#webdev'],
  32.       text: 'Обновление  `jQuery Core 2.x`. Новая версия:  %ver'
  33.     }, {
  34.       name: 'jQuery1x',
  35.       url: 'http://code.jquery.com/',
  36.       getter: function ($) {
  37.         return $('div#content ul').eq(1).text().replace(/\-.+/g, '').trim().replace(/.+\s/, '');
  38.       },
  39.       chans: ['#javascript', '#webdev'],
  40.       text: 'Обновление  `jQuery Core 1.x`. Новая версия:  %ver'
  41.     }, {
  42.       name: 'NodeJS',
  43.       url: 'http://nodejs.org/download/',
  44.       getter: function ($) {
  45.         return $('.version').text().trim().replace(/.+:\sv/, '');
  46.       },
  47.       chans: ['#javascript', '#webdev'],
  48.       text: 'Обновление  `Node.js`. Новая версия:  %ver'
  49.     }, {
  50.       name: 'frontender.info',
  51.       url: 'http://frontender.info/',
  52.       getter: function ($) {
  53.         return $('h2 a').eq(0).text().trim();
  54.       },
  55.       chans: ['#javascript', '#webdev'],
  56.       text: 'Обновление  http://frontender.info - новая статья:  %ver'
  57.     }];
  58.  
  59.     data.forEach(function (item) {
  60.       request(item.url, function (error, response, body) {
  61.         if (error) {
  62.           return;
  63.         }
  64.  
  65.         var $ = cheerio.load(body);
  66.  
  67.         var version = item.getter($);
  68.         if (!version) {
  69.           return;
  70.         }
  71.  
  72.         var name = item.name;
  73.         var query = {
  74.           name: name
  75.         };
  76.  
  77.         mongo.collection('versioner').findOne(query, function (err, doc) {
  78.           if (err) {
  79.             return;
  80.           }
  81.  
  82.           var last_version;
  83.  
  84.           if (doc) {
  85.             last_version = doc.last || null;
  86.           }
  87.  
  88.           if (!doc || (version !== last_version)) {
  89.             var new_version = {
  90.               name: name,
  91.               last: version,
  92.               prev: last_version,
  93.               update: new Date()
  94.             };
  95.  
  96.             mongo.collection('versioner').update(query, new_version, {
  97.               upsert: true
  98.             });
  99.  
  100.             var msg = item.text.replace('%ver', version);
  101.  
  102.             item.chans.forEach(function (el) {
  103.               bot.say(el, msg);
  104.             });
  105.  
  106.           }
  107.         });
  108.       });
  109.  
  110.     });
  111.  
  112.   };
  113.  
  114.   var mongo = null;
  115.   module.exports = {
  116.     //    pattern: '0 0 */4 * * *',
  117.     pattern: '0 0 * * * *',
  118.     onInterval: verifyVersion,
  119.     onLoad: function () {
  120.       mongo = mongoskin.db('localhost:22022/ircbot');
  121.     },
  122.     onUnload: function () {}
  123.   }
  124. } else {
  125.   module.exports = {};
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement