Come usare l'accesso alla rete
L'accesso a Internet è un caso d'uso comune per plugin, cBot e indicatori. In precedenza, gli algoritmi dovevano richiedere permessi speciali per eseguire qualsiasi operazione relativa alla rete, il che poteva sollevare alcune preoccupazioni da parte degli utenti, soprattutto se questi algoritmi venivano distribuiti senza alcun codice sorgente. Fortunatamente, cTrader ora consente a tutti gli algoritmi di accedere alle risorse web senza avere diritti di accesso elevati.
In questo articolo e nel video corrispondente dimostreremo come recuperare notizie da un'API gratuita che utilizza JSON per la serializzazione e la deserializzazione.
Utilizzare un endpoint API
Nel nostro esempio, useremo il nostro cBot per leggere informazioni sulle notizie da una fonte esterna e stamparle nel log. A questo scopo, useremo un'API gratuita offerta da NewsData.
Per vedere come appare l'API in un browser, possiamo semplicemente accedere a questo link.
https://newsdata.io/api/1/news?apikey=pub_32606381862bbdf07962c72ae7bc6135d6332&&language=en
Come possiamo vedere, l'endpoint fornisce una sequenza di coppie chiave-valore che possiamo facilmente utilizzare tramite un cBot. Inizieremo aggiungendo i namespace contenenti diverse classi e metodi per deserializzare e leggere dati in formato JSON.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Possiamo quindi dichiarare un semplice HttpClient() che accederà a Internet.
1 | |
Successivamente, saremo in grado di leggere i dati nel metodo OnStart().
1 2 3 4 | |
La richiesta restituirà una risposta grezza in formato JSON. Possiamo vedere come appare usando un MessageBox.
1 2 3 | |
Deserializzare i dati JSON
Per deserializzare i nostri dati JSON, useremo la classe JsonSerialiser. Tuttavia, prima di poterlo fare, dovremo definire le classi necessarie per la deserializzazione.
NewsItem- questa classe rappresenta un singolo articolo di notizie.News- questa classe contiene una raccolta di oggettiNewsItem.
1 2 3 4 5 6 7 8 9 | |
Se vuoi evitare di scrivere questo codice standard, puoi anche usare un convertitore online da JSON a C#.
Usando il convertitore, abbiamo definito le nostre classi come segue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Ora possiamo scrivere il nostro codice di deserializzazione.
1 | |
Inoltre, possiamo aggiungere il seguente codice per stampare i titoli delle notizie nel log.
1 2 3 4 5 6 7 | |
Se compiliamo ed eseguiamo il nostro cBot, vedremo apparire un'eccezione nel log. Tuttavia, se modifichiamo i diritti di accesso del cBot in AccessRights.FullAccess, vedremo che il nostro cBot funziona come previsto.
Accedere a Internet senza diritti di accesso elevati
Per evitare una situazione in cui il nostro cBot debba richiedere diritti di accesso elevati, possiamo modificare il nostro metodo OnStart() come segue.
1 2 3 4 | |
Se impostiamo i diritti di accesso su AccessRights.None e ricompiliamo il nostro cBot, dovremmo vedere i titoli delle notizie stampati nel log senza alcun problema. Con un po' più di impegno, il nostro cBot può essere trasformato in un elegante lettore di notizie disponibile direttamente all'interno di qualsiasi grafico cTrader!