@shit_im_here_again

Как соединить эти два кода?

Не могу соединить два кода
Первый:
import asyncio
from vkbottle import API
import json
import os

import requests
group_name = 'voentorg42'

token = "vk1.a.gmShTzeR55UwG9dfGtwOXvlgK_jpqWa_losqw2esm-puflCa1PDuz9WsUqD-S-hoZpnDa13K6Y8fGWr7hY0kYAtlh5hMAc5y-282srVb0hFKZakOZdm8MhQ0lxRkQexaitx8SrSrt4d6uFAYqXSAVWDLkkMGstCfcBucKAOf-dw68MyyaT_OlQa24xWZ3lWjBH"

# group_name = input("Введите название группы: ")
#
# url = f"https://api.vk.com/method/wall.get?domain={group_name}&count=40&access_token={token}&v=5.52"
# req = requests.get(url)
# print(req.text)


def get_wall_posts(group_name):
    url = f"https://api.vk.com/method/wall.get?domain={group_name}&count=40&access_token={token}&v=5.131"
    req = requests.get(url)
    src = req.json()

    # проверяем существует ли директория с именем группы
    if os.path.exists(f"{group_name}"):
        print(f"Директория с именем {group_name} уже существует!")
    else:
        os.mkdir(group_name)

    # сохраняем данные в json файл, чтобы видеть структуру
    with open(f"{group_name}/{group_name}.json", "w", encoding="utf-8") as file:
        json.dump(src, file, indent=4, ensure_ascii=False)

    # собираем ID новых постов в список
    fresh_posts_id = []
    posts = src["response"]["items"]

    for fresh_post_id in posts:
        fresh_post_id = fresh_post_id["id"]
        fresh_posts_id.append(fresh_post_id)

    """Проверка, если файла не существует, значит это первый
    парсинг группы(отправляем все новые посты). Иначе начинаем
    проверку и отправляем только новые посты."""
    if not os.path.exists(f"{group_name}/exist_posts_{group_name}.txt"):
        print("Файла с ID постов не существует, создаём файл!")

        with open(f"{group_name}/exist_posts_{group_name}.txt", "w") as file:
            for item in fresh_posts_id:
                file.write(str(item) + "\n")
        
        # извлекаем данные из постов
        for post in posts:

            global post_id
            post_id = post["id"]
            print(f"Отправляем пост с ID {post_id}")

            try:
                if "attachments" in post:
                    post = post["attachments"]

                    # забираем фото
                    if post[0]["type"] == "photo":

                        photo_quality = [
                            "photo_2560",
                            "photo_1280",
                            "photo_807",
                            "photo_604",
                            "photo_130",
                            "photo_75"
                        ]

                        if len(post) == 1:

                            for pq in photo_quality:
                                if pq in post[0]["photo"]:
                                    post_photo = post[0]["photo"][pq]
                                    print(f"Фото с расширением {pq}")
                                    print(post_photo)
                                    break
                        else:
                            for post_item_photo in post:
                                if post_item_photo["type"] == "photo":
                                    for pq in photo_quality:
                                        if pq in post_item_photo["photo"]:
                                            post_photo = post_item_photo["photo"][pq]
                                            print(f"Фото с расширением {pq}")
                                            print(post_photo)
                                            break
                                else:
                                    print("Линк или аудио пост")
                                    break

            except Exception:
                print(f"Что-то пошло не так с постом ID {post_id}!")

    else:
        print("Файл с ID постов найден, начинаем выборку свежих постов!")


def main():
    group_name = input("Введите название группы: ")
    get_wall_posts(group_name)


if __name__ == '__main__':
    main()

Второй:
async def main():
    api = API("vk1.a.gmShTzeR55UwG9dfGtwOXvlgK_jpqWa_losqw2esm-puflCa1PDuz9WsUqD-S-hoZpnDa13K6Y8fGWr7hY0kYAtlh5hMAc5y-282srVb0hFKZakOZdm8MhQ0lxRkQexaitx8SrSrt4d6uFAYqXSAVWDLkkMGstCfcBucKAOf-dw68MyyaT_OlQa24xWZ3lWjBH")
    await api.wall.create_comment(owner_id=-47092692, post_id=post_id, message="ком")

asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())

Пытаюсь сделать парсинг+комментатор бота, но не получается. Если соединить их тупо так:
код
import asyncio
from vkbottle import API
import json
import os

import requests
group_name = 'voentorg42'

token = "vk1.a.gmShTzeR55UwG9GtwOXvlgK_jpqWa_losqw2esm-puflCa1PDuz9WsUqD-S-hoZpnDa13K6Y8fGWr7hY0kYAtlh5hMAc5y-282srVb0hFKZakOZdm8MhQ0lxRkQexaitx8SrSrt4d6uFAYqXSAVWDLkkMGstCfcBucKAOf-dw68MyyaT_OlQa24xWZ3lWjBH"

# group_name = input("Введите название группы: ")
#
# url = f"https://api.vk.com/method/wall.get?domain={group_name}&count=40&access_token={token}&v=5.52"
# req = requests.get(url)
# print(req.text)


def get_wall_posts(group_name):
    url = f"https://api.vk.com/method/wall.get?domain={group_name}&count=40&access_token={token}&v=5.131"
    req = requests.get(url)
    src = req.json()

    # проверяем существует ли директория с именем группы
    if os.path.exists(f"{group_name}"):
        print(f"Директория с именем {group_name} уже существует!")
    else:
        os.mkdir(group_name)

    # сохраняем данные в json файл, чтобы видеть структуру
    with open(f"{group_name}/{group_name}.json", "w", encoding="utf-8") as file:
        json.dump(src, file, indent=4, ensure_ascii=False)

    # собираем ID новых постов в список
    fresh_posts_id = []
    posts = src["response"]["items"]

    for fresh_post_id in posts:
        fresh_post_id = fresh_post_id["id"]
        fresh_posts_id.append(fresh_post_id)

    """Проверка, если файла не существует, значит это первый
    парсинг группы(отправляем все новые посты). Иначе начинаем
    проверку и отправляем только новые посты."""
    if not os.path.exists(f"{group_name}/exist_posts_{group_name}.txt"):
        print("Файла с ID постов не существует, создаём файл!")

        with open(f"{group_name}/exist_posts_{group_name}.txt", "w") as file:
            for item in fresh_posts_id:
                file.write(str(item) + "\n")
        
        # извлекаем данные из постов
        for post in posts:

            global post_id
            post_id = post["id"]
            print(f"Отправляем пост с ID {post_id}")

            try:
                if "attachments" in post:
                    post = post["attachments"]

                    # забираем фото
                    if post[0]["type"] == "photo":

                        photo_quality = [
                            "photo_2560",
                            "photo_1280",
                            "photo_807",
                            "photo_604",
                            "photo_130",
                            "photo_75"
                        ]

                        if len(post) == 1:

                            for pq in photo_quality:
                                if pq in post[0]["photo"]:
                                    post_photo = post[0]["photo"][pq]
                                    print(f"Фото с расширением {pq}")
                                    print(post_photo)
                                    break
                        else:
                            for post_item_photo in post:
                                if post_item_photo["type"] == "photo":
                                    for pq in photo_quality:
                                        if pq in post_item_photo["photo"]:
                                            post_photo = post_item_photo["photo"][pq]
                                            print(f"Фото с расширением {pq}")
                                            print(post_photo)
                                            break
                                else:
                                    print("Линк или аудио пост")
                                    break

            except Exception:
                print(f"Что-то пошло не так с постом ID {post_id}!")

    else:
        print("Файл с ID постов найден, начинаем выборку свежих постов!")


def main():
    group_name = input("Введите название группы: ")
    get_wall_posts(group_name)


if __name__ == '__main__':
    main()
    
async def main():
    api = API("vk1.a.gmShTzeR55UwG9GtwOXvlgK_jpqWa_losqw2esm-puflCa1PDuz9WsUqD-S-hoZpnDa13K6Y8fGWr7hY0kYAtlh5hMAc5y-282srVb0hFKZakOZdm8MhQ0lxRkQexaitx8SrSrt4d6uFAYqXSAVWDLkkMGstCfcBucKAOf-dw68MyyaT_OlQa24xWZ3lWjBH")
    await api.wall.create_comment(owner_id=-47092692, post_id=post_id, message="ком")

asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())

Коментится только тот пост, чей id был получен первым
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 1
WolfInChains
@WolfInChains
Не надоело флудить одним вопросом?

Вы же сами вызвали создание коммента только 1 раз. Еще и используете синхронную библиотеку requests, принты и стандартную запись в файлы с асинхронным фреймворком vkbottle. Не говоря уже про глобальные переменные. Ну и в добавок токен от бота в коде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы