API GET или триггер Zapier для действия POST

Что я, по сути, пытаюсь сделать, это создать счет в Harvest, когда карта помещается в список в Trello. Я пробовал Zapier, но в него не встроена функциональность счета.

Мне нужно будет развивать это самостоятельно. Trello имеет действие Javascript или Python, поэтому я ограничен этими двумя языками.

ZAPIER: Trello Trigger > Javascript or Python code

У меня есть запрос JSON, который мне нужно отправить

https://[site].harvestapp.com/invoices
Authorization: Basic amNtMjU4MkBnbWFpbC5jb206YTEwMDUw**NB
Content-Type: application/javascript
Accept: application/json

{
"invoice": {
"due_at_human_format": "NET 10",
"client_id": 3849315,
"currency" : "United States Dollar - USD",
"issued_at": "2015-04-22",
"subject": "Your invoice subject goes here",
"notes": "Some notes go here",
"number": "303197",
"kind": "project",
"projects_to_invoice": "120353",
"import_hours": "yes",
"import_expense": "yes",
"period_start": "2015-03-01",
"period_end": "2016-03-31",
"expense_period_start": "2015-03-31",
"expense_period_end": "2016-03-31"
}
}

Как я могу опубликовать это в Python или JavaScript с использованием базовой аутентификации входа, включая логику? Был бы полезен пример кода.

ОБНОВЛЕНИЕ:
Я добавил этот код, но не могу заставить его работать вне Postman

var data = JSON.stringify({
  "invoice": {
    "due_at_human_format": "NET 10",
    "client_id": 3849315,
    "currency": "United States Dollar - USD",
    "issued_at": "2015-04-22",
    "subject": "Your invoice subject goes here",
    "notes": "Some notes go here",
    "number": "303197",
    "kind": "project",
    "projects_to_invoice": "120353",
    "import_hours": "yes",
    "import_expense": "yes",
    "period_start": "2015-03-01",
    "period_end": "2016-03-31",
    "expense_period_start": "2015-03-31",
    "expense_period_end": "2016-03-31"
  }
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://[url].harvestapp.com/invoices");
xhr.setRequestHeader("authorization", "Basic amNtMjU4MkBnbWFpbC***TEwMDUwMTNB");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("accept", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("postman-token", "2c652344-1be5-8969-adf3-a7ca9ee7179f");

xhr.send(data);

1 ответ

  1. Trello имеет полноценный REST API, поэтому вы не ограничены только Python или JavaScript, если это не ограничение, установленное Zap, который вы используете-что возможно, поскольку Zapier построен в основном на Django.

    С этим, как говорится, очень легко просто запустить запрос POST на любом языке. Вот пример JavaScript для вас, хотя вам придется адаптировать это для удовлетворения ваших конкретных потребностей.

    var request = new XMLHttpRequest();
    var url = 'https://[site].harvestapp.com/invoices'; // or whatever your url actually is
    var headers = {
        Authorization: 'amNtMjU4MkBnbWFpbC5jb206YTEwMDUw**NB',
        Content-Type: 'application/javascript',
        Accept: 'application/json'
    };
    var params = { // your JSON encoded data };
    
    request.open( 'POST', url, true );
    request.setRequestHeader( headers );
    request.send( params );
    

    В Python это выглядело бы примерно так:

    import requests
    url = 'https://[site].harvestapp.com/invoices'
    request.headers = {
        'Authorization': 'amNtMjU4MkBnbWFpbC5jb206YTEwMDUw**NB',
        'Content-Type': 'application/javascript',
        'Accept': 'application/json'
    }
    data = {} # put your data there instead of an empty dictionary
    request.post( url, data )