Как найти 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
Если пользователь публиковал коммиты и оставлял свою почту, бот выведет результат:

Let’s block ads! (Why?)

Read More

Recent Posts

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

2 дня ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

2 дня ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

3 дня ago

Нейросети будут писать тексты объявления за продавцов на Авито

У частных продавцов на Авито появилась возможность составлять текст объявлений с помощью нейросети. Новый функционал доступен в категории «Обувь, одежда,…

3 дня ago

Объявлены победители международной премии Workspace Digital Awards-2024

24 апреля 2024 года в Москве состоялась церемония вручения наград международного конкурса Workspace Digital Awards. В этом году участниками стали…

3 дня ago

Яндекс проведет гик-фестиваль Young Con

27 июня Яндекс проведет гик-фестиваль Young Con для студентов и молодых специалистов, которые интересуются технологиями и хотят работать в IT.…

4 дня ago