Travaillez ci-dessous
Tout d'abord, obtenez votre jeton Github
Obtenez les informations nécessaires avec curl Il semble que l'API doive ajouter un en-tête étrange comme une période d'essai Tout d'abord, vous avez besoin de l'id du projet et de l'id des colonnes créées par le projet, alors enregistrez-le pour l'obtenir.
curl -H "Accept: application/vnd.github.inertia-preview+json" -u "username:token" https://api.github.com/repos/Nom de l'équipe/Nom du référentiel/projects
curl -H "Accept: application/vnd.github.inertia-preview+json" -u "username:token" https://api.github.com/repos/Nom de l'équipe/Nom du référentiel/projects/(L'identifiant du projet obtenu ci-dessus)/columns
Notez l'id obtenu ici car il sera utilisé dans le script suivant. Il est également plus facile d'obtenir une autorisation: jeton de base avec WireShark ou quelque chose. (Je devrais encoder le nom d'utilisateur: token en base64, mais je suis devenu mauvais parce que j'ai eu une communication)
Tout ce que vous avez à faire est d'attribuer les valeurs requises au script suivant.
# -*- 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": "Nom d'utilisateur de la version base64 de base: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)
Je ne voulais pas mettre de jeton en texte brut dans le script, alors je l'ai recréé avec Go afin qu'il puisse être binarisé et exploité. (Je ne dis pas que c'est sûr) La gestion des erreurs est texto, alors faites-le bien
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", "Nom d'utilisateur de la version base64 de base: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)
}
./ (script ou binaire) issue_title Un problème avec issue_title doit avoir été créé et enregistré dans n'importe quel projet.
Recommended Posts