crawl_2.js 4.12 KB
const axios = require('axios');
const crypto = require('crypto');
const mysql = require('mysql2');
const moment = require('moment');
const cron = require('node-cron');
const scheduler = require('node-schedule');

var now = new Date();
require('moment-timezone'); 
moment.tz.setDefault("Asia/Seoul");

  const connection = mysql.createConnection({
    host: 'localhost',
    port: '3307',
    user: 'root',
    password: 'yj',
    database: 'projectdf',
  }).promise();
  const GetItemDrop = async (itemId) => {
    const response = await axios({
      method: 'post',
      url: `http://df.nexon.com/FRM/game/epic_drop.php?id=${itemId}`,
      headers: {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
        'Referer': `http://df.nexon.com/df/info/equipment/view?id=${itemId}&page=3&is_limit=&filter=204&max=100&min=100&level=Y&order_name=level&order_type=asc`,
      },
    });
    return response.data;
  };


let job = scheduler.scheduleJob('*/15 * * * * *',function(){

  var dateT = moment().format('YYYY-MM-DD HH:mm:ss');
  console.log("Start  "+dateT);
  (async () => {
    const [item_list] = await connection.query('SELECT * FROM `item_exception`');
    for (const item of item_list) {
      const data = await GetItemDrop(item.itemId);
      for (const drop of data) {
        const input = {
          itemId: drop.item_no,
          channel_name: drop.channel_name,
          channel_number: drop.channel_number,
          dungeon: drop.dungeon,
          droped_at: moment.unix(drop.time).format('YYYY-MM-DD HH:mm:ss'),
        };
        input['hash'] = crypto.createHash('md5').update(JSON.stringify(input)).digest('hex');
        try {
          await connection.query('INSERT INTO `item_drop_exception` SET ?', input);
        } catch (e) {}
      }
    }
    var dateT2 = moment().format('YYYY-MM-DD HH:mm:ss');
    console.log(dateT+" insert DB Done in" + dateT2);
  })();
});
// await connection.close();-> 크론 작업을 돌리기 때문에 제외


// cron.schedule('*/15 * * * * *', function () {

//   var dateT = moment().format('YYYY-MM-DD HH:mm:ss');
//   console.log("Start  "+dateT);
//   const connection = mysql.createConnection({
//     host: 'localhost',
//     port: '3307',
//     user: 'root',
//     password: 'yj',
//     database: 'projectdf',
//   }).promise();
//   const GetItemDrop = async (itemId) => {
//     const response = await axios({
//       method: 'post',
//       url: `http://df.nexon.com/FRM/game/epic_drop.php?id=${itemId}`,
//       headers: {
//         'Accept': 'application/json, text/javascript, */*; q=0.01',
//         'X-Requested-With': 'XMLHttpRequest',
//         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
//         'Referer': `http://df.nexon.com/df/info/equipment/view?id=${itemId}&page=3&is_limit=&filter=204&max=100&min=100&level=Y&order_name=level&order_type=asc`,
//       },
//     });
//     return response.data;
//   };
//   (async () => {
//     const [item_list] = await connection.query('SELECT * FROM `item_exception`');
//     for (const item of item_list) {
//       const data = await GetItemDrop(item.itemId);
//       for (const drop of data) {
//         const input = {
//           itemId: drop.item_no,
//           channel_name: drop.channel_name,
//           channel_number: drop.channel_number,
//           dungeon: drop.dungeon,
//           droped_at: moment.unix(drop.time).format('YYYY-MM-DD HH:mm:ss'),
//         };
//         input['hash'] = crypto.createHash('md5').update(JSON.stringify(input)).digest('hex');
//         try {
//           await connection.query('INSERT INTO `item_drop_exception` SET ?', input);
//         } catch (e) {}
//       }
//     }
//     var dateT2 = moment().format('YYYY-MM-DD HH:mm:ss');
//     console.log("insert DB Done " + dateT2);
//     await connection.close();
//   })();
//   dateT = moment().format('YYYY-MM-DD HH:mm:ss');
//   console.log("done "+dateT);
// });