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, используя базовую аутентификацию входа в систему, включая логику? Пример кода будет полезным.
ОБНОВЛЕНИЕ: я добавил этот код, но не могу заставить его работать вне Почтальона
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 ответ
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 )