VK Auto-Posting-Bot

HINWEIS: Artikel, die nur zu Bildungszwecken erstellt wurden. Ich empfehle Ihnen nicht, das am Ende der Lektion erhaltene Produkt zu verwenden, um Unannehmlichkeiten oder eigenen Nutzen zu bringen


Was machen wir



Bot zum automatischen Posten von Posts auf der Community-Pinnwand oder der Vk-Seite



Wozu



Zu Informationszwecken



Was brauchen wir





Lasst uns beginnen



Zum Arbeiten benötigen wir ein Token mit Wall- und Offline-Berechtigungen. Um ein Token zu erhalten, erstellen Sie Ihre Vk Standalone-Anwendung . Und speichern Sie die ID. Folgen Sie



dann dem Link:

oauth.vk.com/authorize?client_id=IDAPP&scope=wall , offline & redirect_uri = http: //api.vk.com/blank.html&response_type=token

und ersetzen Sie Ihre Anwendungs-ID anstelle von IDAPP. Oder nutzen Sie den Link , den ich speziell für Sie vorbereitet habe.



Wenn alles richtig gemacht wurde, werden Sie zu einer anderen Site weitergeleitet, und auf der URL-Seite im GET-Parameter access_token befindet sich ein Token, das wir benötigen. Speichern Sie es.



XML-Arbeit



Um die Einstellungen zu speichern, erstellen wir eine XML-Datei mit folgendem Inhalt:



<settings>
  <token>token</token>
  <textPost>Text post</textPost>
  <interval>120</interval>
  
  <post>
    <attachments>
      <attachment>attachment</attachment>
    </attachments>
    <copyright>copyright</copyright>
    <v>5.122</v>
  </post>
  
  <groups>
    <group>short name group</group>
  </groups>
</settings>


Ersetzen:



  • "Token" für das Token, das wir oben erhalten haben
  • "Textpost" für die Nachricht, die in der Post sein soll
  • "Anhang" zu dem Objekt, das an den Pfosten angehängt werden soll
  • "Copyright" zum Quelllink
  • "Kurznamengruppe" zum Kurznamen (ohne vk.com ) der Community- / Benutzerseite, auf der die Veröffentlichung stattfinden soll (die Wand muss zur Veröffentlichung geöffnet sein).


Beginnen wir mit dem Schreiben von Code



Wir importieren alle erforderlichen Bibliotheken, erstellen eine Instanz unseres Moduls und melden uns im Namen des Benutzers über ein Token bei VKontakte an.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))


Als nächstes erhalten wir alle Kurzadressen, an denen die Beiträge veröffentlicht werden.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))

groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
    groupsShortName += child.text + ","

for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
    groupsId.append(group["id"] * -1)

del groupsShortName


Jetzt erhalten wir die Nachricht, die im Beitrag enthalten sein wird, das Intervall, in dem die Beiträge veröffentlicht werden, und die Quelle des Beitrags.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))

groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
    groupsShortName += child.text + ","

for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
    groupsId.append(group["id"] * -1)

del groupsShortName

textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))


Jetzt erhalten wir alle Objekte, die an den Beitrag angehängt werden.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))

groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
    groupsShortName += child.text + ","

for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
    groupsId.append(group["id"] * -1)

del groupsShortName

textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))

attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")


Wir haben bereits alle Daten, die wir veröffentlichen müssen. Sie müssen lediglich eine Funktion zum Veröffentlichen und eine Schleife erstellen, die die Funktion zum Veröffentlichen aufruft.



Lassen Sie uns zunächst eine Schleife ausführen und die Funktion leer lassen. Der gleiche Code funktioniert nur, wenn er von der Konsole ausgeführt wird.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))

groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
    groupsShortName += child.text + ","

for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
    groupsId.append(group["id"] * -1)

del groupsShortName

textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))

attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")

done = False

def publicPosts():
    pass

if __name__ == "__main__":
    done = True

while done:
    publicPosts()
    time.sleep(intervalPost)


Um einen Beitrag zu veröffentlichen, rufen wir die API-Methode "wall.post" auf und übergeben die get-Parameter früher. Wenn alles richtig funktioniert, wird eine entsprechende Meldung in der Konsole angezeigt.



import vk_api
import time

from modules import XML as moduleXml

XML = moduleXml.XML("settings")
VK = vk_api.VkApi(token=XML.parsingFile("token"))

groupsId = []
groupsShortName = ""
for child in XML.parsingFile("groups", False):
    groupsShortName += child.text + ","

for group in VK.method("groups.getById", {"group_ids": groupsShortName}):
    groupsId.append(group["id"] * -1)

del groupsShortName

textPost = XML.parsingFile("textPost")
intervalPost = int(XML.parsingFile("interval"))

attachments = [attachment.text for attachment in XML.parsingFile("attachments", False)]
copyright = XML.parsingFile("copyright")
v = XML.parsingFile("v")

done = False

def publicPosts():
    for groupId in groupsId:
        for i in range(1, 5):
            result = VK.method("wall.post", {
                "owner_id": groupId,
                "message": textPost,
                "attachments": attachments,
                "copyright": copyright,
                "v": v
            })
            if result["post_id"]:
                print("Good post, id post - " + str(result["post_id"]))
            else:
                print("Error posting")

if __name__ == "__main__":
    done = True

while done:
    publicPosts()
    time.sleep(intervalPost)


Fazit



Das war's, der ganze Code ist fertig. Ich werde Ihnen sofort sagen, dass ich 13 Jahre alt bin. Und ich möchte erzählen und teilen, was ich tun und für andere interessant finden kann. Meine letzte Veröffentlichung wurde von mehr als 2.000 Personen gelesen, und 40 Personen wurden mit Lesezeichen versehen, obwohl es etwas zu verbessern gibt. Das hat mich motiviert, vielen Dank.



Projekt auf gitHub .



HINWEIS: Artikel, die nur zu Bildungszwecken erstellt wurden. Ich empfehle Ihnen nicht, das am Ende der Lektion erhaltene Produkt zu verwenden, um Unannehmlichkeiten oder eigenen Nutzen zu bringen



All Articles