Convertire una chiamata curl da JavaScript in C#

di il
6 risposte

Convertire una chiamata curl da JavaScript in C#

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

6 Risposte

  • Re: Convertire una chiamata curl da JavaScript in C#

    L'unica cosa che ti posso suggerire è di verificare la validità del pacchetto JSON dei dati che stai inviando (tipo JSON.NET), e magari generandolo usando librerie invece che concatenandolo come stringa.

    Ciao!
  • Re: Convertire una chiamata curl da JavaScript in C#

    Alka ha scritto:


    L'unica cosa che ti posso suggerire è di verificare la validità del pacchetto JSON dei dati che stai inviando (tipo JSON.NET), e magari generandolo usando librerie invece che concatenandolo come stringa.

    Ciao!
    Fatto!

    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!"
        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."}
                }
            }
  • Re: Convertire una chiamata curl da JavaScript in C#

    Ciao

    Ho dato un'occhiata al link che hai girato.
    Credo che la chiamata JSON debba rispettare quanto avviene dal sito rytr.

    In pratica creano contenuti dinamici sulla base di "use case" (es: email, blog, nomi di brand, ...) e, a seconda dello use case, anche di parole chiave.

    Pertanto credo che chiave/valore del contenuto cambino al variare dello use case.
    Ad esempio, quando scegli lo use case "email", il sito ti propone di inserire dei "key points" (se vuoi, argomenti chiave).

    Se però scegli "interview question", ecco che ti chiede due campi: "interviewee bio" e "Interview context"

    Suppongo ti convenga cercare della documentazione relativa alle api di rytr, quindi poi fare le chiamate POST sulla base di quella documentazione
  • Re: Convertire una chiamata curl da JavaScript in C#

    PiGi78 ha scritto:


    Suppongo ti convenga cercare della documentazione relativa alle api di rytr, quindi poi fare le chiamate POST sulla base di quella documentazione
    Purtroppo la documentazione è solo questa:

    https://github.com/rytr-me/documentatio

    Online non ho trovato nulla, neppure un esempio di script fatto da altri
  • Re: Convertire una chiamata curl da JavaScript in C#

    Hai per caso un progetto web che già funziona?

    Se si, potresti provare a guardare quali chiamate fa la libreria.
    Ti basta abilitare gli strumenti di sviluppo (di solito F12) e in network vedere le chiamate che vengono fatte.

    Dopo che ne hai viste un paio dovresti aver più chiaro quale struttura debba avere il messaggio... Sempre che non usi HTTPS che allora credo il messaggio non si possa vedere

    Purtroppo, senza sapere la struttura esatta del messaggio, fatico a darti una risposta utile
  • Re: Convertire una chiamata curl da JavaScript in C#

    PiGi78 ha scritto:


    Hai per caso un progetto web che già funziona?

    Se si, potresti provare a guardare quali chiamate fa la libreria.
    Ti basta abilitare gli strumenti di sviluppo (di solito F12) e in network vedere le chiamate che vengono fatte.

    Dopo che ne hai viste un paio dovresti aver più chiaro quale struttura debba avere il messaggio... Sempre che non usi HTTPS che allora credo il messaggio non si possa vedere

    Purtroppo, senza sapere la struttura esatta del messaggio, fatico a darti una risposta utile
    Non ho un progetto web ma ho l'account attivo nel loro sito, posso provare a tracciare tutte le richieste e vedere come gestisce le variabili che invia, come mi hai consigliato tu.

    Ti ringrazio ugualmente, è una giusta idea quella, se ce al faccio ti aggiorno su come ci sono riuscito.
Devi accedere o registrarti per scrivere nel forum
6 risposte