Just save this as karma.py and run it with Python 3.6 or higher.
import requests
import math
INSTANCE_URL = "https://feddit.de"
TARGET_USER = "ENTER_YOUR_USERNAME_HERE"
LIMIT_PER_PAGE = 50
res = requests.get(f"{INSTANCE_URL}/api/v3/user?username={TARGET_USER}&limit={LIMIT_PER_PAGE}").json()
totalPostScore = 0
totalCommentScore = 0
page = 1
while len(res["posts"])+len(res["comments"]) > 0:
totalPostScore += sum([ x["counts"]["score"] for x in res["posts"] ])
totalCommentScore += sum([ x["counts"]["score"] for x in res["comments"] ])
page += 1
res = requests.get(f"{INSTANCE_URL}/api/v3/user?username={TARGET_USER}&limit={LIMIT_PER_PAGE}&page={page}").json()
print("Post karma: ", totalPostScore)
print("Comment karma: ", totalCommentScore)
print("Total karma: ", totalPostScore+totalCommentScore)
MLem (the iOS Lemmy app) was also showing the user karma (but I think it was only showing karma gained on the local instance). So I guess this is nice for people that like to know their karma.
I also agree with @nlm@beehaw.org that we should leave this as a thing for yourself. The Lemmy API should not bother with reporting user karma as It would be way too easy to cheat for people with singe person instances. (and of course the toxicity that comes with karma)
The API actually already reports something that looks like karma (it’s called post_score and comment_score for the user in question), but for some reason that value is quite off. Not sure why.
So for example, the post score that is reported for my user is ~20% lower than what you get if you sum all the post scores up, while the comment score is ~95% too low.
Nice job and all… but I really wish this wasn’t a thing.
Karma is something that should stay behind at Reddit imho, it just fosters karma whoring instead of actually contributing to a discussion.
That’s one of the things I liked best when I joined Lemmy, that there wasn’t a visible karma counter on people’s profiles.
Anyway… rant mode off.
Still, neat job!
I get the reasoning, I’ve read the discussions. Still I like the karma thing, not for showing it to other people, but to give me an overview over what I’ve been doing so far. It’s kinda an activity meter for me, and a bit of feedback on how my posts are doing.
I am on Stackoverflow, and obviously I was on Reddit. While I was there, I never actually looked at other people’s karma, but my karma motivated me to be more engaged.
I think you left this line behind by accident:
l = Lemmy(INSTANCE_URL)
You are right, I removed it ~20min before you posted, though. So I guess, the change wasn’t synced to your instance yet. Interesting, that the syncing can take that long.
Yeah, I still see the line now. I am not sure if this was a one-off, maybe the edit occurred when I rebooted the instance for a moment and the edit fell through the cracks… Or there might be an actual issue federating edits.
Yea, as said by @nlm@beehaw.org it’s best that reddit is just left behind … we don’t need to recreate everything it did, and there’s plenty of scope to try and create new things here on the fediverse not seen before or, at least to make lemmy better in lots of ways that make sense.
Alternative web-based PWA front ends, community discovery, contributing to the source code of the platform itself, moderation tooling (a big one), making donations easier for users, devs and admins (big one too), documentation and tutorials for new users or those looking to use the API (bet you’re well placed for that one) … etc.
Yeah, this was just a little exercise while getting into the API. I’m looking into making a simple mod bot, if I actually get around to it.
Regarding Karma: I don’t care at all for other peoples’ karma. Never have, also on Reddit and Stackexchange.
But I do like to kinda see my progress. With Karma I can see how well I am doing in the community in general. And it motivates me to put out more decent content.
I don’t really get Karma farming though. Karma is inherently meaningless, so there is no reason to farm it.
I’m with you (and I hope my post didn’t come of as too harsh … you’re making tools for users which is awesome!).
And you’re right to point out that this is just for personal use. And karma is useful for letting you know how your communities feel about you. For me, I scroll through my posts in my profile page and just scan the scores to get a feel for whether I’ve pissed anyone off gotten some traction for some reason.
If someone is posting more often than me, I can see how your tool would be useful.
Still, I feel there are questions to be asked about whether it’s healthy, but that’s me … you do you!!
Also … kbin actually has a karma feature like on reddit. You might find it useful.
I am spending too much time on Lemmy as is :)
What I really found interesting, also compared to Reddit, is how few of my posts/comments actually have downvotes.
I’m getting back into Python for unrelated reasons, and last I was using it, JSON wasn’t on my radar yet.
I’m curious about the .json()
method here, which seems to be exposing posts
et al. for further manipulation without parsing. Is this really as simple as it appears?
Yes, it totally is that easy. At first I used an API wrapper library, but then I checked out the source and there is really no need for it since requests already handles basically everything. .json()
takes the response body of the request and runs it through json.decode()
and thus spits out a nice Python dict/list structure.