Como usar o acesso à rede
O acesso à internet é um caso de uso comum para plugins, cBots e indicadores. Anteriormente, os algos tinham de solicitar permissões especiais para realizar quaisquer operações relacionadas com a rede, o que poderia levantar algumas preocupações por parte dos utilizadores, especialmente se estes algos fossem distribuídos sem qualquer código-fonte. Felizmente, o cTrader agora permite que todos os algos acedam a recursos web sem terem direitos de acesso elevados.
Neste artigo e no vídeo correspondente, demonstraremos como obter notícias de uma API gratuita que usa JSON para serialização e desserialização.
Consumir um endpoint de API
No nosso exemplo, usaremos o nosso cBot para ler informações de notícias de uma fonte externa e imprimi-las no registo. Para este fim, usaremos uma API gratuita oferecida pela NewsData.
Para ver como a API se apresenta num navegador, podemos simplesmente aceder a este link.
https://newsdata.io/api/1/news?apikey=pub_32606381862bbdf07962c72ae7bc6135d6332&&language=en
Como podemos ver, o endpoint fornece uma sequência de pares chave-valor que podemos facilmente consumir usando um cBot. Começaremos por adicionar os namespaces que contêm várias classes e métodos para desserializar e ler dados formatados em JSON.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Podemos então declarar um simples HttpClient() que acederá à Internet.
1 | |
Depois, poderemos ler dados no método OnStart().
1 2 3 4 | |
O pedido retornará uma resposta bruta em formato JSON. Podemos ver como se apresenta usando uma MessageBox.
1 2 3 | |
Desserializar dados JSON
Para desserializar os nossos dados JSON, usaremos a classe JsonSerialiser. No entanto, antes de podermos fazer isso, teremos de definir as classes necessárias para a desserialização.
NewsItem- esta classe representa um único artigo de notícias.News- esta classe contém uma coleção de objetosNewsItem.
1 2 3 4 5 6 7 8 9 | |
Se quiser evitar escrever este código padrão, também pode usar um conversor online de JSON para C#.
Usando o conversor, definimos as nossas classes da seguinte forma:
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 | |
Agora podemos escrever o nosso código de desserialização.
1 | |
Além disso, podemos adicionar o seguinte código para imprimir os títulos das notícias no registo.
1 2 3 4 5 6 7 | |
Se construirmos e executarmos o nosso cBot, veremos que aparece uma exceção no registo. No entanto, se alterarmos os direitos de acesso do cBot para AccessRights.FullAccess, veremos que o nosso cBot funciona como pretendido.
Aceder à internet sem direitos de acesso elevados
Para evitar ter uma situação em que o nosso cBot precisa de solicitar direitos de acesso elevados, podemos modificar o nosso método OnStart() para o seguinte.
1 2 3 4 | |
Se definirmos os direitos de acesso para AccessRights.None e reconstruirmos o nosso cBot, deveremos ver os títulos das notícias a serem impressos no registo sem quaisquer problemas. Com um pouco mais de esforço, o nosso cBot pode ser transformado num leitor de notícias sofisticado disponível diretamente em qualquer gráfico do cTrader!