Ich lerne programmieren und Du kannst das auch [Teil 3] (Python-Steem-Bot mit neuer Curation Bewertung)steemCreated with Sketch.

in #deutsch6 years ago (edited)

Seit meinem letzten Update sind 13 Tage vergangen und mittlerweile hat sich wieder viel getan, von dem ich nun berichten will. Eigentlich sollte dieser Post schon bisschen früher entsehen, hatte aber aufgrund einer kurzen Erkältung keine große Lust.

Der letzte Stand meines Steem-Bots war ja, dass er deutsche Posts nach genau 14 Minuten upvotet, wenn diese bestimmte Mindeststandards erfüllen. Umso besser einige Kriterien wie Wortanzahl, Bilder usw. erfüllt sind, desto mehr % Upvote erhält so ein Post. Diese Kriterien sind natürlich nicht 100% sicher Garant für Qualität, aber sie sind ein Indiz. Manuelles Upvoten ist nach wie vor am besten und der Bot eine super Ergänzung.

Mit folgenden Funktionen wurde der Bot nun erweitert.

code1839406_1280.jpg

1. Bestimmte Tags ausschließen

Es gibt Themenbereiche die will ich nicht einfach so von einer Maschine upvoten lassen, deshalb habe ich eine Liste erstellt, die geprüft wird, bevor der Bot den Vote vergibt. Ganz besonders betrifft das den Tag #politik, welcher definitiv keinen vollautomatschen ungeprüften Upvote erhalten soll. Aber auch #giveaway und #contest wollte ich nicht einfach so upvoten. Diese und einige andere Tags sind momentan auf einer Blacklist, die sich jederzeit ohne Probleme erweitern lässt

blacklist_tags = ["politik", "giveaway", "contest"]
s = Steem()
post_info = s.get_content(author, permlink)
tags_post = ast.literal_eval(post_info["json_metadata"])
for blacktag in blacklist_tags:
    if blacktag in tags_post["tags"]:
        title = "Ein Tag steht auf der Blacklist"
        break

Momentan nutze ich für die Blacklist eine kleine Liste, werde diese aber bei Bedarf auf ein eigenes Textdokument auslagern. Ich habe noch mehr Tags auf der Blacklist und bin auch stets am Analysieren, welche Tags ich ebenfalls ausschließen will.

2. User ausschließen

Ebenso wie mit den Tags gibt es immer bestimmte User, die nicht gevotet werden sollen.

ausnahmen = ["thebluewin", "auminda"]
if author in ausnahmen:
    title = "User steht auf der Ausnahmenliste"

Selber möchte ich mich nicht aus Versehen durch den Bot upvoten lassen, ebenso stehen hier User, bei denen mir meine eigenen Curation Rewards egal sind.

3. Mit mehreren Accounts nacheinander voten

Erst habe ich den Bot nur für mich entwickelt, damit er mit @thebluewin gute Posts upvotet. Allerdings kam schnell der Wunsch das mit weiteren Accounts gleichzeitig machen zu können. Dazu musste ich mein Programm nur etwas umschreiben und kann nun x beliebige Accounts den gleichen Post upvoten lassen - mit individueller Voting Weight!

Account1 votet beispielsweise immer mit dem Standardwert (1), was wohl etwa einem Durchschnittsvote von 33% entspricht. Account zwei votet mit deinem Wert von (2), was einen Durchschnittsvote von 66% ergeben würde.

Hier ein kurzer Einblick, wie ein einzelner Vote funktioniert.

voters= ["thebluewin", "PrivatePostingKey", "1"]
identifier = ('@'+author+'/'+permlink)

try:
    s = Steem(keys=[voters[1]])
    real_weight = round(post_bewertung * voters[2] / 3 * autoren_bewertung, 0)
    if real_weight > 100:
        real_weight = 100
    s.commit.vote(identifier, float(real_weight), voters[0])
    print("Erfolgreich gevotet: " + voters[0] + " mit " + str(real_weight) + "%")

except (RPCErrorRecoverable, RPCError) as err: 
    print("Exception encountered. Unable to vote")
    continue

4. Autorenbewertung nach Curation Effizienz

