๋ฒ์ญ๊ธ์ ๋ ๋์ ์ฃผ์ ๋ฅผ ์ก๊ณ ์ง์ ๊ธ์ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ ๋์ ํ ๊ธ์ ์ธ๋งํ ์ฃผ์ ๊ฐ ์๊ฐ์ด ์๋๋๊ตฐ์. ๊ณฐ๊ณฐํ ์๊ฐ์ ํด๋ณด๋ค๊ฐ ๋ฌธ๋ฉ 1๋ ์ ์ ํด์ธ์ปค๋ฎค๋ํฐ ๋ ๋ง์์ ๋ณธ ์ด ๊ธ์ด ์๊ฐ๋ฌ์ต๋๋ค : ๋ ๋ง์ ๊ธ์ ์ฌ๋ฆฌ๊ธฐ ๊ฐ์ฅ ์ข์ ์๊ฐ
์ด ๊ฐ๋ ์ ๋๊ฐ์ด ์คํ์์ ์ ์ฉํ์ฌ "์คํ์์ ๊ธ์ ์ฌ๋ฆฌ๊ธฐ ๊ฐ์ฅ ์ข์ ์๊ฐ์ด ์ธ์ ค๊น?"๋ผ๋ ์๊ฐ์ด ๋ ์ฌ๋์ต๋๋ค. ๋ง์ ๋ณดํ ์ ๋ฐ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋น์ฐํ, ๋์ ํ๋ฆฌํฐ์ ๊ธ์ ์ฌ๋ฆฌ๋๊ฑฐ๊ฒ ์ง๋ง, ๋ถ๋ช ์ฌ๋๋ค์ด ๋ง์ด ์ ์ํ๋ ํน์ ์๊ฐ๋๊ฐ ์์๊ฒ์ด๋ฉฐ ํด๋น ์๊ฐ์ ๋ง์ถฐ ํฌ์คํ ์ ํ๋ฉด ๋ ๋ง์ ๋ณดํ ์ ๋ฐ์ ์ ์์๊ฒ๋๋ค.
์๋ฒฝ 4์์ ๊ธ์ ์ฌ๋ฆฐ๋ค๊ณ ๊ฐ์ฅ์ ํด๋ณด๋ฉด, ๋น์ฐํ ์๋ฒฝ์ ๊นจ์ด์๋ ์ ์ ๋ค์ ๊ทธ๋ฅ ๋ง์ง ์์๊ฑฐ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณดํ ์ ์ ๊ฒ๋ฐ๊ฒ๋๊ฒ ์ฃ . ๊ธ์ ์ฌ๋ฆฌ๊ธฐ์ํ ๊ฐ์ฅ ์ข์ ์๊ฐ์ ์ฌ์ดํธ๋ค ๋ง๋ค ๋ค๋ฅด๋ฉฐ, ์ ์ ๋ค์ ์์๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ๋ ํฉ๋๋ค.
Steem์ ์คํ ์์ค๋ผ์ ์ ๋ง ๋คํ์ด๋ค์. ์ง๊ธ๊น์ง ๋ง๋ค์ด์ง ๋ชจ๋ ํฌ์คํ ๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ป์ ์ ์์๊ณ , ์ธ์ ํฌ์คํ ์ ํ๋์ง, ์ผ๋ง์ ๋ณด์์ ๋ฐ์๋์ง์ ๋ฆฌ์คํธ๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ํต๊ณ์ ์ผ๋ก ๋ถ์์ ํ๋ฉด ์ ์ง๋ฌธ์ ๋ต์ ์ป์ ์ ์์๊ฑฐ ๊ฐ์์ต๋๋ค.
์๋ง ์ฌ๋๋ค์ด ํ๊ต๋ ์ผ์ด ๋๋๊ณ ์ง์ ์ค๋ ์ ๋ ์ฏค์ด ํฉ๊ธ ์๊ฐ๋๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์๋ณด์์ต๋๋ค.
๋ฉ์ธ ํ์ด์ง์ ๊ธ์ ์ฌ๋ฆฌ๋๊ฑธ ๋ชฉํ๋ก ํ๊ณ ์์ผ์๋ค๋ฉด, ํฌ์คํ ์ ํตํด ์คํ์ ์ป๊ณ ์ฒซ ํ์ด์ง์ ๋๋ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ณ ๋ คํด๋ดค์ ๋ ํฉ๊ธ ์๊ฐ๋ ๋ณด๋ค ๋ช์๊ฐ ์ผ์ฐ ๊ธ์ ์ฌ๋ฆฌ๋๊ฒ ์ข์๊ฑฐ ๊ฐ์ต๋๋ค. ํฉ๊ธ ์๊ฐ๋์ ๋ฑ ๋ง์ถฐ ๊ธ์ ์ฌ๋ฆฌ๊ธฐ๋ณด๋จ, ๋ช์๊ฐ ์ผ์ฐ ํฌ์คํ ์ ํด์ ํฉ๊ธ ์๊ฐ๋์ ์ฒซ ํ์ด์ง์ ๊ธ์ ์ฌ๋ฆฌ๋๊ฒ ์ ์ผ ๋ง์ ๋ณดํ ์ ๋ฐ์ ์ ์๊ฒ ์ฃ .
์ ์ด๋ก ์ ๋ฐ๋ผ์ ์ถ์ธก์ ํด๋ณด๋ฉด, ๊ฐ์ฅ ์ด์์ ์ธ ํฌ์คํ ์๊ฐ์ ์คํ 6์ ์ ๋์ ๋๋ค.
Steem ๋ธ๋ฝ์ฒด์ธ์์๋ ๋ชจ๋ ์ ๋ณด๋ค์ ๊ฐ์ ธ์์ ๋ถ์ํ๊ธฐ ์ํด์ ์ด ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฑํด๋ดค์ต๋๋ค. ๋๊ฒ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์งฐ๊ธฐ๋๋ฌธ์ ์๋ง ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์๊ฑฐ๊ฐ๊ธด ํ๋ค์. ๊ฐ๋ฐ์ ๋ถ๋ค์ด ๋ค์ผ๋ฉด ์ด์ํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, piston์ stream_comments๋ฅผ ๋ถ๋ฌ์ค๋ ๋ถ๋ถ์ ๋ฒ๊ทธ๊ฐ ์์ด์ pistion๊ณผ python-steem ๋ฅผ ๋์์ ์จ๋ดค์ต๋๋ค.
from piston.steem import Steem
from steemapi.steemnoderpc import SteemNodeRPC
from collections import Counter
from datetime import datetime
counter = Counter()
postcounter = Counter()
start_block = 3145790 # 2016-07-12
rpc = SteemNodeRPC("ws://localhost:8090")
steem = Steem(node="ws://localhost:8090", nobroadcast=True)
counted = set()
for c in rpc.stream("comment", start=start_block):
if c["parent_author"]:
continue # only interested in posts, not comments
identifier = "@" + c["author"] + "/" + c["permlink"]
if identifier in counted:
continue
counted.add(identifier)
try:
post = steem.get_content(identifier)
except:
continue
dt = datetime.strptime(post.created, "%Y-%m-%dT%H:%M:%S")
print("\n" + str(dt))
payout = float(post.total_payout_value.split(" ")[0]) + float(post.pending_payout_value.split(" ")[0])
counter[dt.hour] = counter[dt.hour] + payout
postcounter[dt.hour] = postcounter[dt.hour] + 1
for i in range(24):
if postcounter[i]:
print(str(counter[i] / float(postcounter[i])))
else:
print("0") continue # only interested in posts, not comments
try:
post = steem.get_content("@" + c["author"] + "/" + c["permlink"])
except:
continue
dt = datetime.strptime(post.created, "%Y-%m-%dT%H:%M:%S")
print("\n" + str(dt))
payout = float(post.total_payout_value.split(" ")[0]) + float(post.pending_payout_value.split(" ")[0])
counter[dt.hour] = counter[dt.hour] + payout
postcounter[dt.hour] = postcounter[dt.hour] + 1
for i in range(24):
if postcounter[i]:
print(str(counter[i] / float(postcounter[i])))
else:
print("0")
ํน์ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ์คํํด๋ณด๊ณ ์ถ์ผ์ ๋ถ๋ค์ ๋ก์ปฌ์ steemd node๊ฐ ์์ด์ผํฉ๋๋ค. steemd๋ฅผ ์คํํ ๋ ๋ถํ์ํ ์์ํ๋ค์ ์ ๊ฑฐํด์ผ ๊นจ๋ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณผ ์ ์์ต๋๋น: ./steemd --rpc-endpoint &> /dev/null,
์คํํ๊ณ ๋๋ฉด ์ซ์๋ค์ ๋ณด์ค ์ ์์ํ ๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ํ๋ฃจ ์ค ๋งค ์๊ฐ๋ง๋ค ํฌ์คํ ์ผ๋ก๋ถํฐ ๋ฐ๋ ํ์ด์์๋ค์ ํ๊ท ์ ๊ณ์ฐํ ์ซ์์ ๋๋ค.
์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ป์ ์ซ์๋ค์ LibreOffice๋ฅผ ์ด์ฉํด์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ดค์ต๋๋ค.
x์ขํ ๊ฐ์ ์๊ฐ(UTC ๊ธฐ์ค), y์ขํ ๊ฐ์ ์คํ๋ฌ๋ฌ๋ฅผ ๋ปํฉ๋๋ค.
pytthon-steem๋ steemd์ ๋ฌธ์ ์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ ๋ช๋ช block์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ๋ ์ค๋ฅ๋ฅผ ๋ฟ์ด ๋ด์ ํ์ ์ ์ธ ๋ฐ์ดํฐ ์ ์ผ๋ก ๋ถ์์ ์งํํ๊ฒ๋ฌ์ต๋๋ค(2016๋ 7์ 12์ผ - 2017๋ 1์ 19์ผ). ํน์ ๋ฒ๊ทธ ํฝ์คํ๋๋ฐ ๋์ ์ฃผ์ค ์ ์๋ค๋ฉด ๋๊ธ๋ก ํผ๋๋ฐฑ ์ฃผ์๋ฉด ๊ฐ์ฌํฉ๋๋ค :)
์! ํ๊ตญ์ ์๊ฐ๋๋ UTC+9 ์ธ๊ฑธ ๊ณ ๋ คํ๋ฉฐ ํฉ๊ธ์๊ฐ๋๋ ์ธ์ ์ธ์ง ์์๋ด
์๋ค.
๊ทธ๋ํ๋ฅผ ๋์ถฉ ๋ถ์ํ์ฌ ํฉ๊ธ ์๊ฐ๋ 3์๋ฅผ ์ ์ ํด๋ดค์ต๋๋ค.
๊ทธ๋ผ ํฌ์คํ ํ ๋ ํผํด์ผํ ์๊ฐ๋๋ ์ธ์ ์ผ๊น์?
์ ์์๊ณผ๋ ํ๋ฆฌ๊ฒ ์คํ๋ณด๋จ ์ค์ ์ ๊ธ์ ์ฌ๋ฆฌ๋๊ฒ ์ต๋ํ ๋ง์ SBD์ ๋ฐ์ ์ ์๋ค๋ ๊ฒฐ๋ก ์ด ๋์๋ค์. ๋ค๋ค ์ถ๊ทผํ๋ฉด์ ์คํ์์ ์ ์ํ๋ค๊ฐ ๋ฐค ๋ฆ๊ฒ ํ๋ฒ์ฉ ์ ์ํ๋ ์๊ฐ์ด ํผํฌํ์์ด ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์นจ ์ผ์ฐ ์ถ๊ทผ ํ์๊ฑฐ๋ ํ๊ต์ ๊ฐ์ ์ผํ๋ ๋ถ๋ค์ด ์์นจ์ ๊ธ์ ์จ์ ์ฌ๋ฆฌ๋๊ฑด ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ์ผ์ด๊ธฐ๋๋ฌธ์ ์คํ์ ๊ธ์ ๋ฏธ๋ฆฌ ์จ๋๊ณ , ์์นจ์ ์ผ์ด๋์๋ง์ ๊ธ์ ์ฌ๋ฆฌ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ๊ฑฐ๊ฐ์ต๋๋ค!
์ ์ ์ฃผ๋ ์ผ์ ํ๋ก๊ทธ๋๋ฐ์ด๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ์ด๋ฐ ๊ฐ๋จํ ๊ธฐ์ ์ ํต๊ณ๋ฟ๋ง ์๋๋ผ ์ง์ ํ๋ก๊ทธ๋จ๋ค์ ๊ฐ๋ฐํด ๋ฐฐํฌํ๊ธฐ๋ ํ ์์ ์ ๋๋ค! ์ ๋ ๊ฐ๋ฐ ์์ด๋์ด๋ฅผ ๋ง์ด ์๊ฐํด๋๊ธด ํ๋๋ฐ, ํน์ ์ ์ ๋ถ๋ค์ด ์ํ๋ ๊ฒ ์์ผ์๋ฉด ์ธ์ ๋ ์ง ์์ฒญํด์ฃผ์ธ์. ํ๋ก์ฐ๋ ์ธ์ ๋ ํ์์ ๋๋ค :)