crawl.js 2.56 KB
const axios = require('axios');
const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'localhost',
  port: '3307',
  user: 'root',
  password: 'yj',
  database: 'projectdf',
}).promise();

const GetItem = async (filter, page) => {
  // filter = 에픽(204), 신화(207)
  const response = await axios({
    method: 'post',
    url: 'http://df.nexon.com/FRM/info/equipment_search_api.php',
    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',
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
      'Referer': 'http://df.nexon.com/df/info/equipment/search?page=1&is_limit=&filter=207&max=100&min=100&level=Y&order_name=level&order_type=asc',
    },
    data: `mode=search&data[keyword]=&data[filter]=${filter}&data[level]=Y&data[min]=100&data[max]=100&data[setitem]=N&data[order_name]=level&data[order_type]=asc&page=${page}`,
  });
  return response.data.data.items;
};

(async () => {

  const ex = /.운디네|.샐러맨더|.실프|포용의|맹렬히|휘감는|잔잔한|신록의 숨결|에너지 분배 제어기|전자기 진공관|제어 회로|무의식 : .|무형 : .|환영 : .|원초의 꿈.|진 :.|.결투장|퍼펙트 컨트롤|불타오르는 푸른 마력|암살자의 비수|마더 오브 네이쳐|거미 여왕의 목소리|풀 가드 네클레스|선지자의 목걸이|생멸 관장자의 팔찌|독을 머금은 가시장갑|할기의 링|올 엘리멘탈 크리스탈|웨슬리의 전술지휘봉|볼 오브 러데이니언|금지된 계약의 서|응축된 마력의 소용돌이|청면수라의 가면|얼어붙은 숨결의 결정|뒤틀린 이계의 마석|영광의 보석|적귀의 차원석|패스트퓨처 이어링|무념의 의식|무의식의 꽃|무형의 절개|무언의 죄악|무아의 고리/ig;
  const filter_list = ['204', '207'];
  for (const filter of filter_list) {
    let page = 1;
    while (true) {
      const data = await GetItem(filter, page);
      for (const item of data) {
        try {
          if (item.name.match(ex) == null) {
            await connection.query('INSERT INTO `item_exception` SET ?', {
              itemId: item.itemId,
              name: item.name,
              type: (filter === '204') ? 'epic' : 'myth',
            });
          }
        } catch (e) {}
      }
      if (data.length === 0) {
        break;
      }
      page++;
    }
  }
  await connection.close();
})();