Das größte und beste Update, das mein Bot bekommen hat, ist die Autorenbewertung. Ein Programm analysiert die Effizienz der durch den Bot geleisteten Upvotes, was die Curation Rewards betrifft. Wenn mir ein Upvote besonders viel Curation Rewards gebracht hat, erhält der Autor des Posts eine bessere Bewertung. Beim nächsten mal wenn dieser einen Post schreibt, bekommt der Post einen besseren Upvote, oder eben einen schlechteren, wenn der Curation Reward schlecht war. So hat jeder Autor einen eigenen Wert, der jederzeit verbessert oder verschlechtert werden kann.

Dieser Teil zielt natürlich fast nur darauf ab meine Curation Rewards zu verbessern. Autoren die noch ganz neu sind und trotz sehr guter Posts kaum Upvotes in Steem erhalten, werden an dieser Stelle auch von meinem Bot benachteiligt, da sie mir logischwerweise keine guten Curation Rewards eingebracht haben. Allerdings schaue ich mir immer nochmal persönlich alle Posts an und wenn wirklich richtig gute dabei sind, passe ich die Autorenbewertung manuell an.

So ist der Ablauf der automatischen Bewertung:

  1. Gevotete Posts werden in einem Dokument gespeichert
  2. Ein Skript prüft das Dokument
  3. Alle Posts in dem Dokument zwischen 7 und 14 Tage Alter werden analysiert
  4. Es wird ein Durchschnittwert für die Curation Effizienz gebildet
  5. Jeder einzelne Post der noch nie verarbeitet wurde wird analysiert und mit dem Durchschnittwert verglichen
  6. Der Autor erhält eine neue Bewertung welche in ein eigenes Dokument gespeichert wird

Der schwerste Teil war es für mich zu berechnen, wie hoch die Curation Rewards bei einem Post für mich sind. Leider wird das nicht einfach so in der Blockchain gespeichert, sondern nur alle einzelnen Votes für einen Post. Ich habe es dann hinbekommen, bin mir aber nicht 100% sicher, ob das Programm die komplett richtigen Werte berechnet. Sie sind aber soweit richtig, dass sie für mein Programm reichen.

for vote in sorted(votes[0:], key=lambda x: float(x["zeit"]), reverse=False):  
    reward = (vote["zeit"] / 900)
        if reward > 1:
            reward = 1    
          
        if vote["voter"] == "thebluewin":
            change = 1
            verlust = 1 - reward
            eigener_wert = int(vote["rshares"])
    
        if change != 1:
            vor_mir_shares = vor_mir_shares + int(vote["rshares"])
        else:
            nach_mir_shares = nach_mir_shares + int(vote["rshares"])
                         
komplette_shares = vor_mir_shares + nach_mir_shares

verlust = verlust * 0.25
vor_mir_shares = vor_mir_shares * 0.25   
eigener_wert = eigener_wert * 0.25  
komplette_shares = komplette_shares * 0.25  

gesamtreward = (math.sqrt((vor_mir_shares + eigener_wert)) - math.sqrt(vor_mir_shares)) * math.sqrt(komplette_shares)* (1 - verlust)

effizienz = gesamtreward / eigener_wert 

Fazit

Mein Bot läuft jetzt bereits so lange, dass sich schon eine relativ gute Liste mit Autoren und deren Bewertung angesammelt hat. Ich werde nun beobachten wie sich meine Curation Rewards auf diese Art und Weise über die nächsten Wochen verändern und dann davon berichten.

Ansonsten möchte ich mich als nächstes auf die Contentbewertung eines Posts konzentrieren um diese hoffentlich noch stark verbessern zu können.


Hier die ersten beiden Teile meiner Programmier-Serie:

  • /deutsch/@thebluewin/ich-lerne-programmieren-und-du-kannst-das-auch-teil-1
  • /deutsch/@thebluewin/ich-lerne-programmieren-und-du-kannst-das-auch-teil-2-erster-bot-mit-python
Sort:  

Ich bin schon zu blöd Steemit in Python zu integrieren. Mache zwar alles nach Anleitung, aber es kommt immer eine Fehlermeldung. Und um mich genauer da rein zu arbeiten fehlt mir im Moment einfach die Zeit. Es gibt ja einige Anleitungen, aber nie so richtig Punkt für Punkt. Immer werden gewisse Dinge einfach voraus gesetzt was es einem als Anfänger manchmal doch sehr schwer macht.

