[PYTHON] J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet

Créez un problème dans n'importe quel référentiel sur Github et enregistrez-le dans la colonne de n'importe quel projet

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.

Version Python

# -*- 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)

Aller version

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

Comment utiliser

./ (script ou binaire) issue_title Un problème avec issue_title doit avoir été créé et enregistré dans n'importe quel projet.

Recommended Posts

J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux créer un histogramme et superposer la courbe de distribution normale dessus. édition matplotlib
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
J'ai fait un modèle de classification d'images et essayé de le déplacer sur mobile
J'ai fait un script pour mettre un extrait dans README.md
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
J'ai converti le temps en un entier, je l'ai décomposé en facteurs premiers et j'ai fait un bot pour tweeter le résultat (matériel xkcd)
Déguisez l'herbe sur GitHub et essayez de devenir ingénieur.
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"
J'ai fait une commande pour afficher un calendrier coloré dans le terminal
J'ai fait un script pour afficher des pictogrammes
J'ai fait une minuterie de cuisine à afficher sur la barre d'état!
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai essayé de créer un système pour acquérir automatiquement le guide des programmes → l'enregistrer dans le calendrier en un jour
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Script pour utiliser correctement plusieurs comptes github dans le même référentiel sur la même machine
Je veux créer une fenêtre avec Python
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Comment enregistrer les informations de point caractéristique de l'image dans un fichier et l'utiliser pour la mise en correspondance
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
Définir la valeur de division dans Django et la refléter facilement à l'écran
Je souhaite convertir du texte horizontal en texte vertical et le publier sur Twitter, etc.
J'ai créé un programme pour rechercher des mots sur la fenêtre (développement précédent)
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Créez un filtre pour obtenir un jeton d'accès avec l'API Graph (Flask)
J'ai créé un package pour créer un fichier exécutable à partir du code source Hy
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
J'ai essayé de créer un projet en utilisant Python sur Docker avec PyCharm, mais cela a fonctionné avec Docker Compose
Script Python qui explore le flux RSS du statut Azure et le publie sur Hipchat
C'était une vie que je voulais faire de l'OCR sur AWS Lambda pour localiser les personnages.
Je veux remplacer les variables dans le fichier de modèle python et le produire en masse dans un autre fichier
sphinx-quickstart est devenu un problème et j'ai essayé de créer une commande alternative et le stress a disparu
J'ai fait une commande pour marquer le clip de la table
Il est difficile d'installer un écran vert, je n'ai donc découpé que le visage et l'ai superposé sur l'image de fond
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
"Arrêtez de soumettre des fichiers japonais à git sur Mac> <" Pour le moment, j'ai écrit un script pour rechercher des fichiers japonais incompatibles sur Mac et Linux.
J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
POSTEZ l'image sélectionnée sur le site Web avec multipart / form-data et enregistrez-la sur Amazon S3! !!
Créez un script pour votre compétence Pepper dans une feuille de calcul et chargez SayText directement à partir du script
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Procédure pour créer un Job qui extrait une image Docker et la teste avec des actions Github
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Je souhaite copier un article en anglais à partir d'un pdf et le mettre dans Google Traduction
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE