안녕하세요.
@jongeun 입니다.
이번에는 내 포스트에 누가 얼마나 보트하였는가? 에 대한 코드를 설명하겠습니다.
저는 스티밋을 본격적으로 접한 지 얼마되지 않았지만 스티밋의 성장 포텐이 있다고 판단합니다.
개발자로서 스티밋의 방대한 자료를 활용한 재밌는 것들을 상상하고 개발로서 스티밋 발전에 기여하고자 합니다.
문득, 저의 글에 누가 보팅을 많이 했는가가 궁금하더군요.
더 나아가서 나의 맞팔 상대방과 보트수를 비교하여 관계를 도식화해서 보여주면 재밌겠다는 상상을 하곤 했습니다.
이번에 설명드릴 코드는 저의 상상을 구현할 작은 코드 조각에 불구하지만, 코드가 필요하신 분을 위하여 준비했습니다.
그럼 코드를 볼까요?
01. var MongoClient = require('mongodb').MongoClient;
02. var steem = require('steem');
03. var url = 'mongodb://steemit:[email protected]:27017/SteemData'
04.
05. MongoClient.connect(url, function(err, db) {
06. if (err)
07. throw err;
08. var query = {
09. author : "jongeun",
10. }
11. db.collection("Posts").find(query).sort({
12. created : -1
13. }).toArray(function(err, queryResults) {
14. if (err)
15. throw err;
16. var myVoter = {};
17. for (var i = 0; i < queryResults.length; i++) {
18. var result = queryResults[i];
19.
20. for (j = 0; j < result.active_votes.length; j++) {
21. var vote = result.active_votes[j];
22. if (myVoter.hasOwnProperty(vote.voter)) {
23. myVoter[vote.voter] = (myVoter[vote.voter] + 1);
24. } else {
25. myVoter[vote.voter] = 1;
26. }
27. }
28. }
29. console.log(sortObject(myVoter));
30. });
31. });
32. function sortObject(obj) {
33. var arr = [];
34. var prop;
35. for (prop in obj) {
36. if (obj.hasOwnProperty(prop)) {
37. if(obj[prop] > 3){
38. arr.push({
39. 'key' : prop.substring(0, 2) + "*******",
40. 'value' : obj[prop]
41. });
42. }
43. }
44. }
45. arr.sort(function(a, b) {
46. return b.value - a.value;
47. });
48. return arr;
49. }
코드는 스티밋 DB에서 author 가 jongeun 인 모든 포스트에 보트한 사용자들의 보팅 수를 취합합니다.
중요 부분에 대해 설명하겠습니다.
1~3 : 데이터베이스 연결을 위한 모듈과 URL 초기화
5 : 데이터베이스 연결
8~10 : 데이터베이스에 있는 데이터중 필요한 데이터를 읽기 위한 쿼리 정의. 코드에서는 author가 jongeun 인 것으로 설정
11~13: 연결된 데이터베이스에 쿼리를 전송
17~28: 결과셋을 탐색하며, 포스트에 보트한 voter별 보트 횟수를 기록
22~26: 처음 나온 voter라면 횟수를 1로 설정, 이미 등록된 voter라면 횟수를 1증가
32~48: voter 별 보트 횟수를 정렬
29 : 결과를 콘솔에 출력. 결과는 보트 횟수가 높은 순으로 정렬 함
37 : 보트 횟수가 3 이상은 voter만 기록
39 : voter의 출력이름을 앞 2글자면 표기하고, 뒤에는 '*' 로 채움. (프라이버시 때문)
결과는 다음과 같이 출력됩니다.
[ { key: 'jo*******', value: 74 },
{ key: 'ge*******', value: 9 },
{ key: 'he*******', value: 5 },
{ key: 'ma*******', value: 5 },
{ key: 'su*******', value: 5 },
{ key: 'vo*******', value: 5 },
{ key: 'tw*******', value: 4 },
{ key: 'hy*******', value: 4 },
{ key: 'kd*******', value: 4 },
{ key: 'lh*******', value: 4 },
{ key: 'se*******', value: 4 },
{ key: 'st*******', value: 4 },
{ key: 'fo*******', value: 4 },
{ key: 'vk*******', value: 4 },
{ key: 'co*******', value: 4 },
{ key: 'ko*******', value: 4 } ]
74회의 보트 횟수를 가진 jo******* 사용자는 본인입니다.
9회를 기록한 ge*******님이 저에게 가장 많은 관심을 주신분이네요. 감사합니다.
이상으로 내 포스트에 누가 얼마나 보트하였는가?에 대한 포스팅을 마치겠습니다.
오 제가 공동 2위군요~! 이번보팅으로 단독2위로 올라서도록 하겠습니다 ㅋㅋ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아니.. 어떻게 아셨죠?.. 가렸는데
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
착한(?)사람들 눈에는 다보입니다 ㅋㅋㅋ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
보팅 감사합니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
좋은 자료입니다.
줄번호를 자동으로 넣어주는 기능도 있나 보네요...
스팀잇 몽고디비는 안써봤는데, 이게 스팀잇 관련 데이터베이스를 위한 것인가요? 아니면 범용으로 블럭체인을 데이터베이스로 쓸 수 있는 것인가요?
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
스티밋 전용 데이터베이스입니다.
줄번호는 타이핑했습니다. ㅠㅠ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
타이핑 하지 마세용~~
긁어서 쓰는 사람은 삭제해야합니다. ㅠ.ㅠ
gist.github.com 을 이용하시면 좋습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
아하!!. 좋은 정보 감사합니다. ㅠㅠ 그렇네요. 제가 긁어서 쓰는 분 생각을 하지 못했습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
객관적인 자료를 보니 신기하군요.
역시 무엇이든 배우는 만큼 쓸 수 있게 되는 것 같습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
통계사이트 구축할때 몽고디비랑 mssql 중에 고민했는데
안써봐서 그런지 몽고비디쪽은 좀 복잡하네요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
좋은 정보네요 포스팅 잘보고 갑니다~
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
👍 항상 귀중한 정보 감사드립니다~ 조만간 개인별 커스텀한 자료도 쉽게 만나볼수 있을것 같습니다. 그런데 2위는 누굴까요? ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
저 코드를 돌리면 알 수 있을 것 같습니다. ㅎㅎ 저는 알고 있습니다.
다시 볼려봤습니다.
{ key: 'geu', value: 10 },
{ key: 'suc', value: 6 },
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
감사합니다.
보팅 &팔로우합니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
node-js .. 저희 학과목에는 없는데 따로 공부해볼 매력이 있는것같네요
팔로우하고갑니다 ! 맞팔부탁드려요~~
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit