From 7be1821efb6432ca1a202d93fbc8f59b8274b8c0 Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 29 Nov 2020 23:33:50 +0100 Subject: [PATCH] Big improve on gchange likenator --- gchange-profile.py | 33 +++++++++++++++-------------- lib/gchange.py | 52 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/gchange-profile.py b/gchange-profile.py index 798d759..77e6bb7 100755 --- a/gchange-profile.py +++ b/gchange-profile.py @@ -4,7 +4,7 @@ import argparse, sys, os from os.path import join, dirname from shutil import copyfile from dotenv import load_dotenv -from lib.gchange import ReadLikes, SendLikes, DeleteLikes +from lib.gchange import ReadLikes, SendLikes, UnLikes # Get variables environment if not os.path.isfile('.env'): @@ -23,32 +23,33 @@ if not dunikey or not pod: parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() -readLike_cmd = subparsers.add_parser('readlike', help="Lire les likes d'un profile") -like_cmd = subparsers.add_parser('like', help="Liker un profile") -deleteLike_cmd = subparsers.add_parser('deletelike', help="Supprimer un like") +# readLike_cmd = subparsers.add_parser('readlike', help="Lire les likes d'un profile") +like_cmd = subparsers.add_parser('like', help="Voir les likes d'un profile / Liker un profile (option -s NOTE") +unlike_cmd = subparsers.add_parser('unlike', help="Supprimer un like") -if len(sys.argv) <= 1 or not sys.argv[1] in ('readlike','like','deletelike'): +if len(sys.argv) <= 1 or not sys.argv[1] in ('like','unlike'): sys.stderr.write("Veuillez indiquer une commande valide:\n\n") parser.print_help() sys.exit(1) -readLike_cmd.add_argument('-p', '--profile', help="Profile cible") +# readLike_cmd.add_argument('-p', '--profile', help="Profile cible") like_cmd.add_argument('-p', '--profile', help="Profile cible") like_cmd.add_argument('-s', '--stars', type=int, help="Nombre d'étoile") -deleteLike_cmd.add_argument('-i', '--id', help="ID du like à supprimer") +unlike_cmd.add_argument('-p', '--profile', help="Profile à déliker") args = parser.parse_args() # Build gchange class -if sys.argv[1] == "readlike": - gchange = ReadLikes(dunikey, pod) - gchange.readLikes(args.profile) -elif sys.argv[1] == "like": - gchange = SendLikes(dunikey, pod) - gchange.like(args.profile, args.stars) -elif sys.argv[1] == "deletelike": - gchange = DeleteLikes(dunikey, pod) - gchange.deleteLike(args.id) +if sys.argv[1] == "like": + if args.stars: + gchange = SendLikes(dunikey, pod) + gchange.like(args.profile, args.stars) + else: + gchange = ReadLikes(dunikey, pod) + gchange.readLikes(args.profile) +elif sys.argv[1] == "unlike": + gchange = UnLikes(dunikey, pod) + gchange.unLike(args.profile) diff --git a/lib/gchange.py b/lib/gchange.py index dcc783e..9e6c9ad 100644 --- a/lib/gchange.py +++ b/lib/gchange.py @@ -28,7 +28,6 @@ class ReadLikes: # Configure JSON document to send def configDoc(self, profile): - timeSent = int(time.time()) if not profile: profile = self.issuer data = {} @@ -41,7 +40,7 @@ class ReadLikes: {'term': {'kind': 'STAR'}} ] data['query']['bool']['should'] = {'term':{'issuer': self.issuer}} - data['size'] = 1 + data['size'] = 5000 data['_source'] = ['issuer','level'] data['aggs'] = { 'level_sum': { @@ -75,21 +74,36 @@ class ReadLikes: def parseResult(self, result): result = json.loads(result) + totalLikes = result['hits']['total'] + totalValue = result['aggregations']['level_sum']['value'] + score = totalValue/totalLikes raw = result['hits']['hits'] + finalPrint = {} + finalPrint['likes'] = [] for i in raw: + issuer = i['_source']['issuer'] id = i['_id'] level = i['_source']['level'] - print('ID:', id,'\nLevel:', level) + if issuer == self.issuer: + finalPrint['yours'] = { 'id' : id, 'level' : level } + else: + finalPrint['likes'].append({ 'issuer' : issuer, 'level' : level }) + finalPrint['score'] = score + + return json.dumps(finalPrint) def readLikes(self, profile=False): document = self.configDoc(profile) result = self.sendDocument(document) - self.parseResult(result) + result = self.parseResult(result) + + print(result) + return result -#################### Sending class #################### +#################### Like class #################### @@ -167,12 +181,12 @@ class SendLikes: -#################### Sending class #################### +#################### Unlike class #################### -class DeleteLikes: +class UnLikes: def __init__(self, dunikey, pod): # Get my pubkey from my private key try: @@ -189,6 +203,22 @@ class DeleteLikes: if not re.match(PUBKEY_REGEX, self.issuer) or len(self.issuer) > 45: sys.stderr.write("La clé publique n'est pas au bon format.\n") sys.exit(1) + + # Check if you liked this profile + def checkLike(self, pubkey): + + readProfileLikes = ReadLikes(self.dunikey, self.pod) + document = readProfileLikes.configDoc(pubkey) + result = readProfileLikes.sendDocument(document) + result = readProfileLikes.parseResult(result) + result = json.loads(result) + + if 'yours' in result: + myLike = result['yours']['id'] + return myLike + else: + sys.stderr.write("Vous n'avez pas liké ce profile\n") + return False # Configure JSON document to send def configDoc(self, idLike): @@ -236,7 +266,9 @@ class DeleteLikes: sys.stderr.write("Echec de l'envoi du document de lecture des messages...\n" + result.text + '\n') - def deleteLike(self, idLike): - document = self.configDoc(idLike) - self.sendDocument(document) + def unLike(self, pubkey): + idLike = self.checkLike(pubkey) + if idLike: + document = self.configDoc(idLike) + self.sendDocument(document)