[Python, API, GitHub, Учебный процесс в IT] Как найти email пользователя GitHub и написать Telegram бота для решения этой задачи?
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Этот пост будет полезен двум категориям людей: 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
Если пользователь публиковал коммиты и оставлял свою почту, бот выведет результат:
===========
Источник:
habr.com
===========
Похожие новости:
- [Обработка изображений, Facebook API, Машинное обучение, Искусственный интеллект, Социальные сети и сообщества] Facebook улучшил описания фотографий с помощью ИИ для слабовидящих
- [Open source, GitHub, Копирайт] GitHub удалил репозиторий торрент-трекера NYAA.si
- [JavaScript, Node.JS, API] Создание самодокументирующегося сервера на Node.JS
- [Python, Алгоритмы, Математика, Машинное обучение, Искусственный интеллект] Doing «Data Science» even if you have never heard the words before
- [Python, Алгоритмы, Математика, Машинное обучение, Искусственный интеллект] Вот вообще этим не занимался, и тут раз, и Data Science
- [API, Видеоконференцсвязь] Top 10 Best Voice Chat APIs for Mobile & Web Apps
- [Python, Машинное обучение, Видеокарты, TensorFlow] Есть ли жизнь без Nvidia? Запускаем TensorFlow на Radeon RX 580
- [Python, Машинное обучение, Искусственный интеллект] ML в реальном мире: Складская система распознавания деталей
- [Python, Django] Настройка аутентификации JWT в новом проекте Django
- [Разработка веб-сайтов, Программирование, Учебный процесс в IT, Карьера в IT-индустрии] What is one of the most common mistakes beginner developers make
Теги для поиска: #_python, #_api, #_github, #_uchebnyj_protsess_v_it (Учебный процесс в IT), #_telegram, #_telegram_api, #_github, #_github_api, #_python, #_python3, #_python, #_api, #_github, #_uchebnyj_protsess_v_it (
Учебный процесс в IT
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:21
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Этот пост будет полезен двум категориям людей: 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 автора коммита 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) Если пользователь публиковал коммиты и оставлял свою почту, бот выведет результат: =========== Источник: habr.com =========== Похожие новости:
Учебный процесс в IT ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 10:21
Часовой пояс: UTC + 5