Akhidjon

merging

1 +dd
...\ No newline at end of file ...\ No newline at end of file
1 +니툰내툰 URL : http://52.79.239.80:3000
2 +
3 +2013100924 이현종
4 +2018102151 Abdullaev Akhidjon
5 +
6 +1. 네이버, 구글 로그인을 추가하였습니다.
7 +
8 +2. 레진 코믹스 웹툰을 추가하였습니다.
9 +
10 +3. 코드의 생산성을 증가시켰습니다.
11 +(코드의 중복과 필요없는 부분을 삭제함, 주석을 달음)
...@@ -47,7 +47,6 @@ var mytoons = require('./routes/mytoons'); ...@@ -47,7 +47,6 @@ var mytoons = require('./routes/mytoons');
47 var yourtoons =require('./routes/yourtoons'); 47 var yourtoons =require('./routes/yourtoons');
48 var setting = require('./routes/setting'); 48 var setting = require('./routes/setting');
49 49
50 -
51 // 최초 로그인 성공시 (Strategy 성공시) 단 한번만 호출 50 // 최초 로그인 성공시 (Strategy 성공시) 단 한번만 호출
52 passport.serializeUser(function(user, done) { 51 passport.serializeUser(function(user, done) {
53 console.log('serialized'); 52 console.log('serialized');
......
...@@ -9,27 +9,27 @@ var NaverStrategy = require('passport-naver').Strategy; ...@@ -9,27 +9,27 @@ var NaverStrategy = require('passport-naver').Strategy;
9 var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; 9 var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
10 var router = express.Router(); 10 var router = express.Router();
11 11
12 -// 설명 12 +// kakao login API
13 var kakaoKey = { 13 var kakaoKey = {
14 clientID : '5634a5f8ca5c9a5eb378d6b6e6e869a0', 14 clientID : '5634a5f8ca5c9a5eb378d6b6e6e869a0',
15 callbackURL : '/auth/login/kakao/callback' 15 callbackURL : '/auth/login/kakao/callback'
16 }; 16 };
17 17
18 -// 18 +// naver login API
19 var naverKey = { 19 var naverKey = {
20 clientID : 'OHmCrpQuVFnIEB4GkmF_', 20 clientID : 'OHmCrpQuVFnIEB4GkmF_',
21 callbackURL : '/auth/login/naver/callback', 21 callbackURL : '/auth/login/naver/callback',
22 clientSecret : 'BBgcRdnj0M' 22 clientSecret : 'BBgcRdnj0M'
23 }; 23 };
24 24
25 -// 25 +// google login API
26 var googleKey = { 26 var googleKey = {
27 clientID : '924802195853-ir977i2ohnddaaninlqlbeg6sov629hq.apps.googleusercontent.com', 27 clientID : '924802195853-ir977i2ohnddaaninlqlbeg6sov629hq.apps.googleusercontent.com',
28 callbackURL : '/auth/login/google/callback', 28 callbackURL : '/auth/login/google/callback',
29 clientSecret : 'NaWeoJouUzYq4VfBesTkdUfA' 29 clientSecret : 'NaWeoJouUzYq4VfBesTkdUfA'
30 }; 30 };
31 31
32 -// 32 +// kakao passport
33 passport.use(new KakaoStrategy(kakaoKey, 33 passport.use(new KakaoStrategy(kakaoKey,
34 function(accessToken, refreshToken,params, profile, done) { 34 function(accessToken, refreshToken,params, profile, done) {
35 console.log(profile); 35 console.log(profile);
...@@ -41,7 +41,7 @@ passport.use(new KakaoStrategy(kakaoKey, ...@@ -41,7 +41,7 @@ passport.use(new KakaoStrategy(kakaoKey,
41 } 41 }
42 )); 42 ));
43 43
44 -// 44 +// naver passport
45 passport.use(new NaverStrategy(naverKey, 45 passport.use(new NaverStrategy(naverKey,
46 function (accessToken, refreshToken, profile, done) { 46 function (accessToken, refreshToken, profile, done) {
47 console.log(profile); 47 console.log(profile);
...@@ -53,7 +53,7 @@ passport.use(new NaverStrategy(naverKey, ...@@ -53,7 +53,7 @@ passport.use(new NaverStrategy(naverKey,
53 } 53 }
54 )); 54 ));
55 55
56 -// 56 +// google passport
57 passport.use(new GoogleStrategy(googleKey, 57 passport.use(new GoogleStrategy(googleKey,
58 function (accessToken, refreshToken, profile, done) { 58 function (accessToken, refreshToken, profile, done) {
59 console.log(profile); 59 console.log(profile);
...@@ -68,29 +68,28 @@ passport.use(new GoogleStrategy(googleKey, ...@@ -68,29 +68,28 @@ passport.use(new GoogleStrategy(googleKey,
68 // kakao 로그인, 로그인 콜백 68 // kakao 로그인, 로그인 콜백
69 router.get('/auth/login/kakao', passport.authenticate('kakao')); 69 router.get('/auth/login/kakao', passport.authenticate('kakao'));
70 router.get('/auth/login/kakao/callback', passport.authenticate('kakao', { 70 router.get('/auth/login/kakao/callback', passport.authenticate('kakao', {
71 - successRedirect: '/mytoons', 71 + successRedirect: '/mytoons',
72 - failureRedirect: '/' 72 + failureRedirect: '/'
73 - }) 73 + })
74 ); 74 );
75 75
76 -// naver 로그인 76 +// naver 로그인, 로그인 콜백
77 router.get('/auth/login/naver', passport.authenticate('naver')); 77 router.get('/auth/login/naver', passport.authenticate('naver'));
78 -router.get('/auth/login/naver/callback', 78 +router.get('/auth/login/naver/callback', passport.authenticate('naver', {
79 - passport.authenticate('naver', { 79 + successRedirect: '/mytoons',
80 - successRedirect: '/mytoons', 80 + failureRedirect: '/'
81 - failureRedirect: '/'
82 }) 81 })
83 ); 82 );
84 83
85 // facebook 로그인, 로그인 콜백 84 // facebook 로그인, 로그인 콜백
86 router.get('/auth/login/google', passport.authenticate('google', { scope: ['email profile'] })); 85 router.get('/auth/login/google', passport.authenticate('google', { scope: ['email profile'] }));
87 router.get('/auth/login/google/callback', passport.authenticate('google', { 86 router.get('/auth/login/google/callback', passport.authenticate('google', {
88 - successRedirect: '/mytoons', 87 + successRedirect: '/mytoons',
89 - failureRedirect: '/' 88 + failureRedirect: '/'
90 }) 89 })
91 ); 90 );
92 91
93 -// 설명 92 +// 로그인 처리
94 function loginByThirdparty(info, done) { 93 function loginByThirdparty(info, done) {
95 var stmt_duplicated = "select *from `user` where id = id"; 94 var stmt_duplicated = "select *from `user` where id = id";
96 //'select *from `user` where `id` = ? 95 //'select *from `user` where `id` = ?
...@@ -125,27 +124,27 @@ function loginByThirdparty(info, done) { ...@@ -125,27 +124,27 @@ function loginByThirdparty(info, done) {
125 }); 124 });
126 } 125 }
127 126
128 -router.get('/login', function(req,res){ 127 +router.get('/login', function(req,res) {
129 res.render('login_page') 128 res.render('login_page')
130 }) 129 })
131 130
132 131
133 // 라우터 설정, 카카오 132 // 라우터 설정, 카카오
134 router.get('/auth/logout/kakao',function (req,res) { 133 router.get('/auth/logout/kakao',function (req,res) {
135 - req.logout(); 134 + req.logout();
136 - res.redirect('/'); 135 + res.redirect('/');
137 }) 136 })
138 137
139 // 라우터 설정, 페이스북 138 // 라우터 설정, 페이스북
140 router.get('/auth/logout/naver',function (req,res) { 139 router.get('/auth/logout/naver',function (req,res) {
141 - req.logout(); 140 + req.logout();
142 - res.redirect('/'); 141 + res.redirect('/');
143 }) 142 })
144 143
145 // 라우터 설정, 구글 144 // 라우터 설정, 구글
146 router.get('/auth/logout/google',function (req,res) { 145 router.get('/auth/logout/google',function (req,res) {
147 - req.logout(); 146 + req.logout();
148 - res.redirect('/'); 147 + res.redirect('/');
149 }) 148 })
150 149
151 // 150 //
...@@ -175,20 +174,27 @@ function gettop(){ ...@@ -175,20 +174,27 @@ function gettop(){
175 }; 174 };
176 175
177 176
178 -function getDaumToons(_day){ 177 +var daumCount = 0;
179 - // X요일 다음 웹툰 178 +
179 +//_day요일의 다음웹툰 불러오기
180 +function getDaumToons(_day) {
181 +
180 var day = _day; 182 var day = _day;
181 var day_name = day; 183 var day_name = day;
182 var daum = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${day}?timeStamp=1515819276574`; 184 var daum = `http://webtoon.daum.net/data/pc/webtoon/list_serialized/${day}?timeStamp=1515819276574`;
183 var site = 'daum'; 185 var site = 'daum';
184 186
185 - client.fetch(daum, {}, function (err, $, res, body) { 187 + client.fetch(daum, {}, function (err, $, res, body){
186 188
187 - var data = JSON.parse(body); 189 + var data = JSON.parse(body);
188 - var list = data["data"]; 190 + var list = data["data"];
189 191
192 + if(err) {
193 + console.log("다음웹툰 DB 에러 : " + err);
194 + } else {
190 list.forEach(function (item, idx) { 195 list.forEach(function (item, idx) {
191 196
197 +<<<<<<< HEAD
192 var webtoon_link = 'http://webtoon.daum.net/webtoon/view/' + item.nickname.toString(); 198 var webtoon_link = 'http://webtoon.daum.net/webtoon/view/' + item.nickname.toString();
193 var webtoon = { 199 var webtoon = {
194 toon_index : item.id, 200 toon_index : item.id,
...@@ -202,14 +208,35 @@ function getDaumToons(_day){ ...@@ -202,14 +208,35 @@ function getDaumToons(_day){
202 }; 208 };
203 209
204 allWebtoonList.push(webtoon); 210 allWebtoonList.push(webtoon);
211 +=======
212 + var webtoon_link = 'http://webtoon.daum.net/webtoon/view/' + item.nickname.toString();
213 + var webtoon = {
214 + toon_index : item.id,
215 + name : item.title,
216 + thum_link : item.pcThumbnailImage.url,
217 + webtoon_link : webtoon_link,
218 + week : day_name,
219 + site : site,
220 + latest : 0
221 + };
222 + daumCount++;
223 + allWebtoonList.push(webtoon);
224 +>>>>>>> 0b039040370950fe61e1c6ae5d5cf6650db9652f
205 }); 225 });
226 + }
206 }); 227 });
207 } 228 }
208 229
209 -// 230 +// 네이버 전체 웹툰 불러오기
210 -function getNaverToons(){ 231 +function getNaverToons() {
232 +
211 var allWeeklyToonsUrl = "http://comic.naver.com/webtoon/weekday.nhn"; 233 var allWeeklyToonsUrl = "http://comic.naver.com/webtoon/weekday.nhn";
234 + // 네이버 웹툰 개수
235 + var naverCount = 0;
236 + var webtoonCount = 0;
237 +
212 request(allWeeklyToonsUrl,function (err, res, html) { 238 request(allWeeklyToonsUrl,function (err, res, html) {
239 +<<<<<<< HEAD
213 if(!err){ 240 if(!err){
214 var $ = cheerio.load(html); 241 var $ = cheerio.load(html);
215 var p = Promise.resolve(); 242 var p = Promise.resolve();
...@@ -247,11 +274,54 @@ function getNaverToons(){ ...@@ -247,11 +274,54 @@ function getNaverToons(){
247 } 274 }
248 }); 275 });
249 }) 276 })
277 +=======
278 + if(!err){
279 + var $ = cheerio.load(html);
280 + var p = Promise.resolve();
281 + var eachs = $(".thumb").each(function (i) {
282 +
283 + var week = $(this).parent().parent().prev().attr('class');
284 + var webtoon_link = "http://comic.naver.com" + $(this).children().first().attr('href');
285 + var thumb_link = $(this).children().first().children().first().attr('src');
286 + var name = $(this).next().text();
287 + var titleid = webtoon_link.split('?')[1].split('&')[0].split('=')[1];
288 + var site = 'naver';
289 + var webtoon= {
290 + toon_index: titleid,
291 + name : name,
292 + thum_link : thumb_link,
293 + webtoon_link : webtoon_link,
294 + week : week,
295 + site : site,
296 + latest : 0
297 + };
298 + naverCount++;
299 + allWebtoonList.push(webtoon);
300 + });
301 +
302 + p.then(function() {
303 + i = 0;
304 + allWebtoonList.forEach(function (webtoon) {
305 + var sql= "INSERT INTO `toon` (toon_index, name, thum_link, webtoon_link, week, site, latest) VALUES(?) ON DUPLICATE KEY UPDATE latest=latest";
306 + var values=[webtoon.toon_index, webtoon.name, webtoon.thum_link, webtoon.webtoon_link,webtoon.week, webtoon.site, webtoon.latest];
307 +
308 + connection.query(sql,[values],function(err,result){
309 + if(err) {
310 + console.log("웹툰 DB 에러 : " + err);
311 + } else {
312 + webtoonCount++;
313 + console.log(`웹툰 ${webtoonCount}개 DB처리 완료!`);
314 + }
315 +>>>>>>> 0b039040370950fe61e1c6ae5d5cf6650db9652f
250 }); 316 });
251 - } 317 + })
318 + });
319 + }
320 + console.log(`다음웹툰 ${daumCount}개, 네이버웹툰 ${naverCount}개`)
252 }); 321 });
253 } 322 }
254 323
324 +<<<<<<< HEAD
255 325
256 326
257 327
...@@ -261,6 +331,9 @@ function getTomicsToons(){ ...@@ -261,6 +331,9 @@ function getTomicsToons(){
261 } 331 }
262 332
263 // 설명 333 // 설명
334 +=======
335 +// 모든 웹툰을 담고있는 배열
336 +>>>>>>> 0b039040370950fe61e1c6ae5d5cf6650db9652f
264 allWebtoons = new Array(); 337 allWebtoons = new Array();
265 338
266 // 설명 339 // 설명
......
...@@ -2,42 +2,40 @@ var express = require('express'); ...@@ -2,42 +2,40 @@ var express = require('express');
2 var async = require('async'); 2 var async = require('async');
3 var router = express.Router(); 3 var router = express.Router();
4 4
5 -function getMyToons(id,cb){ 5 +function getMyToons(id,cb) {
6 - //id 값을 가진 user가 저장한 웹툰들 가져오기 6 + //id 값을 가진 user가 저장한 웹툰들 가져오기
7 - var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;"; 7 + var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;";
8 - var mylist = new Array(); 8 + var mylist = new Array();
9 - connection.query(sqlquery,id,function(err,rows,result){ 9 + connection.query(sqlquery,id,function(err,rows,result) {
10 - if(!err){ 10 + if(!err) {
11 - mylist=rows; 11 + mylist=rows;
12 - cb(mylist); 12 + cb(mylist);
13 - console.log(mylist); 13 + console.log(mylist);
14 - }else{ 14 + } else {
15 - console.log("내 웹툰 리스트 가져오는데 실패했습니다!"); 15 + console.log("내 웹툰 리스트 가져오는데 실패했습니다!");
16 - //throw err; 16 + //throw err;
17 - } 17 + }
18 - }); 18 + });
19 } 19 }
20 20
21 /* GET home page. */ 21 /* GET home page. */
22 router.get('/', function(req, res, next) { 22 router.get('/', function(req, res, next) {
23 - if(!req.isAuthenticated()){ 23 + if(!req.isAuthenticated()) {
24 - res.redirect('/'); 24 + res.redirect('/');
25 - }else{ 25 + } else {
26 - async.series( 26 + async.series([
27 - [ 27 + function(callback){
28 - function(callback){ 28 + getMyToons(req.user.user_id, function (mytoon_list) {
29 - getMyToons(req.user.user_id, function (mytoon_list) { 29 + callback(null,mytoon_list);
30 - callback(null,mytoon_list); 30 + });
31 - }); 31 + }],
32 - } 32 + function(err, results){
33 - ], 33 + res.render('mytoons', {
34 - function(err, results){ 34 + mytoons: results[0]
35 - res.render('mytoons', { 35 + });
36 - mytoons: results[0] 36 + }
37 - }); 37 + );
38 - } 38 + }
39 - );
40 - }
41 }); 39 });
42 40
43 module.exports = router; 41 module.exports = router;
......
...@@ -2,70 +2,69 @@ var express = require('express'); ...@@ -2,70 +2,69 @@ var express = require('express');
2 var router = express.Router(); 2 var router = express.Router();
3 3
4 function addMyToons(id,index,cb){ 4 function addMyToons(id,index,cb){
5 - connection.query("INSERT INTO user_toon_relation SET ?;", {user_id : id,toon_index : index},function (err) { 5 + connection.query("INSERT INTO user_toon_relation SET ?;", {user_id : id,toon_index : index},function (err) {
6 - 6 + if(err) {
7 - if(err) { 7 + throw err;
8 - throw err; 8 + console.log("내 웹툰 추가 중 에러!")
9 - console.log("내 웹툰 추가 중 에러!") 9 + } else {
10 - } else{ 10 + alert("추가되었습니다.")
11 - // alert("추가되었습니다.") 11 + cb();
12 - cb(); 12 + }
13 - } 13 + });
14 - });
15 } 14 }
16 15
17 //내툰 수정하기 16 //내툰 수정하기
18 -router.post('/toggle_toon',function(req,res,next){ 17 +router.post('/toggle_toon',function(req,res,next) {
19 - var index = req.body.toon_index; 18 + var index = req.body.toon_index;
20 - var id = req.user.user_id; 19 + var id = req.user.user_id;
21 - connection.query("SELECT COUNT(*) FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"'", [id,index], function (err, rows,result) { 20 + connection.query("SELECT COUNT(*) FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"'", [id,index], function (err, rows,result) {
22 - if(err) { 21 + if(err) {
23 - console.log("내 웹툰 등록 중 에러!"); 22 + console.log("내 웹툰 등록 중 에러!");
24 - } else { 23 + } else {
25 - var count = rows[0]["COUNT(*)"]; 24 + var count = rows[0]["COUNT(*)"];
26 - if(count>0) {//이미 등록되어 있는 것이라면, 25 + if(count > 0) { //이미 등록되어 있는 것이라면,
27 - connection.query("DELETE FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"';", [id, index],function (err, rows, result) { 26 + connection.query("DELETE FROM user_toon_relation WHERE user_id='"+id+"' && toon_index='"+index+"';", [id, index],function (err, rows, result) {
28 - if(err) { 27 + if(err) {
29 - console.log("내 웹툰 제거중 에러!"); 28 + console.log("내 웹툰 제거중 에러!");
30 - throw err; 29 + throw err;
31 - } else { 30 + } else {
32 - //alert("제거되었습니다.") 31 + alert("제거되었습니다.")
33 - res.redirect('/setting'); 32 + res.redirect('/setting');
34 - } 33 + }
35 - }); 34 + });
36 - } else { 35 + } else {
37 - addMyToons(id,index,function(){ 36 + addMyToons(id,index,function() {
38 - res.redirect('/setting'); 37 + res.redirect('/setting');
39 - }); 38 + });
40 - } 39 + }
41 - } 40 + }
42 - }); 41 + });
43 }); 42 });
44 43
45 // 44 //
46 function getMyToons(id,cb){ 45 function getMyToons(id,cb){
47 - //mysql5.7 syntax에 맞게 수정 => 로그인한 유저의 46 + //mysql5.7 syntax에 맞게 수정 => 로그인한 유저의
48 - var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;"; 47 + var sqlquery = "SELECT t.toon_index, t.name, t.thum_link, t.webtoon_link, t.week, t.site FROM user u, user_toon_relation ur, toon t WHERE u.id = '"+id+"' && u.id=ur.user_id && t.toon_index=ur.toon_index;";
49 - var mylist = new Array(); 48 + var mylist = new Array();
50 - connection.query(sqlquery,id,function(err,rows,result){ 49 + connection.query(sqlquery,id,function(err,rows,result) {
51 - if(!err){ 50 + if(!err) {
52 - mylist=rows; 51 + mylist = rows;
53 - cb(mylist); 52 + cb(mylist);
54 - }else{ 53 + } else {
55 - router.get('/') 54 + router.get('/')
56 - console.log("내 웹툰 리스트 가져오는데 실패했습니다!"); 55 + console.log("내 웹툰 리스트 가져오는데 실패했습니다!");
57 - //throw err; 56 + //throw err;
58 - } 57 + }
59 - }); 58 + });
60 } 59 }
61 60
62 router.get('/', function(req, res, next) { 61 router.get('/', function(req, res, next) {
63 - getMyToons(req.user.user_id,function (mytoons) { 62 + getMyToons(req.user.user_id,function (mytoons) {
64 - res.render('setting',{ 63 + res.render('setting',{
65 - alltoons : allWebtoons, 64 + alltoons : allWebtoons,
66 - mytoons : mytoons 65 + mytoons : mytoons
67 - }); 66 + });
68 - }) 67 + })
69 }); 68 });
70 69
71 module.exports = router; 70 module.exports = router;
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.