Skip to content

Instantly share code, notes, and snippets.

@noisy
Created March 25, 2014 19:16
Show Gist options
  • Save noisy/9769099 to your computer and use it in GitHub Desktop.
Save noisy/9769099 to your computer and use it in GitHub Desktop.
#!/bin/python
# -*- coding: utf-8 -*-
import wykop
import urllib
import os.path
api = wykop.WykopAPI(appkey="", secretkey="", login="", password="")
data={}
with open("/home/work/podsumowanie.csv") as f:
i=1
for line in f:
line=line.split(",")
nick = line[2].strip()
url = line[14]
new_data={
"krew": line[3] if line[3] else 0,
"plytki": line[4] if line[4] else 0,
"osocze": line[5] if line[5] else 0,
}
if "http://www.wykop.pl/" in url:
id = url.split("/")[4]
""""
if not os.path.isfile("/tmp/barylka/" + str(id)+".jpg"):
try:
entry = api.get_entry(id)
if entry["embed"]:
print entry.embed.preview
urllib.urlretrieve(entry.embed.preview, "/tmp/barylka/" + str(id)+".jpg")
except wykop.EntryDoesNotExistError:
print "wykop.EntryDoesNotExistError: Wpis nie istnieje lub zostal usuniety - " + id
"""
if nick not in data:
data[nick] = {}
data[nick]["razem"] = 0
for skladnik, ml in [("krew", 450), ("plytki", 500), ("osocze", 200)]:
if skladnik not in data[nick]:
data[nick][skladnik] = 0
data[nick][skladnik+"_ml"] = 0
data[nick][skladnik] += float(new_data[skladnik])
data[nick][skladnik+"_ml"] += float(new_data[skladnik]) * ml
data[nick]["razem"] += float(new_data[skladnik]) * ml
male=0
female=0
no_info=0
pinfo={
"author_group":{
0:0,
1:0,
2:0,
5:0,
1001:0,
1002:0,
2001:0,
},
}
maxrank=999999999
maxrank_nick=""
dont_want_pm=[]
group_info=0
group_info_group = {}
for nick in data.keys():
try:
profile = api.get_profile(nick)
if profile.sex == 'male':
male+=1
elif profile.sex == 'female':
female+=1
else:
no_info+=1
#print nick + " is " + profile.sex
#print "Sending to " + nick
try:
con_list = api.get_conversation(nick)
if not con_list:
pass
#print nick + " send now!"
#print nick + " TODO"
"""
api.send_message(nick, u"Hej! Jestem malutkim botem napisanym przez noisy'ego, który dopytuje wszystkich "
u"uczestnikow #barylkakrwi o grupę krwi :) Byłbym niezwykle wdzięczny, gdybyś mógł mi"
u"odpowiedzieć na pytanie jaką grupę krwi posiadasz?\n\n"
u"Ponieważ jestem dość głupim botem, to zrozumiem odpowiedź tylko wtedy, "
u"jeżeli wpiszesz dokładnie swoją grupę krwi, czyli jedną z tych:"
u"odpowiednio: A-, A+, B-, B+, 0-, 0+, AB-, AB+ - nie wpisuj proszę żadnych innych "
u"kombinacji np. 0 RH-, bo nie połapię się ;)\n\n"
u"Z góry dziękuję :)")
"""
else:
msg_sent=False
for conv in con_list:
if "A-, A+, B-, B+, 0-, 0+, AB-, AB+" in conv.body:
#print nick + " sent"
msg_sent=True
continue
if conv.body.replace(" ", "") in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
print nick + " - " + conv.body
group_info+=1
if conv.body.replace(" ", "") not in group_info_group:
group_info_group[conv.body.replace(" ", "")]=0
group_info_group[conv.body.replace(" ", "")] += 1
data[nick]["grupa"]=conv.body.replace(" ", "")
break
else:
pass
"""
print nick + " send now!"
api.send_message(nick, u"Hej! Jestem malutkim botem napisanym przez noisy'ego, który dopytuje wszystkich "
u"uczestnikow #barylkakrwi o grupę krwi :) Byłbym niezwykle wdzięczny, gdybyś mógł mi"
u"odpowiedzieć na pytanie jaką grupę krwi posiadasz?\n\n"
u"Ponieważ jestem dość głupim botem, to zrozumiem odpowiedź tylko wtedy, "
u"jeżeli wpiszesz dokładnie swoją grupę krwi, czyli jedną z tych:"
u"odpowiednio: A-, A+, B-, B+, 0-, 0+, AB-, AB+ - nie wpisuj proszę żadnych innych "
u"kombinacji np. 0 RH-, bo nie połapię się ;)\n\n"
u"Z góry dziękuję :)")
"""
except wykop.UserDontWantToGetPMError:
print u"wykop.WykopAPIError: %s nie chce odbierać wiadomości prywatnych" % nick
dont_want_pm.append(nick)
except:
import sys, traceback
traceback.print_exc()
pinfo["author_group"][profile.author_group] += 1
try:
r = int(profile.rank)
if r < maxrank and r != 0:
maxrank = r
maxrank_nick = nick
except ValueError:
#print "Not in rank"
pass
#print profile.avatar_big
#urllib.urlretrieve(profile.avatar_big, "avatars/"+nick+".jpg")
except wykop.UserDoesNotExistError:
#print "wykop.UserDoesNotExistError"
pass
print "male: " + str(male)
print "female: " + str(female)
print "no_info: " + str(no_info)
print ""
print "Najwyższą pozycje w rankingu ma %s - %d\n" % (maxrank_nick, maxrank)
print "W akcji brało udział:"
print "%s - zielonych" % pinfo["author_group"][0]
print "%s - pomarańczowych" % pinfo["author_group"][1]
print "%s - bordowych" % pinfo["author_group"][2]
print "%s - administratorow" % pinfo["author_group"][5]
print "%s - obecnie zbanowanych" % pinfo["author_group"][1001]
print "%s - osob, ktore usuneły konta" % pinfo["author_group"][1002]
print "%s - klientow (niebieskich)\n" % pinfo["author_group"][2001]
print "Użytkownicy, którzy nie chcą otrzymywać prywatnych wiadomości (%d):" % len(dont_want_pm)
print "@" + ", @".join(dont_want_pm)
gr_sr={}
gr_max={}
for gr in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
gr_sr[gr]=[]
gr_max[gr]={"wartosc":0, "kto":[]}
for nick in data.keys():
if "grupa" in data[nick] and data[nick]["grupa"] in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
gr = data[nick]["grupa"]
gr_sr[gr].append(data[nick]["razem"])
if gr_max[gr]["wartosc"] < data[nick]["razem"]:
gr_max[gr]["wartosc"] = data[nick]["razem"]
gr_max[gr]["kto"] = [nick]
elif gr_max[gr]["wartosc"] == data[nick]["razem"]:
gr_max[gr]["kto"].append(nick)
print "\n"
print "Mamy informacje o grupie krwi od %d osób\n" % group_info
print "Liczba osób biorących udział w akcji z daną grupą krwi"
for gr in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
print gr + " - " + str(group_info_group[gr])
print "Najlepsze wyniki:\n"
for gr in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
if len(gr_sr[gr]) != 0:
v = sum(gr_sr[gr])/float(len(gr_sr[gr]))
print "Uzytkownicy z grupa %s oddali srednio %.3f, najwięcej (%d ml) odda%s: %s" % (gr, v, gr_max[gr][
"wartosc"] , "l" if len(gr_max[gr]["kto"]) == 1 else "li", ", ".join(gr_max[gr]["kto"]))
#print str(gr_max)
results = [(nick, data[nick]["razem"], data[nick]) for nick in data.keys()]
sorted_by_second = sorted(results, key=lambda tup: tup[1], reverse=True)
i=1
for record in sorted_by_second:
print "%d. @%s - %d ml " % (i, record[0], record[1])
i+=1
print "Raking według grupy krwi:\n"
for gr in ["A-", "A+", "B-", "B+", "0-", "0+", "AB-", "AB+"]:
print "\nGrupa %s:" % gr
results = [(nick, data[nick]["razem"], data[nick]) for nick in data.keys() if "grupa" in data[nick] and data[nick]["grupa"] == gr]
sorted_by_second = sorted(results, key=lambda tup: tup[1], reverse=True)
i=1
for record in sorted_by_second:
print "%d. @%s - %d ml " % (i, record[0], record[1])
i+=1
print "Mamy informacje o grupie krwi od %d osób\n" % group_info
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment