Как найти email пользователя GitHub и написать Telegram бота для решения этой задачи?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Этот пост будет полезен двум категориям людей: IT-рекрутерам и начинающим разработчикам, которые хотят научиться писать простенькие программы для решения практических задач.

Задача: известен профиль пользователя на GitHub, необходимо найти email этого пользователя

Идея написать бота пришла ко мне после того, как коллега поделилась со мной способом, которым эту задачу решают IT-рекрутеры:

1. Нужно ввести в адресную строку https://api.github.com/users/ник жертвы/events/public и открыть страницу

2. Нажать Ctrl+F и найти все символы "@"


3. Отсмотреть результаты и найти всё, что похоже на адрес электронной почт

Так выглядит результат поиска и найденный адрес электронной почты
Так выглядит результат поиска и найденный адрес электронной почты

На тот момент я ещё не знал о существовании EmailOnGitHub в Chrome Store и принялся писать бота на Python:

import requests, telebot, time

tkn = 'ваш_токен_телеграм_бота'
bot = telebot.TeleBot(tkn)


# Обработчик сообщения /start 

@bot.message_handler(commands=['start'])
def start_message(message):
    bot.send_message(message.chat.id, 'Привет, я помогу тебе найти email пользователя гитхаб по его нику. Отправь мне ник пользователя и, если он существует, я найду его почту')
                            

# Любое сообщение боту - это запрос на поиск по нику на гитхаб
# В качестве ответа отправляется результат выполнения функции email_finder

@bot.message_handler(content_types=['text'])
def send_text(message):

    bot.send_message(message.chat.id, email_finder(message.text))

Предполагается, что пользователь будет отправлять боту только ники людей на гитхаб, а наш бот, в свою очередь, отправляет любое входящее сообщение в функцию email_finder.

Эта функция должна возвращать либо электронную почту цели, либо ошибку. Приступим к написанию функции:

# Функция осуществляет запрос к апи гитхаб, на выходе отображает список публичных действий юзера
# Нас интересуют только коммиты, в них есть email автора коммита 

def email_finder(nick):
    rawlist, newlist = [], []

    # Делаем запрос на гитхаб, в запрос подставляем ник из входящего сообщения

    url = f'https://api.github.com/users/{nick}/events/public'
    r = requests.get(url)

    # Проверка существования адреса
    # Если пользователь найден - идем дальше по циклу, иначе выходим

    if r.status_code == 200:
        print('status 200 - OK')

        # Если пользователь найден, но возвращается пустой массив, то у юзера нет коммитов
        # Выходим из цикла с сообщением "Невозможно найти почту"

        if not r.json():
            return 'Пользователь найден. Невозможно найти email.'

    elif url_status == 404:
        return 'Юзер с таким ником не найден'
    else:
        return 'Неизвестная ошибка'

    # Поиск и выгрузка коммитов

    for element in r.json():
        if element['type'] == 'PushEvent':
            for commit in element['payload']['commits']:
            
                # Наполняем список всеми почтами из коммитов пользователя
                email = commit['author']['email']
                rawlist.append(email)
    f_list = 'Найдены электронные ящики: \n'

    # Удаляем повторы из списка и форматируем новый список

    for i in rawlist:
        if i not in newlist:
            newlist.append(i)
    for element in newlist:
        f_list = f_list + element + '\n'

    return f_list

На награду за идеальный код не претендую, здесь ещё есть над чем поработать. Присылайте найденные ошибки в комментарии, посмотрим, сколько нас! В любом случае, код работает. Остаётся добавить следующие строки:

# Чтобы бот не падал

while True:
    try:
        print('Слушаю сообщения...')
        bot.infinity_polling(True)

    except Exception as e:
        print('Я упал')
        time.sleep(15)

Наш бот для поиска почты готов, можно запускать и пользоваться. Пробная версия доступна по адресу @GitSorcerBot
Если пользователь публиковал коммиты и оставлял свою почту, бот выведет результат:

Источник: https://habr.com/ru/post/538404/


Интересные статьи

Интересные статьи

Существует множество публикаций о разработке чат-ботов с использованием возможностей платформы Dialogflow. Но для выхода на решение, которое применимо на практике, просто создать бота нед...
Привет, Хабр! Недавно SantrY опубликовал статью Как это устроено: робот Spot от Boston Dynamics. Автор замечает, что устройство весьма успешного алгоритма поддержания равновесия и ...
Работая сценаристом игр, вы будете писать сценарии, диалоги, внутриигровой текст и, возможно даже, трейлер. Будет место за столом во время препродакшна, и много коммуникаций с геймдизайнерами...
Алгоритм Левенберга-Марквардта прост. Алгоритм Левенберга-Марквардта эффективен. А еще о нем говорят, что он где-то посередине между градиентным спуском и методом Ньютона, что бы это ни значил...
Команда инженеров из MIT разработала объектно-ориентированную иерархию памяти для более эффективной работы с данными. В статье разбираемся с тем, как она устроена.