안녕하세요.
@jongeun 입니다.
이번에는 내 포스트에 누가 얼마나 보트하였는가? 에 대한 코드를 설명하겠습니다.
저는 스티밋을 본격적으로 접한 지 얼마되지 않았지만 스티밋의 성장 포텐이 있다고 판단합니다.
개발자로서 스티밋의 방대한 자료를 활용한 재밌는 것들을 상상하고 개발로서 스티밋 발전에 기여하고자 합니다.
문득, 저의 글에 누가 보팅을 많이 했는가가 궁금하더군요.
더 나아가서 나의 맞팔 상대방과 보트수를 비교하여 관계를 도식화해서 보여주면 재밌겠다는 상상을 하곤 했습니다.
이번에 설명드릴 코드는 저의 상상을 구현할 작은 코드 조각에 불구하지만, 코드가 필요하신 분을 위하여 준비했습니다.
그럼 코드를 볼까요?
01. var MongoClient = require('mongodb').MongoClient;
02. var steem = require('steem');
03. var url = 'mongodb://steemit:steemit@mongo1.steemdata.com: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*******님이 저에게 가장 많은 관심을 주신분이네요. 감사합니다.
이상으로 내 포스트에 누가 얼마나 보트하였는가?에 대한 포스팅을 마치겠습니다.