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
- Pengetahuan tentang bahasa pemrograman Python
- Python3
- Modul untuk bekerja dengan file XML
- Perpustakaan Python: vk_api dan waktu
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