• Как сделать бота VK, который получает цифровой ID из ссылки и отправляет пользователю?

    @SD4RK
    1. Из ссылки оставляем только короткое имя или id страницы
    2. Передаём то, что получили в метод utils.resolveScreenName, или users.get
    3. ???

    примерный код:
    import vk_api
    
    vk = vk_api.VkApi(token="ТОКЕН")
    
    def resolve_url(url):
        # url - 'vk.com/durov'
        screen_name = url.split('/')[-1]
        # screen_name - 'durov'
        id_ = vk.method('users.get', {'user_ids': screen_name})[0]['id']
        # id_ - 1
        return id_
    Ответ написан
    Комментировать
  • Как писать длинные сообщения в TG боте на Python?

    @SD4RK
    Можно использовать тройные кавычки:
    a = """
    Строчка 1
    Строчка 2
    """

    либо делать так:
    a = ("Строчка 1\n"
         "Строчка 2"
         )
    Ответ написан
    Комментировать
  • Почему hashlib не устанавливается для python3?

    @SD4RK
    hashlib - стандартная библиотека Python начиная с версии 2.5 (если не ошибаюсь). Та библиотека, которую пытаетесь установить вы, создана для версий Python ниже 2.5, поэтому неудивительно, что python 3.6 ругается на синтаксис.
    Ответ написан
    Комментировать
  • Как написать бота для отслеживания постов в группе ВКонтакте на User Long Poll API?

    @SD4RK
    Не знаю зачем здесь именно Long Poll.
    import time
    import sqlite3
    import hashlib
    import vk_api
    
    
    
    
    class GroupAlerts:
        def __init__(self, token):
            self.__groups_list = []
            self.__vk = vk_api.VkApi(token=token)
            self.__connection = sqlite3.connect("GroupAlerts.db")
            self.__cursor = self.__connection.cursor()
            self.__cursor.execute("""CREATE TABLE IF NOT EXISTS group_info(group_id INTEGER NOT NULL,
                                                                           last_wall_id VARCHAR,
                                                                           last_check INTEGER);
                                  """)
            self.__connection.commit()
        def add_new(self, *args):
            for group in args:
                group_screen_name = "public{}".format(group) if str(group).isdigit() else group
                group_resolved_name = self.__vk.method("utils.resolveScreenName", {"screen_name": group_screen_name})
                if group_resolved_name == []:
                    print("{} - invalid group id!".format(group))
                    continue
                self.__groups_list.append(group_resolved_name["object_id"])
                walls = self.__vk.method("wall.get", {"owner_id": -group_resolved_name["object_id"], "count": 1})
                if walls["items"] != []:
                    last_wall = walls["items"][0]
                    last_wall_id = "{}_{}".format(last_wall["owner_id"], last_wall["id"])
                    self.__cursor.execute("INSERT INTO group_info VALUES(?, ?, ?)",
                                      (group_resolved_name["object_id"], last_wall_id, time.time()))
                self.__connection.commit()
    
        def check_wall(self):
            for group_id in self.__groups_list:
                last_db_wall = self.__cursor.execute("SELECT * FROM group_info WHERE group_id=?",
                                                          (group_id,)).fetchone()
                if last_db_wall != [] and time.time() - last_db_wall[2] > 5:
                    walls = self.__vk.method("wall.get", {"owner_id": -group_id, "count": 1})
                    if walls["items"] != []:
                        last_wall = walls["items"][0]
                        last_wall_id = "{}_{}".format(last_wall["owner_id"], last_wall["id"])
                        if last_db_wall[1] != last_wall_id and last_wall["id"] > int(last_db_wall[1].split("_")[1]):
                            self.__cursor.execute("UPDATE group_info SET last_wall_id=? WHERE group_id=?",
                                                  (last_wall_id, group_id))
    
                            yield last_wall
                    self.__cursor.execute("UPDATE group_info SET last_check=? WHERE group_id=?",
                                          (time.time(), group_id))
                    self.__connection.commit()
    
    
    if __name__ == '__main__':
        gAlerts = GroupAlerts('ТОКЕН')
        gAlerts.add_new("ГРУППА")
        while True:
            for new_wall in gAlerts.check_wall():
                pass
                # Обработка записи здесь

    Наверняка можно сделать это гораздо легче, но я лёгких путей не ищу.
    Ответ написан
    Комментировать
  • Как загружать изображения в сообщения через vk_api?

    @SD4RK
    Ссылка должна быть с протоколом HTTPS, самый простой выход - залить фотографию в вк и раздобыть ссылку на фотку через код элемента, чтобы ссылка выглядела примерно так "https://pp.userapi.com/.../.../xxx.jpg", и уже её вставьте в код, по идее, всё должно заработать.
    Ответ написан