Задать вопрос
@uprj

Установка и обновление виджета ВКонтакте с помощью Python?

Хочу сделать виджет для группы во вконтакте через Python. Проблема в том, что вк хочет код джавы. И плюс нужно, чтобы код возвращал виджет. Как в пайтоне сделать, чтобы в запросе был return?
vk = vk_api.VkApi(token = token)

widget = { 
    "title": "My Table", 
    "title_url": "https://link", 
    "title_counter": 31, 
    "more": "Посмотреть все результаты", 
    "more_url": "https://link2", 
    "head": [{ 
        "text": "Название первой колонки" 
    }, { 
        "text": "Название второй колонки", 
        "align": "center" 
    }], 
    "body": [ 
        [{ 
            "text": "Это первая ячейка первой строки", 
            "icon_id": "3484735_23434324" 
        }, 
        { 
            "text": "Это вторая ячейка первой строки", 
            "url": "https://vk.com/wall-12345_542321" 
        }], 
        [{ 
            "text": "Это первая ячейка второй строки", 
            "icon_id": "3484735_23434324" 
        }, 
        { 
            "text": "Это вторая ячейка второй строки", 
            "url": "https://vk.com/wall-12345_54321" 
        } 
        ] 
    ] 
}

vk.method('appWidgets.update', {"code": widget, "type": 'table'})

Данный код выдаёт ошибку:
vk_api.exceptions.ApiError: [12] Unable to compile code: undefined identifier 'body' in line 1

Если конвертировать это всё в строку, то начнёт ругаться на ;, которой в python'e нет.
vk = vk_api.VkApi(token = token)

widget = str({ 
    "title": "My Table", 
    "title_url": "https://link", 
    "title_counter": 31, 
    "more": "Посмотреть все результаты", 
    "more_url": "https://link2", 
    "head": [{ 
        "text": "Название первой колонки" 
    }, { 
        "text": "Название второй колонки", 
        "align": "center" 
    }], 
    "body": [ 
        [{ 
            "text": "Это первая ячейка первой строки", 
            "icon_id": "3484735_23434324" 
        }, 
        { 
            "text": "Это вторая ячейка первой строки", 
            "url": "https://vk.com/wall-12345_542321" 
        }], 
        [{ 
            "text": "Это первая ячейка второй строки", 
            "icon_id": "3484735_23434324" 
        }, 
        { 
            "text": "Это вторая ячейка второй строки", 
            "url": "https://vk.com/wall-12345_54321" 
        } 
        ] 
    ] 
})

vk.method('appWidgets.update', {"code": widget, "type": 'table'})

vk_api.exceptions.ApiError: [12] Unable to compile code: ';' expected, ' in line 1

Помогите, что делать?
  • Вопрос задан
  • 324 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@saalaus
Ну, во-первых
code должен возвращать JSON-объект, описывающий виджет.

то есть должно быть так:
return {
    widget
};

а во-вторых,
Операторы должны быть разделены точкой с запятой.

советую изначально писать код в строке, а не из словаря.
но главная проблема что нет return {};, можно сделать так:
widget = str({ 
    "title": "My Table", 
    "title_url": "https://vk.com/id1", 
    "title_counter": 31, 
    "more": "Посмотреть все результаты", 
    "more_url": "https://vk.com/id2", 
    "head": [{ 
        "text": "Название первой колонки" 
    }, { 
        "text": "Название второй колонки", 
        "align": "center" 
    }], 
    "body": [ 
        [{ 
            "text": "Это первая ячейка первой строки", 
            "icon_id": "id1" 
        }, 
        { 
            "text": "Это вторая ячейка первой строки", 
            "url": "https://vk.com/wall-12345_542321" 
        }], 
        [{ 
            "text": "Это первая ячейка второй строки", 
            "icon_id": "id2" 
        }, 
        { 
            "text": "Это вторая ячейка второй строки", 
            "url": "https://vk.com/wall-12345_54321" 
        } 
        ] 
    ] 
})
    code = f"return {widget};"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы