PDA

View Full Version : [C#] Convertire una chiamata curl da JavaScript in C#


qwerty_race
12-03-2022, 20:27
Salve,
potreste darmi una mano a convertire il codice JavaScript della chiamata POST che si trova nella funzione:

async function ryte({ useCaseId, inputContexts })

https://github.com/rytr-me/documentation/blob/main/samples/node/index.js

In un codice C#, non riesco a trovare il modo giusto, non conosco molto JavaScript, io ho provato così:


private void GetRytrContent(string _langID, string _toneID, string _usecaseID)
{
string api_key = "<MY-API-KEY>";

WebRequest wr = WebRequest.Create("https://api.rytr.me/v1/ryte");
wr.ContentType = "application/json";
wr.Method = "POST";
wr.Headers.Add("Authentication", "Bearer " + api_key);

using (StreamWriter sw = new StreamWriter(wr.GetRequestStream()))
{
string data = "{" +

"\"languageId\":\"" + _langID + "\"," +
"\"toneId\":\"" + _toneID + "\"," +
"\"useCaseId\":\"" + _usecaseID + "\"," +

"\"inputContexts\":\"{\"<USE-CASE CONTEXT-INPUT KEY-LABEL>\":\"<VALUE>\"}," +

"\"variations\":\"1\"," +

"\"userId\":\"<UNIQUE USER ID>\"," +

"\"format\":\"html\"," +
"\"creativityLevel\":\"default\"," +

"}";

sw.Write(data);
}

WebResponse httpResponse = (WebResponse)wr.GetResponse(); //System.Net.WebException: 'Errore del server remoto: (400) Richiesta non valida.'

using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();

TxtDisplay.Text = result.ToString();
}
}


ma mi da questo errore su WebResponse :

//System.Net.WebException: 'Errore del server remoto: (400) Richiesta non valida.'

Questa è la curl della richiesta:


curl \
-H "Authentication: Bearer <API KEY>" \
-H "Content-Type: application/json" \
-d '{"languageId": "<LANUGAGE ID>", "toneId": "<TONE ID>", "useCaseId": "<USE-CASE ID>", "inputContexts": {"<USE-CASE CONTEXT-INPUT KEY-LABEL>": "<VALUE>"}, "variations": 1, "userId": "<UNIQUE USER ID>", "format": "html", "creativityLevel": "default"}' \
-X POST https://api.rytr.me/v1/ryte

lorenzo001
13-03-2022, 08:26
La stringa dell'autentivazjone sembra sbagliata.
Hai ottenuto un ID di autenticazione o no?
Quello che passi è una stringa che non ha senso

qwerty_race
13-03-2022, 10:11
La stringa dell'autentivazjone sembra sbagliata.
Hai ottenuto un ID di autenticazione o no?
Quello che passi è una stringa che non ha senso

Ho rivisto un po di cose, ho creato la stringa json con "JsonConvert.SerializeObject", ora mi restituisce questo messaggio:
{"success":false,"message":"Sorry, we were unable to process your request. Please try again."}

Sono dubbioso se sto sbagliando nel creare il campo:
inputContexts = "{'INTEREST_LABEL':'Ti propongo un nuovo business eccezionale'}",

oppure altro..., nella documentazione non è spiegato come formattarlo e con quali dati, sono risalito un po tramite l'esempio JavaScript, ma possibile che sbaglio, questo è quello che chiede:

"inputContexts": {"<USE-CASE CONTEXT-INPUT KEY-LABEL>": "<VALUE>"}

Ma cosa è: <USE-CASE CONTEXT-INPUT KEY-LABEL> ???
Presumo che: <VALUE> sua la frase dal cui estrapola le keywords per poi creare il post, quindi io ho inserito questo come testo: "Ti propongo un nuovo business eccezionale!"


[code]
public class RytrData
{
public string languageId { get; set; }
public string toneId { get; set; }
public string useCaseId { get; set; }
public string inputContexts { get; set; }
public string variations { get; set; }
public string userId { get; set; }
public string format { get; set; }
public string creativityLevel { get; set; }
}

private void GetRytrContent(string _apyKey, string _langID, string _toneID, string _usecaseID)
{
WebRequest wr = WebRequest.Create("https://api.rytr.me/v1/ryte");
wr.ContentType = "application/json";
wr.Method = "POST";
wr.Headers.Add("Authentication", "Bearer " + _apyKey);

RytrData RytrData = new RytrData
{
languageId = _langID,
toneId = _toneID,
useCaseId = _usecaseID,
inputContexts = "{'INTEREST_LABEL':'Ti propongo un nuovo business eccezionale!'}",
variations = "1",
userId = "USER1",
format = "text",
creativityLevel = "default"
};
var json = JsonConvert.SerializeObject(RytrData, Formatting.Indented);


using (StreamWriter sw = new StreamWriter(wr.GetRequestStream()))
{
string data = json.ToString();

sw.Write(data);
}

WebResponse httpResponse = (WebResponse)wr.GetResponse();

using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();

TxtDisplay.Text = result.ToString(); //{"success":false,"message":"Sorry, we were unable to process your request. Please try again."}
}
}
[code]

lorenzo001
13-03-2022, 12:39
A chi stai rispondendo? Hai letto la mia domanda?

qwerty_race
15-03-2022, 09:06
A chi stai rispondendo? Hai letto la mia domanda?

Io si ma tu non hai letto la mia risposta?

1) La stringa non ha senso perchè l'ho fatta a mano?
Ok, per questo ho detto che l'ho ri-fatta con: "JsonConvert.SerializeObject", in modo che il formato non ha errori.

2) ID di autenticazione cosa è?
Vuoi dire l'API_KEY? Si quella ce l'ho.

Inoltre tutte le richieste di tipo GET per recuperare:
<LANUGAGE ID>, <TONE ID>, <USE-CASE ID>
funzionano perfettamente, ho già tutti gli array rispettivi, questo significa che mi connetto correttamente e quindi comunico con le API di Rytr.

Il problema è la richiesta POS per eseguire la creazione del copy da parte di Rytr.

Il resto del mio ultimo post è questo...:

Sono dubbioso se sto sbagliando nel creare il campo:
inputContexts = "{'INTEREST_LABEL':'Ti propongo un nuovo business eccezionale'}",

oppure altro..., nella documentazione non è spiegato come formattarlo e con quali dati, sono risalito un po tramite l'esempio JavaScript, ma possibile che sbaglio, questo è quello che chiede:

"inputContexts": {"<USE-CASE CONTEXT-INPUT KEY-LABEL>": "<VALUE>"}

Ma cosa è: <USE-CASE CONTEXT-INPUT KEY-LABEL> ???
Presumo che: <VALUE> sua la frase dal cui estrapola le keywords per poi creare il post, quindi io ho inserito questo come testo: "Ti propongo un nuovo business eccezionale!"


Quindi devo risolvere questi dubbi, ma non so come fare, non trovo documentazione ulteriore a quella di GitHub che è al quanto minimale:
https://github.com/rytr-me/documentation

Non trovo neppure esempi online di altri.

wingman87
15-03-2022, 13:13
Hai provato a chiamare i metodi "Use-case list" e "Use-case detail"?
Magari ti restituiscono i valori da sostituire nella chiamata che stai costruendo.