Bot pengeposan otomatis VK

CATATAN: Artikel dibuat hanya untuk tujuan pendidikan, saya tidak mendorong Anda untuk menggunakan produk yang diperoleh di akhir pelajaran, untuk membawa ketidaknyamanan atau keuntungan sendiri


Apa yang kita lakukan



Bot untuk posting otomatis di dinding komunitas atau halaman Vk



Untuk apa



Untuk tujuan informasional



Apa yang kita butuhkan





Ayo mulai



Untuk bekerja, kami memerlukan token dengan izin dinding dan offline. Untuk menerima token, buat aplikasi Vk Standalone Anda . Dan simpan ID-nya.



Kemudian ikuti tautan:

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

Dan gantikan ID aplikasi Anda, bukan IDAPP. Atau gunakan link yang sudah saya siapkan khusus untuk Anda.



Jika semuanya sudah dilakukan dengan benar, Anda akan dipindahkan ke situs lain, dan di halaman URL di GET parameter access_token akan ada token yang kita butuhkan, simpan.



Pekerjaan XML



Untuk menyimpan pengaturan, kami akan membuat file .xml dengan konten berikut:



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


Menggantikan:



  • "Token" untuk token yang kami terima di atas
  • "Text post" untuk pesan yang seharusnya ada di dalam postingan
  • "Lampiran" ke objek yang akan dilampirkan ke postingan
  • "Hak Cipta" ke tautan sumber
  • "Grup nama pendek" ke nama pendek (tanpa vk.com ) halaman komunitas / pengguna tempat publikasi akan dilakukan (dinding harus terbuka untuk publikasi)


Mari mulai menulis kode



Kami mengimpor semua pustaka yang diperlukan, membuat instance modul kami dan masuk ke VKontakte atas nama pengguna melalui token.



import vk_api
import time

from modules import XML as moduleXml

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


Selanjutnya, kami mendapatkan semua alamat singkat tempat posting akan dipublikasikan.



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


Sekarang kita mendapatkan pesan yang akan ada di posting, interval posting akan diterbitkan dan sumber posting.



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


Sekarang kita mendapatkan semua objek yang akan dilampirkan ke postingan.



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


Kami sudah memiliki semua data yang perlu kami publikasikan. Yang tersisa hanyalah membuat fungsi untuk penerbitan dan loop yang akan memanggil fungsi untuk penerbitan.



Pertama, mari mengulang dan membiarkan fungsinya kosong. Kode yang sama hanya akan berfungsi jika dijalankan dari konsol.



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)


Untuk mempublikasikan posting, kita akan memanggil metode API "wall.post" dan meneruskan parameter get sebelumnya. Jika semuanya berjalan dengan benar, pesan yang sesuai akan ditampilkan di konsol.



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)


Kesimpulan



Itu saja, semua kode sudah siap. Saya akan segera memberi tahu Anda bahwa saya berusia 13 tahun. Dan saya ingin menceritakan dan berbagi apa yang dapat saya lakukan dan menurut saya menarik bagi orang lain. Jadi terbitan terakhir saya dibaca oleh 2k + orang, dan 40 orang telah diberi bookmark, meskipun ada sesuatu yang perlu ditingkatkan. Ini memotivasi saya, terima kasih banyak.



Proyek di gitHub .



CATATAN: Artikel dibuat hanya untuk tujuan pendidikan, saya tidak mendorong Anda untuk menggunakan produk yang diperoleh di akhir pelajaran, untuk membawa ketidaknyamanan atau keuntungan sendiri



All Articles