Toggle navigation
Toggle navigation
This project
Loading...
Sign in
김동근
/
WhoAreYou
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
서주원
2018-12-03 15:48:01 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
f9464daefb00e14da8bbbb2c42b2df0a7c326b1a
f9464dae
1 parent
d62afbbe
implement crawling deck.codes
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
169 additions
and
28 deletions
api/deck/crawler.js
api/deck/index.js
api/deck/newDeck.js
api/user/login.js
api/user/signUp.js
mysql.js → database/mysql.js
database/user/findById.js
package-lock.json
package.json
views/html/newdeck.html
api/deck/crawler.js
0 → 100644
View file @
f9464da
const
request
=
require
(
'request'
)
const
iconv
=
require
(
'iconv-lite'
)
const
charset
=
require
(
'charset'
)
exports
.
Crawl
=
(
deckCode
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
request
({
url
:
`https://deck.codes/
${
deckCode
}
`
,
encoding
:
null
,
method
:
'GET'
,
timeout
:
10000
,
followRedirect
:
true
,
maxRedirects
:
10
,
},(
err
,
res
,
body
)
=>
{
if
(
!
err
&&
res
.
statusCode
===
200
){
const
enc
=
charset
(
res
.
headers
,
body
)
const
decodedResult
=
iconv
.
decode
(
body
,
enc
)
resolve
(
decodedResult
)
}
else
console
.
log
(
`error :
${
res
.
statusCode
}
`
)
})
})
}
api/deck/index.js
View file @
f9464da
const
express
=
require
(
'express'
)
const
router
=
express
.
Router
()
const
newDeck
=
require
(
'./newDeck'
)
router
.
post
(
'/newdeck'
,
newDeck
.
NewDeck
)
module
.
exports
=
router
\ No newline at end of file
...
...
api/deck/newDeck.js
0 → 100644
View file @
f9464da
const
rp
=
require
(
'request-promise'
)
const
mysql
=
require
(
'../../database/mysql'
)
const
crawler
=
require
(
'./crawler'
)
const
cheerio
=
require
(
'cheerio'
)
exports
.
NewDeck
=
(
req
,
res
)
=>
{
const
deckOwner
=
req
.
session
.
sid
const
deckTitle
=
req
.
body
.
deckTitle
const
deckClass
=
'paladin'
let
deckCode
=
req
.
body
.
deckCode
let
cards
=
[]
console
.
log
(
deckOwner
,
deckTitle
,
deckCode
)
const
DataCheck
=
()
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
if
(
!
deckTitle
||
!
deckCode
){
return
reject
({
code
:
'request_body_error'
,
message
:
'request body is not defined'
})
}
else
resolve
()
})
}
const
CrawlPage
=
()
=>
{
return
crawler
.
Crawl
(
deckCode
)
}
const
DeckCrawl
=
(
result
)
=>
{
//console.log(result)
const
$
=
cheerio
.
load
(
result
)
let
cardCosts
=
$
(
'div.hs-tile-info'
).
children
(
'.hs-tile-info-left.mdc-list-item__start-detail'
)
let
cardNames
=
$
(
'div.hs-tile-info'
).
find
(
'span'
).
find
(
'span'
)
let
cardNums
=
$
(
'div.hs-tile-info'
).
children
(
'.hs-tile-info-right.mdc-list-item__end-detail'
)
for
(
let
i
=
0
;
i
<
cardNames
.
length
;
i
++
)
{
let
cardCost
=
$
(
cardCosts
[
i
]).
text
()
let
cardName
=
$
(
cardNames
[
i
]).
text
()
let
cardNum
=
$
(
cardNums
[
i
]).
text
()
if
(
cardNum
.
trim
()
===
''
)
cardNum
=
'1'
else
cardNum
=
cardNum
.
trim
()
cards
.
push
({
cardCost
:
cardCost
,
cardName
:
cardName
,
cardNum
:
cardNum
})
}
console
.
log
(
cards
)
}
const
AddDeck
=
()
=>
{
mysql
.
getConnection
((
err
,
connection
)
=>
{
if
(
err
)
throw
err
connection
.
query
(
`insert into deck (deckOwner,deckTitle,deckClass,deckCode) values (\'
${
deckOwner
}
\',\'
${
deckTitle
}
\',\'
${
deckClass
}
\',\'
${
deckCode
}
\');`
,(
err
,
results
,
fields
)
=>
{
if
(
err
)
throw
err
connection
.
release
()
})
})
}
DataCheck
()
.
then
(
CrawlPage
)
.
then
(
DeckCrawl
)
.
then
(
AddDeck
)
.
then
(()
=>
{
res
.
status
(
200
).
json
({
message
:
'Complete Adding Deck'
})
})
.
catch
((
err
)
=>
{
console
.
log
(
err
)
res
.
status
(
500
).
json
(
err
||
err
.
message
)
})
}
\ No newline at end of file
api/user/login.js
View file @
f9464da
const
findById
=
require
(
'../../database/user/findById'
)
const
mysql
=
require
(
'../../mysql'
)
const
bcrypt
=
require
(
'bcrypt-nodejs'
)
const
session
=
require
(
'express-session'
)
const
app
=
require
(
'express'
)()
app
.
use
(
session
({
secret
:
'ambc@!vsmkv#!&*!#EDNAnsv#!$()_*#@'
,
resave
:
false
,
saveUninitialized
:
true
}))
exports
.
Login
=
(
req
,
res
)
=>
{
const
userId
=
req
.
body
.
userId
...
...
@@ -17,9 +7,7 @@ exports.Login=(req,res)=>{
const
DataCheck
=
()
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
console
.
log
(
'1'
)
if
(
!
userId
||
!
password
){
console
.
log
(
'1 err'
)
return
reject
({
code
:
'request_body_error'
,
message
:
'request body is not defined'
...
...
@@ -45,22 +33,19 @@ exports.Login=(req,res)=>{
const
PwCheck
=
(
user
)
=>
{
if
(
user
[
0
]
==
null
){
console
.
log
(
'2 err'
)
return
Promise
.
reject
({
code
:
'id_wrong'
,
message
:
'id wrong'
})
}
console
.
log
(
'3'
)
if
(
bcrypt
.
compareSync
(
password
,
user
[
0
].
password
)){
console
.
log
(
`
3 success\n
Login :
${
userId
}
`
)
console
.
log
(
`Login :
${
userId
}
`
)
req
.
session
.
sid
=
userId
req
.
session
.
save
(()
=>
{
res
.
status
(
200
).
json
({
userId
:
userId
})
})
}
else
{
console
.
log
(
'3 err'
)
return
Promise
.
reject
({
code
:
'pw_wrong'
,
message
:
'pw wrong'
...
...
api/user/signUp.js
View file @
f9464da
...
...
@@ -3,7 +3,7 @@
const
express
=
require
(
'express'
)
const
session
=
require
(
'express-session'
)
const
findById
=
require
(
'../../database/user/findById'
)
const
mysql
=
require
(
'../../mysql'
)
const
mysql
=
require
(
'../../
database/
mysql'
)
const
bcrypt
=
require
(
'bcrypt-nodejs'
)
exports
.
SignUp
=
(
req
,
res
)
=>
{
...
...
@@ -44,11 +44,9 @@ exports.SignUp=(req,res)=>{
}
const
hash
=
bcrypt
.
hashSync
(
password
,
bcrypt
.
genSaltSync
(
10
),
null
)
mysql
.
getConnection
((
err
,
connection
)
=>
{
if
(
err
)
throw
err
if
(
err
)
throw
err
connection
.
query
(
`insert into user (userId,password) values (\'
${
userId
}
\',\'
${
hash
}
\');`
,(
err
,
results
,
fields
)
=>
{
if
(
err
)
throw
err
if
(
err
)
throw
err
connection
.
release
()
})
})
...
...
mysql.js
→
database/
mysql.js
View file @
f9464da
File moved
database/user/findById.js
View file @
f9464da
const
mysql
=
require
(
'../
../
mysql'
)
const
mysql
=
require
(
'../mysql'
)
exports
.
findById
=
(
userId
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
...
...
package-lock.json
View file @
f9464da
...
...
@@ -108,6 +108,16 @@
"qs"
:
"6.5.2"
,
"raw-body"
:
"2.3.3"
,
"type-is"
:
"~1.6.16"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz"
,
"integrity"
:
"sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"boolbase"
:
{
...
...
@@ -125,6 +135,11 @@
"resolved"
:
"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
,
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"charset"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/charset/-/charset-1.0.1.tgz"
,
"integrity"
:
"sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg=="
},
"cheerio"
:
{
"version"
:
"1.0.0-rc.2"
,
"resolved"
:
"https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz"
,
...
...
@@ -495,9 +510,9 @@
}
},
"iconv-lite"
:
{
"version"
:
"0.4.2
3
"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.2
3
.tgz"
,
"integrity"
:
"sha512-
neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvD
A=="
,
"version"
:
"0.4.2
4
"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.2
4
.tgz"
,
"integrity"
:
"sha512-
v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/r
A=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
...
...
@@ -756,6 +771,16 @@
"http-errors"
:
"1.6.3"
,
"iconv-lite"
:
"0.4.23"
,
"unpipe"
:
"1.0.0"
},
"dependencies"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.23"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz"
,
"integrity"
:
"sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA=="
,
"requires"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
}
}
}
},
"readable-stream"
:
{
...
...
package.json
View file @
f9464da
...
...
@@ -15,11 +15,13 @@
"dependencies"
:
{
"bcrypt-nodejs"
:
"0.0.3"
,
"body-parser"
:
"^1.18.3"
,
"charset"
:
"^1.0.1"
,
"cheerio"
:
"^1.0.0-rc.2"
,
"dotenv"
:
"^6.1.0"
,
"express"
:
"^4.16.4"
,
"express-session"
:
"^1.15.6"
,
"fs"
:
"0.0.1-security"
,
"iconv-lite"
:
"^0.4.24"
,
"morgan"
:
"^1.9.1"
,
"mysql"
:
"^2.16.0"
,
"path"
:
"^0.12.7"
,
...
...
views/html/newdeck.html
View file @
f9464da
...
...
@@ -32,6 +32,30 @@
}
})
})
$
(
'#newDeckButton'
).
click
(
function
(){
var
data
=
new
Object
()
data
.
deckTitle
=
$
(
'#deckTitle'
).
val
()
data
.
deckCode
=
$
(
'#deckCode'
).
val
()
const
stringData
=
JSON
.
stringify
(
data
)
console
.
log
(
stringData
)
$
.
ajax
({
type
:
'POST'
,
url
:
'/api/deck/newdeck'
,
data
:
stringData
,
dataType
:
'JSON'
,
contentType
:
'application/json; charset=utf-8'
,
traditional
:
true
,
processdata
:
false
,
success
:
function
(
result
){
alert
(
'덱 생성 성공!'
)
window
.
location
.
href
=
'/decklist'
},
error
:
function
(
result
){
alert
(
`덱 생성 실패!\nmessage:
${
result
[
'message'
]}
`
)
return
false
}
})
})
})
</script>
</head>
...
...
@@ -61,11 +85,13 @@
<div
class=
"padding"
style=
"width:100px"
></div>
<div
class=
"container"
style=
"width:50%;"
>
<h3
class=
"form-signin-heading"
>
덱 추가
</h3>
<form
id=
"addDeckForm"
>
<label
class=
"sr-only"
for=
"deckTitle"
>
덱 이름
</label>
<input
class=
"form-control"
id=
"deckTitle"
autofocus=
""
required=
""
type=
"text"
placeholder=
"덱 이름"
name=
"userId
"
>
<input
class=
"form-control"
id=
"deckTitle"
autofocus=
""
required=
""
type=
"text"
placeholder=
"덱 이름"
name=
"deckTitle
"
>
<label
class=
"sr-only"
for=
"deckCode"
>
덱 코드
</label>
<textarea
class=
"form-control"
id=
"deckCode"
required=
""
placeholder=
"덱 코드"
name=
"password"
style=
"resize:none;height:150px;"
></textarea>
<input
type=
"button"
class=
"btn btn-primary btn-block"
value=
"확인"
/>
<textarea
class=
"form-control"
id=
"deckCode"
required=
""
placeholder=
"덱 코드"
style=
"resize:none;height:150px;"
name=
"deckCode"
></textarea>
</form>
<input
type=
"button"
class=
"btn btn-primary btn-block"
id=
"newDeckButton"
value=
"확인"
/>
</div>
</div>
...
...
Please
register
or
login
to post a comment