index.js 7.79 KB
module.exports = function(app){
var cheerio = require('cheerio');

var request = require("request");
var urlenconde = require('urlencode');
var api_key = "RGAPI-8ba6778e-a2df-4512-b19a-127217dd514c";


// //js 전송
// var express = require('express');
// app.use("/view", express.static(__dirname + '../lib/fullcalendar.css'));
// app.use("/view", express.static(__dirname + '../lib/fullcalendar.print.css'));
// app.use("/view", express.static(__dirname + '../lib/moment.min.js'));
// app.use("/view", express.static(__dirname + '../lib/jquery.min.js'));
// app.use("/view", express.static(__dirname + '../lib/fullcalendar.min.js'));



//정보
// $userid = $get_id[$username]['id']; // ID
// $nick = $get_id[$username]['name']; // 닉네임
// $level = $get_id[$username]['summonerLevel']; // 레벨
// $profileIcon = $get_id[$username]['profileIconId']; // 프로필아이콘번호
var userid;
var name;
var profileIconId;
var revisionDate;
var id;
var accountId;
var summonerLevel;
var formattedTime = new Array();;
var formattedTime2 = new Array();;
var color = new Array();

var print1 = new Array();;
var print2 = new Array();;

var total = new Array();;
var total2 = new Array();;
var fisrtGame = "";
var lastGame = "";

var matchgamelist = new Array();
var gameplaytime = new Array();


  app.get('/', function(req, res) {
  	  res.render('index', { title: '또 게임헤' });
  });

  app.get('/search/:username/', function(req, res){
    //롤 api url
    name = req.params.username;

      //////////////////////////////////////////////////
      // 1. api를 통해 닉네일으로 고유 아이디 찾기
      //입력받은 닉네임의 사용자 정보 요청 api
      var url ="https://kr.api.riotgames.com/lol/summoner/v3/summoners/by-name/"+urlenconde(name)+"?api_key="+ api_key ;

      request( url,function(error,response,body){
      var obj = JSON.parse(body);


      accountId = obj["accountId"];
      id = obj["id"];
      summoner = obj["name"];
      profileIconId = obj["profileIconId"];
      summonerLevel = obj["summonerLevel"];
      revisionDate = obj["revisionDate"];

      ///////////////////////////////////////////////////////////////
      //2.최근 게임 정보 요청 api
      //위에서 받은 고유 아이디를 통해 최근 게임들 정보를 받음
      var currnetGame;
      currnetGameUrl = "https://kr.api.riotgames.com/lol/match/v3/matchlists/by-account/" +accountId +"?api_key="+ api_key ;
      //var date = new Date(1127919625*1000); //유닉스 시간으로 반환 반환
       var info_champ_json;
       var champions;

      request(currnetGameUrl , function(error,response,body){

             info_champ_json = JSON.parse(body);
             champions = info_champ_json["matches"];

             var champions_length = Object.keys(champions).length;
             for(var i=0; i < champions_length; i++){
               total[i] = champions[i]["timestamp"]; // 게임 날짜 추출
               matchgamelist[i] = champions[i]["gameId"]; //게임 고유 아이디 추출
               //console.log(matchgamelist[i]);
               var t = 	new Date(total[i]);
               t = t.toLocaleString();
               // console.log(t );
               total[i] = t;
               if(i == 0){
                 fisrtGame = total[0];
               }
                lastGame = total[i];
           }
           if(fisrtGame != "" ){

             var a = new Array();
             a = fisrtGame.split(" ");
             fisrtGame = a[0];
             a = lastGame.split(" ");
             lastGame = a[0];
             //console.log(fisrtGame );
             //console.log(lastGame );
         }

     });
     // for( var q = 0 ; q < matchgamelist.length ; q++){
     //   console.log(matchgamelist[q]);
     // }
     //////////////////////////////////////////////////////
     //3. 게임 상세 정보 얻기
     //위에서 얻은 게임아이디를 통해 다시 게임 플레이시간 추출
     // var infoGame;
     // var info_game_json;
     // var gamess;
     //
     //  for( var i = 0 ; i < 20 ; i++){
     //    //if(i == 20){for(var j = 0; j< 10000; j++)  ;}
     //      infoGame = "https://kr.api.riotgames.com/lol/match/v3/matches/" + matchgamelist[i] +"?api_key="+ api_key ;
     //     request(infoGame , function(error,response,body){
     //
     //            info_game_json = JSON.parse(body);
     //            gameplaytime[i]  = info_game_json["gameDuration"]; //게임 플레이시간 추출
     //            gameplaytime[i] = Number(gameplaytime[i])/60;
     //            console.log( gameplaytime[i] );
     //        //  }
     //    });
     //  }


     //3벙능ㄹ 사용중위 api 요청횟수 제한으로 스크래핑을 사용
     //스크래핑 : 다전적 사이트를 통해 스크래핑
      var i = 0;

       var opgg = "http://www.op.gg/summoner/userName=" + name;
       request(opgg, function (err, res, html) {
            if (!err) {
                var $ = cheerio.load(html);

                $("div.TimeStamp").each(function (i) {
                  // do something
                  var data = $(this).text();
                  data = data.slice(0,10);
                  formattedTime[i] = data; i++;
                  //console.log(data );
                  //값 형식 //2017-11-29 23:56:23
                })

                $("div.GameLength").each(function (i) {
                  // do something
                  var data = $(this).text();
                  data = data.slice(0,2);
                  formattedTime2[i] = data;
                  //console.log( data );
                  //값 형식 //15m 15s

                })
            }
        });

        var c = 0;
        var k = 0;//중복 x
        print1[0] = formattedTime[0];
        print2[0] = formattedTime2[0];

        for(var p = 0; p < formattedTime.length ;p++){
          if(formattedTime[p] == formattedTime[p+1]){
            k = 1;
            print1[c] = formattedTime[p+1];
            print2[c] = Number(print2[c]) + Number(formattedTime2[p+1]);
            // console.log(print1[c]);
            // console.log(print2[c]);

            //console.log(formattedTime2[p+1]);
          }else {
            c++;
            print2[c] = "";
            if(k != 0){
              print1[c] = formattedTime[p+1];
              print2[c] = Number(formattedTime2[p+1]);
              // console.log(print1[c]);
              // console.log(print2[c]);

            }
            k = 0;
          }
        }

        for ( var p = 0 ; p < print1.length ; p++) {
          print1[p] = "'" + print1[p] +  "'";

        }

          //검정 250분 이상
          //빨강 200분 미만
          //주황 150분미만
          //노랑 100분 미만
          //초록 40분 미만

        for ( var p = 0 ; p < print2.length ; p++) {

            if( Number(print2[p]) <= 40 && Number(print2[p]) > 0){
              color[p] = "A";}
            else if( Number(print2[p]) <= 100 && Number(print2[p]) > 40){
              color[p] = "B"; }
            else if( Number(print2[p]) <= 150 && Number(print2[p]) >  100){
              color[p] = "C";}
            else if( Number(print2[p]) <= 250 && Number(print2[p]) >  150){
              color[p] = "D";}
            else if( Number(print2[p]) <= 250 && Number(print2[p]) >  1000){
              color[p] = "E";}
            else{
              color[p] = "F"; }

          //console.log(color[p]);
        }



            res.render('index2', {  title: '또게임해?',
              name: req.params.username ,
              _id :id,
              _profileIconId : profileIconId,
              _summonerLevel : summonerLevel,//레벨
              _revisionDate : revisionDate,
              _day :print1,
              _time :print2,
              _color : color,
              _total : total,
              _fisrtGame : fisrtGame,
              _lastGame : lastGame
              });

      });
    });

};