Bot de publication automatique VK

NOTE: Article créé uniquement à des fins éducatives, je ne vous encourage pas à utiliser le produit obtenu à la fin du cours, pour apporter des inconvénients ou pour votre propre bénéfice


Qu'est-ce qu'on fait



Bot pour publier automatiquement des messages sur le mur de la communauté ou la page Vk



Pourquoi



À titre informatif



De quoi avons nous besoin





Commençons



Pour fonctionner, nous avons besoin d'un jeton avec des autorisations murales et hors ligne. Pour recevoir un jeton, créez votre application Vk Standalone . Et enregistrez son identifiant.



Suivez ensuite le lien:

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

Et remplacez votre ID d'application par IDAPP. Ou utilisez le lien que j'ai préparé spécialement pour vous.



Si tout est fait correctement, vous serez transféré vers un autre site, et dans la page URL du paramètre GET access_token, il y aura un jeton dont nous avons besoin, enregistrez-le.



Travail XML



Pour stocker les paramètres, nous allons créer un fichier .xml avec le contenu suivant:



<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>


Remplacer:



  • "Token" pour le token que nous avons reçu ci-dessus
  • "Message texte" pour le message qui devrait figurer dans le message
  • "Pièce jointe" à l'objet à attacher au message
  • "Copyright" vers le lien source
  • "Groupe de noms courts" au nom court (sans vk.com ) la communauté / page utilisateur où la publication aura lieu (le mur doit être ouvert pour publication)


Commençons à écrire du code



Nous importons toutes les bibliothèques nécessaires, créons une instance de notre module et nous nous connectons à VKontakte au nom de l'utilisateur via un jeton.



import vk_api
import time

from modules import XML as moduleXml

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


Ensuite, nous obtenons toutes les adresses courtes où les articles seront publiés.



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


Nous obtenons maintenant le message qui sera dans la publication, l'intervalle avec lequel les messages seront publiés et la source de la publication.



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"))


Maintenant, nous obtenons tous les objets qui seront attachés au message.



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")


Nous avons déjà toutes les données dont nous avons besoin pour publier. Il ne reste plus qu'à créer une fonction pour la publication et une boucle qui appellera la fonction pour la publication.



Tout d'abord, faisons une boucle et laissons la fonction vide. Le même code ne fonctionnera que s'il est exécuté à partir de la console.



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)


Pour publier un article, nous allons appeler la méthode API "wall.post" et transmettre les paramètres get plus tôt. Si tout fonctionne correctement, un message correspondant sera affiché dans la console.



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)


Conclusion



Voilà, tout le code est prêt. Je vais vous dire tout de suite que j'ai 13 ans. Et je veux dire et partager ce que je peux faire et trouver intéressant pour les autres. Ma dernière publication a donc été lue par plus de 2 000 personnes, et 40 personnes ont été mises en signet, bien qu'il y ait quelque chose à améliorer. Cela m'a motivé, merci beaucoup.



Projet sur gitHub .



NOTE: Article créé uniquement à des fins éducatives, je ne vous encourage pas à utiliser le produit obtenu à la fin du cours, pour apporter des inconvénients ou pour votre propre bénéfice



All Articles