VK自動投稿ボット

注:教育目的でのみ作成された記事です。不便や自己利益をもたらすために、レッスンの最後に取得した製品を使用することはお勧めしません。


私たちは何をしますか



コミュニティウォールまたはVkページに投稿自動投稿するためのボット



何のために



情報提供の目的で



私たちは何が必要なのか





はじめましょう



動作するには、壁とオフラインの権限を持つトークンが必要です。トークンを受け取るには、Vkスタンドアロンアプリケーションを作成しますそして、そのIDを保存します。



次に、次のリンクをたどり ます。oauth.vk.com/ authorize?client_id =

IDAPPscope = wall、offline&redirect_uri = http://api.vk.com/blank.html&response_type=token

そして、IDAPPの代わりにアプリケーションIDを使用します。または、私があなたのために特別に用意しリンク使用してください。



すべてが正しく行われると、別のサイトに移動し、GETパラメーターaccess_tokenのURLページに、必要なトークンがあり、それを保存します。



XML作業



設定を保存するために、次の内容の.xmlファイルを作成します。



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


交換:



  • 上記で受け取ったトークンの「トークン」
  • 投稿に含めるべきメッセージの「テキスト投稿」
  • ポストに取り付けるオブジェクトへの「アタッチメント」
  • ソースリンクへの「著作権」
  • 「ショートネームグループ」からショートネーム(vk.comなし)への公開が行われるコミュニティ/ユーザーページ(公開のために壁が開いている必要があります)


コードを書き始めましょう



必要なすべてのライブラリをインポートし、モジュールのインスタンスを作成して、トークンを介してユーザーに代わってVKontakteにログインします。



import vk_api
import time

from modules import XML as moduleXml

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


次に、投稿が公開されるすべての短いアドレスを取得します。



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


これで、投稿に含まれるメッセージ、投稿が公開される間隔、および投稿のソースが表示されます。



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


これで、投稿に添付されるすべてのオブジェクトを取得できます。



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


公開する必要のあるすべてのデータはすでにあります。あとは、公開用の関数と、公開用の関数を呼び出すループを作成するだけです。



まず、ループして関数を空のままにします。同じコードは、コンソールから実行された場合にのみ機能します。



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)


投稿を公開するには、「wall.post」APIメソッドを呼び出し、getパラメーターを先に渡します。すべてが正常に機能すると、対応するメッセージがコンソールに表示されます。



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)


結論



これで、すべてのコードの準備が整いました。私は13歳です。そして、自分に何ができるかを伝え、共有し、他の人にとって面白いと思っています。ですから、私の最後の出版物は2k人以上の人読まれ、40人がブックマークされましたが、改善すべき点はあります。これが私を動機づけました、どうもありがとうございました。



gitHubのプロジェクト



注:教育目的でのみ作成された記事です。不便や自己利益をもたらすために、レッスンの最後に取得した製品を使用することはお勧めしません。



All Articles