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
- Connaissance de la programmation Java Python
- Python3
- Module pour travailler avec des fichiers XML
- Bibliothèques Python: vk_api et time
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