Da stimme ich dir zu, meist werden bestimmte Dinge vorausgesetzt. Ich hab wirklich viel Zeit mit Google und Ausprobieren verbracht. Wenn ich mal noch mehr Erfahrung habe, will ich Schritt für Schritt Anleitungen zu bestimmten Sachen in Python und Steem erstellen, die alles genauestens erklären.

Dann warte ich noch ein wenig. Vielleicht klappt es ja dann mit deiner Anleitung.

Das ist gut, den darauf auch warte ich auch :)

Ich verzweifel so langsam. Ich lese hunderte von Anleitungen. Ich schnalle es nicht. Selbst die Anleitungen für Dummies sind mir zu hoch. Ich glaube ja auch mittlerweile alles durcheinander zu versuchen. Von Python über Java, Anaconda, Node js, npm und wie der ganze Kram heißt. Mein PC ist mittlerweile voll gemüllt mit Programmiertools. Ich habe null Plan was da wohin gehört. Gibt es denn nirgens eine simple Anleitung am besten in deutsch und für Windows. Schritt für Schritt. Nicht immer 5 Schritte überspringen. Das nervt mich, dass ich mit der Kram kein Stückchen vorwärts komme.
Soviel mal zu meiner momentanen Gefühlslage. Das musste ich jetzt mal loswerden. Und ganz so doof bin ich eigentlich nicht.

Was ist denn dein aktuelles Vorhaben, bzw. wo genau kommst du gerade nicht weiter?

Spannender Einblick, vielen Dank dafür. Wie genau kannst du voraussehen wie hoch deine Curationrewards sein werden? Das hängt doch von der Anzahl und Höhe der Votes ab, die nach deinem Upvote folgen oder täusche ich mich da?

Danke :) Für die Curation Bewertung analysiere ich nur Posts die bereits mindestens 7 Tage alt sind, sodass sich nichts mehr an der Curation ändern kann. Die Höhe der Curation ist von der Anzahl und Höhe der nach mir erfolgten Votes abhängig, das stimmt.

Klingt super willst du als nächstes einen Curation Report für Helpie-caster machen oder dir das script von chiren anschauen? (vielleicht bekommst du das ja zum laufen )

Klar, schau ich mir gern mal an! Schicks mir einfach mal in Discord, dann schau ich's mir an und probiere bissl rum, bis es (hoffentlich) läuft.

Ich bin echt beeindruckt wie gut das schon läuft! Gleichzeitig erinnert dieser post mich daran wie lang ich jetzt schon nicht mehr an meinem Projekt weiter gemacht habe...
Ich bin gespannt wie du den Parameter für den Inhalt optimieren willst :)

Posted using Partiko iOS

Ich bin tatsächlich auch begeistert und hätte am Anfang nicht gedacht, dass es SO schnell geht etwas funktionierendes zu programmieren.
Ich bin auch schon auf deinen nächsten Bericht gespannt :)

ist schon beeindruckend, wie weit Dein projekt schon ist. viele helfende hände sind gut, umsetzen muss man es aber trotzdem alleine. RESPEKT!!! bin auf Deinen nächsten bericht gespannt. lg michael

Vielen dank! Ich freue mich auch schon auf meinen nächsten Bericht, mal schauen wie es sich entwickelt. Es ist auf jeden Fall schön, dass sich andere dafür interessieren, das motiviert mich noch mehr :)

ein sehr interessantes Projekt. das könnte auch was für mich sein 🤨

Du hast doch schon einen Bot am Start ... ;)

Danke, ich kann es jedem nur empfehlen sich in Python einzuarbeiten. Macht echt Spaß hier in Steem und es lassen sich viele nützliche Dinge damit anstellen.

Schade, ich hätte ja schon gern gewußt, welchen Namen Dein Bot trägt, so rein aus Recherchegründen, die morgen klar werden werden. ;)

Ich nutze nicht speziell einen eigenen Bot-Account, es ist vielmehr so, dass mein Bot-Programm für mich selber (@thebluewin) Votes tätigt. Am Tag vergebe ich aktuell etwa die Hälfte meiner Votepower automatisch durch mein Programm. Langfristig will ich einen weiteren Account nutzen, der dann komplett nur als Bot votet ;)

Ok danke. Ich dachte schon, der "heilige Tinitus" wär Deiner. ;)

Wie heißt denn der Account vom "heiligen Tinitus"?

Congratulations @thebluewin! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 3000 upvotes. Your next target is to reach 4000 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Hey, Du wurdest von @altobot gevotet!