コード例 #1
0
def get_online_friends(user_id: int, bot: APIBot) -> List[int]:
    """
    Getting user id, returns list ids of online friends
    :param user_id: int
    :param bot: APIBot
    :return: List[int]
    """

    req = bot.request(method='friends.get', params={
        'user_id': user_id
    })

    if req.get('error'):
        logger.error("No valid ids")
        return []

    responses = req.get("response")

    friends = responses.get("items")

    if not friends:
        logger.warning(f"No friends for {user_id}")
        return []

    return get_online(friends, bot)
コード例 #2
0
def get_online(users_ids: List[Any], bot: APIBot) -> List[int]:
    """
    Getting list of ids, returns list of online ids
    :param users_ids: List[str]
    :param bot: APIBot
    :return: List[int]
    """

    req = bot.request(method='users.get', params={
        'user_ids': users_ids,
        'fields': ['online']
    })

    if req.get('error'):
        logger.error("No valid ids")
        return []

    online_list = []
    responses = req.get("response")

    for response in responses:
        if response.get("online") == 1:
            online_list.append(response.get("id"))

    return online_list
コード例 #3
0
ファイル: main.py プロジェクト: v1a0/vks
def preparing(users_ids: List[int], bot: APIBot):
    """
    Preparing module
    Checking profiles (users_ids) for vulnerability to attacks
    :return:
    """
    _return = []
    for user_id in users_ids:
        data = bot.request(method='friends.get',
                           params={
                               'user_id': user_id,
                               'count': settings.max_friends,
                           })

        if data.get('error'):
            logger.error(
                f"for id '{user_id}' failed\n{data.get('error').get('error_msg')}"
            )
            if data.get('error').get('error_msg') == 30:
                _return.append(User(uid=user_id, is_closed=True, friends=[]))
            continue

        friends = data.get('response').get('items')
        _return.append(
            User(uid=user_id,
                 is_closed=False,
                 friends=friends,
                 candidates=friends))

    return _return
コード例 #4
0
ファイル: database.py プロジェクト: v1a0/vks
 def executescript(self, script: str):
     """
     Sent executescript request to db
     :param script: SQLite script, for example: script = 'INSERT INTO table1 VALUES (1,2,3)'
     :return:
     """
     with sqlite3.connect(self.path) as conn:
         self.cursor = conn.cursor()
         try:
             self.cursor.executescript(script)
             conn.commit()
         except Exception as error:
             logger.error(error)
コード例 #5
0
ファイル: database.py プロジェクト: v1a0/vks
 def executemany(self, script: str, params: Iterable):
     """
     Sent executemany request to db
     :param script: SQLite script with placeholders, for example: script = 'INSERT INTO table1 VALUES (?,?,?)'
     :param params: Values for placeholders, for example: params = [ (1, 'text1', 0.1), (2, 'text2', 0.2) ]
     """
     with sqlite3.connect(self.path) as conn:
         self.cursor = conn.cursor()
         try:
             self.cursor.executemany(script, params)
             conn.commit()
         except Exception as error:
             logger.error(error)
コード例 #6
0
ファイル: main.py プロジェクト: v1a0/vks
def scrap_friends(friends_ids: [str], bot: APIBot):
    data = bot.request(method='users.get', params={
        'user_ids': friends_ids,
        'fields': ['sex', 'photo_max_orig', 'online_mobile']
    })

    if data.get('error'):
        logger.error(data.get('error').get('error_msg'))
        return

    if data.get('response'):
        for user_data in data.get('response'):
            user_data['is_closed'] = str(user_data['is_closed'])
            dbc.save_user_data(user_data=user_data)
コード例 #7
0
ファイル: main.py プロジェクト: v1a0/vks
def main(users_ids: [str], bot: APIBot):
    """
    Running main module process
    """
    status = Status(module_name='onliner')
    status.restarting()
    data = bot.request(method='users.get', params={
        'user_ids': users_ids,
        'fields': ['sex', 'online', 'photo_max_orig', 'online_mobile']
    })
    time_data = datetime.datetime.now().astimezone().replace(microsecond=0).isoformat()

    if data.get('error'):
        status.failed()
        logger.error(data.get('error').get('error_msg'))
        return

    if data.get('response'):
        status.processing()
        for user_data in data.get('response'):
            # For each target id
            # Adding data to main dict
            friends_online = friends.get_online_friends(user_id=user_data['id'], bot=bot)
            user_data['time'] = time_data
            user_data['is_closed'] = str(user_data['is_closed'])
            user_data['friends_online'] = friends_online

            # Saving data
            dbc.save_user_data(user_data=user_data)
            dbc.save_user_online(user_data=user_data)

            logger.info(f"[{user_data.get('id')}] {user_data.get('first_name')} {user_data.get('last_name')} - "
                        f"{'Online' if user_data.get('online') == 1 else 'Offline'}")

            # Running friends scrapping
            process = Process(target=scrap_friends, args=(friends_online, bot))  # running module
            process.start()

        status.success()

    else:
        status.failed()
        logger.error(f"No answer for {users_ids}...")