Arbeiten Sie unten
Holen Sie sich zuerst Ihren Github-Token
Holen Sie sich die notwendigen Informationen mit Curl Es scheint, dass API einen seltsamen Header wie eine Testphase hinzufügen muss Zunächst benötigen Sie die ID des Projekts und die ID der vom Projekt erstellten Spalten. Speichern Sie sie, um sie abzurufen.
curl -H "Accept: application/vnd.github.inertia-preview+json" -u "username:token" https://api.github.com/repos/Teamname/Repository-Name/projects
curl -H "Accept: application/vnd.github.inertia-preview+json" -u "username:token" https://api.github.com/repos/Teamname/Repository-Name/projects/(Die ID des oben erhaltenen Projekts)/columns
Notieren Sie sich die hier erhaltene ID, da sie im folgenden Skript verwendet wird. Außerdem ist es einfacher, das Authorization: Basic-Token mit Wireshark oder Ähnlichem zu erhalten. (Ich sollte den Benutzernamen: Token in base64 verschlüsseln, aber ich wurde schlecht, weil ich eine Kommunikation bekam.)
Sie müssen lediglich die erforderlichen Werte dem folgenden Skript zuweisen.
# -*- coding: utf-8 -*-
import requests
import json
import sys
response = {}
ownr = ''
repo = ''
column_id = ''
issue_url = "https://api.github.com/repos/" + ownr + "/" + repo + "/issues"
project_url = "https://api.github.com/repos/" + ownr + "/" + repo + "/projects/columns/" + column_id + "/cards"
headers = {
"Authorization": "Benutzername der Basisversion 64:token",
"Accept": "application/vnd.github.inertia-preview+json",
"Content-Type": "application/json",
}
argvs = sys.argv
"""---------------Create Issue---------------------"""
params = {"title": argvs[1]}
res = requests.post(issue_url, data=json.dumps(params), headers=headers)
"""---------Register created issue to Project------"""
params = {"content_id": int(res.json()['id']), "content_type": "Issue"}
res = requests.post(project_url, data=json.dumps(params), headers=headers)
print(res.status_code)
Ich wollte kein Token im Skript in einfachen Text einfügen, deshalb habe ich es mit Go neu erstellt, damit es binärisiert und betrieben werden kann. (Ich sage nicht, dass es sicher ist) Die Fehlerbehandlung ist texto, also machen Sie es bitte gut
package main
import (
"bytes"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"net/http"
"strconv"
"time"
)
func HttpPost(url, param string) (interface{}, error) {
req, err := http.NewRequest(
"POST",
url,
bytes.NewBuffer([]byte(param)),
)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Benutzername der Basisversion 64:token")
req.Header.Set("Accept", "application/vnd.github.inertia-preview+json")
client := &http.Client{Timeout: time.Duration(10 * time.Second)}
resp, err := client.Do(req)
defer resp.Body.Close()
if err != nil {
return nil, err
}
var response interface{}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(body, &response)
return response, err
}
func main() {
flag.Parse()
if len(flag.Args()) < 1 {
fmt.Println("no issue title")
return
}
issue_title := flag.Args()[0]
ownr := ""
repo := ""
column_id := ""
issue_url := "https://api.github.com/repos/" + ownr + "/" + repo + "/issues"
project_url := "https://api.github.com/repos/" + ownr + "/" + repo + "/projects/columns/" + column_id + "/cards"
params := `{"title": "` + issue_title + `"}`
res, err := HttpPost(issue_url, params)
if err != nil {
fmt.Println(err)
}
id := res.(map[string]interface{})["id"].(float64)
params = `{"content_id": ` + strconv.Itoa(int(id)) + `, "content_type": "Issue"}`
res, err = HttpPost(project_url, params)
if err != nil {
fmt.Println(err)
}
fmt.Println(200)
}
./ (Skript oder Binär) issue_title Ein Problem mit issue_title sollte in jedem Projekt erstellt und registriert worden sein.
Recommended Posts