Wie erhalte ich Github Webhooks in Python?



Answers

Das erste ist, Web ist Anfrage-Antwort basiert. So etwas wird Ihren Link anfordern, und Sie werden entsprechend reagieren. Ihre Server-Anwendung hört ständig auf einem Port zu; um die du dir keine Sorgen machen musst.

Hier ist die ähnliche Version in Flask (mein Mikro Framework der Wahl):

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()

Hier ist ein Beispiellauf, der das Beispiel von github verwendet :

Ausführen des Servers (der obige Code wird in sample.py ):

burhan@lenux:~$ python sample.py 
 * Running on http://127.0.0.1:5000/

Hier ist eine Anfrage an den Server, im Grunde, was Github tun wird:

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

Hier ist die Ausgabe auf dem Server:

New commit by: Chris Wanstrath
127.0.0.1 - - [27/Jan/2013 22:07:56] "POST / HTTP/1.1" 200 -
Question

Github bietet an, Post-receive-Hooks an eine URL Ihrer Wahl zu senden, wenn es Aktivitäten in Ihrem Repo gibt. Ich möchte eine kleine Python-Befehlszeilen- / Hintergrund-Anwendung (dh keine GUI oder Webapp) auf meinem Computer (später auf einem NAS) schreiben, die kontinuierlich auf diese eingehenden POST-Anfragen wartet und sobald ein POST von Github empfangen wird verarbeitet die darin enthaltenen JSON-Informationen. Die Verarbeitung des JSons, sobald ich es habe, ist kein Problem. Der POST kann aus einer kleinen Anzahl von IPs kommen, die von github vergeben werden; Ich plane / hoffe, einen Port auf meinem Computer anzugeben, wo es gesendet werden soll.

Das Problem ist, ich weiß nicht genug über Web-Technologien, um mit der großen Anzahl von Optionen zu tun, die Sie bei der Suche finden .. verwende ich Django, Anfragen, Sockets, Flask, microframeworks ...? Ich weiß nicht, was die meisten Begriffe bedeuten, und die meisten klingen, als ob sie zu viel bieten / zu groß sind, um mein Problem zu lösen - ich bin einfach überwältigt und weiß nicht, wo ich anfangen soll.

Die meisten Tutorials über POST / GET, die ich finden konnte, scheinen sich damit zu befassen, entweder Daten von einer Website zu senden oder direkt anzufordern, aber nicht ständig darauf zu warten.

Ich denke, das Problem ist nicht wirklich schwierig und wird auf ein paar Zeilen reduziert, sobald ich weiß, wo ich hingehen soll / wie es geht. Kann jemand Zeiger / Tutorials / Beispiele / Beispielcode anbieten?




Ich denke, dass dieses Projekt Git-Webhook (Sie können es in GitHub suchen) wird perfekt sein.

Es ist eine git webhook-Plattform mit einem netten Web-UI, das auf Flask + SQLAchemy + Sellerie + Redis + React basiert und schnell in der automatisierten Bereitstellung / Bedienung / Wartung verwendet wird. Github / GitLab / Gogs / GitOsc alle werden unterstützt.

Wie man es benutzt? Es ist eine einfache Flask-Web-Anwendung, also stellen Sie es wie einen einfachen Flask mit gunicorn + nginx bereit. Auch Andockfenster wird unterstützt. Die Indexseite wie folgt:

(Ich kann kein IMG posten)

Außerdem können Sie hier eine Demo-Website sehen . Benutze github account um dich einzuloggen.






Links