Как получить GitHub Webhooks в Python
Github предлагает отправить после получения крючки к URL по вашему выбору, когда есть активность в вашем РЕПО. Я хочу написать маленький Python command-line / background (т. е. нет GUI или webapp) приложение работает на моем компьютере (позже на NAS), который постоянно слышит для этих входящих почтовых запросов, и как только сообщение получил из Github он обрабатывает информацию JSON, содержащуюся внутри. Обработка json, как только я это не является проблемой. Сообщение может исходить из небольшого количества IP-адресов, заданных github; я планирую / надеюсь указать порт на своем компьютере, куда он должен быть отправлен.
проблема в том, что я недостаточно знаю о веб-технологиях, чтобы иметь дело с огромным количеством опций, которые вы найдете при поиске.. использую ли я Django, запросы, розетки,колбу, микрофраме...? Я не знаю, что означает большинство терминов, и большинство звучит так, как будто они предлагают слишком много/слишком велики, чтобы решить мою проблему - я просто потрясен и не знаю, с чего начать.
большинство учебников о POST / GET, которые я мог найти, похоже, связаны с отправкой или прямым запросом данных с веб-сайта, но не с постоянным прослушиванием.
Я чувствую, что проблема не очень сложная, и будет сводиться к паре строк, как только я знаю, куда идти/как это сделать. Может ли кто-нибудь предложить указатели/учебники/примеры/Пример кода?
4 ответов
вот основные web.py пример получения данных через POST и что-то с ним делать (в этом случае просто распечатайте его в stdout):
import web
urls = ('/.*', 'hooks')
app = web.application(urls, globals())
class hooks:
def POST(self):
data = web.data()
print
print 'DATA RECEIVED:'
print data
print
return 'OK'
if __name__ == '__main__':
app.run()
Я опубликовал некоторые данные, используя бросок.это (после пересылки 8080 на моем маршрутизаторе) и увидел следующий вывод:
$ python hooks.py
http://0.0.0.0:8080/
DATA RECEIVED:
test=thisisatest&test2=25
50.19.170.198:33407 - - [27/Jan/2013 10:18:37] "HTTP/1.1 POST /hooks" - 200 OK
вы должны иметь возможность поменять местами операторы печати для обработки JSON.
чтобы указать номер порта, вызовите скрипт с дополнительным аргументом:
$ python hooks.py 1234
во-первых, веб-это запрос-ответ на основе. Поэтому что-то запросит вашу ссылку, и вы ответите соответствующим образом. Ваше серверное приложение будет постоянно прослушивать порт; вам не нужно беспокоиться об этом.
вот аналогичная версия в Flask
(мои микро рамки выбора):
from flask import Flask, request
import json
app = Flask(__name__)
@app.route('/',methods=['POST'])
def foo():
data = json.loads(request.data)
print "New commit by: {}".format(data['commits'][0]['author']['name'])
return "OK"
if __name__ == '__main__':
app.run()
вот пример запуска, используя пример из github:
запуск сервера (этот код сохраняется в sample.py
):
burhan@lenux:~$ python sample.py
* Running on http://127.0.0.1:5000/
вот запрос на сервер, в основном, что будет делать github:
burhan@lenux:~$ http POST http://127.0.0.1:5000 < sample.json
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
Date: Sun, 27 Jan 2013 19:07:56 GMT
Server: Werkzeug/0.8.3 Python/2.7.3
OK # <-- this is the response the client gets
вот вывод на сервере:
New commit by: Chris Wanstrath
127.0.0.1 - - [27/Jan/2013 22:07:56] "POST / HTTP/1.1" 200 -
Я хотел бы использовать:
https://github.com/carlos-jenkins/python-github-webhooks
вы можете настроить веб-сервер для его использования, или если вам просто нужен процесс, работающий там без веб-сервера, вы можете запустить интегрированный сервер:
python webhooks.py
Это позволит вам сделать все, что вы сказали, что вам нужно. Это, тем не менее, требует немного настройки в вашем репозитории и в ваших крючках.
поздно на вечеринку и бесстыдно автопроконцерна, к сожалению.
Я думаю, что этот проект ГИТ-веб-перехватчик (вы можете найти его в github) будет perfact.
это платформа git webhook с хорошим веб-интерфейсом на основе Flask + SQLAchemy + Celery + Redis + React, используемая в автоматическом развертывании / эксплуатации / обслуживании быстро. GitHub / GitLab / Gogs / GitOsc все поддерживаются.
как его использовать ? Это простое веб-приложение Flask, поэтому разверните его как простую колбу с gunicorn + nginx. Также поддерживается docker. Этот индексная страница, как показано ниже:
(Я не могу опубликовать img)
кроме того, вы можете увидеть демо-сайт здесь . Используйте учетную запись github для входа.