Estatísticas de futebol em c# com descanso e JSON

SoccerDashboard - estatísticas de futebol No artigo de hoje como um Obtém uma API REST usando c# e desserializa JSON do ser. Para fazer isso, escrevemos um pequeno programa em c#, que recupera os dados de uma API do serviço Web de estatísticas de futebol. Quem quer começar diretamente, ignorar o seguinte Prolog. Quem procura uma harmoniosa introdução ao tema, lê-lo.

Prolog

Nos últimos dois anos, só apostei uma volta de 180 graus em meu consumo de futebol. Anteriormente vi pelo jogo em si e praticamente tudo sobre o futebol dos jogos da Copa do mundo, foi banidos para olhar para cada jogo em casa da Fortuna na arena Esprit.

E se um tem embalado o futebol febre uma vez, então jogos de aposta nos amigos e colegas e a digressão não mais TV são apostas desportivas de corretas. Mas quando se trata da torneira correta, as opiniões divergem. Por intuição até para os “anos de experiência”, existem diversas abordagens para determinar as dicas. Confio em fatos, números e estatísticas como um cientista da computação, porque então talvez, então simplesmente estava procurando uma API de dados de futebol gratuito, que fornece que os dados apropriados com base de tomada de decisão para mim.

A API em torno de um pequeno aplicativo c# para estar no escopo do presente artigo, que pode mostrar estatísticas sobre as equipes em várias ligas. Quem trabalha através de até o final do artigo, tem uma boa base, as ferramentas certas e as informações necessárias, a fim de avaliação mais como por exemplo, salvou o jogos histórias dos adversários diferentes.

A API de futebol-data.org

Visão geral da API de futebol-data.org Antes, nos unimos com o programa real, algumas palavras para a API. A interface de programação de futebol-data.org é um dos poucos APIs que fornece dados livre em torno de várias ligas e quase o único gratuito API, qual estrutura de dados é realmente atualizada.

As funções de API são relativamente claras e incluem a listagem das ligas disponíveis, detalhes dos clubes das ligas e os jogadores dos clubes. Mais resultados de jogos individuais e todos os resultados dos jogos do clube podem ser em uma temporada para passar.

Embora a API é gratuita e pode ser utilizada sem registro, mas o número de acertos de 50 por dia é limitada nesta variante. É o suficiente para sequer tentar, mas não de trabalhar a sério. É por isso que você deve organizar-se, antes de começar, uma chave de API de programação. Isto também é grátis e registrado em poucos minutos. Mediante a chave API do limite é levantados acessos por dia para 50 solicitações por minuto de 50.

Referências e design

A chave de API está presente, pode ir. Para este artigo vamos abrir o Visual Studio e criar um aplicativo c# Windows Forms. (Eu liguei o aplicativo SoccerDashboard .)

Para facilitar o trabalho com a API REST, fazemos uso da enciclopédia RestSharpbiblioteca. Além a real manipulação de solicitações HTTP, ele também tem uma built-in desserialização JSON.

A biblioteca deve ser instalada por Nuget. O comando para o console do Nuget é:

Instale o pacote RestSharp

A biblioteca está incorporada, alterne para o designer de formulário e adicionar os controles, o que precisamos para a nossa aplicação. Para fazer isso, nós tomamos dois ListView (um para a seleção da temporada, um para as equipes) e um RichTextBox onde mostramos as informações sobre as equipes. Os controles, designei para o nosso exemplo da seguinte forma: listViewSeasons, listViewTeams, richTextBoxInformation.

SoccerDashboard - projeto de layout O arranjo dos controles pode ser encontrado na imagem adjacente. Os controles são adicionados, destacamos os dois ListView e usar as configurações na caixa de diálogo Configurações a seguir:

  • Ativado = false
  • MultiSelect = true
  • Ver lista =

Então nós criamos o manipulador de eventos Form_Load para o formulário e em um DoubleClick EventHandler para o ListView.Isso pode ser feito através de caixa de diálogo “eventos” ou diretamente pela codificação.

Determinar as temporadas de futebol pela consulta do resto

Antes da programação o EventHandler, inserimos ainda usando a instrução para a biblioteca de RestSharp no cabeçalho do arquivo de formulário.

usando RestSharp;

Então criamos uma sequência de caracteres diretamente no cabeçalho do formulário de classe com a chave de API, porque precisamos dele em lugares diferentes no código.

classe parcial pública Form1: form {const string apiKey = ‘ 29799fc09ba947ae890711 * ‘; / / […] outro código…}

Agora, é a programação fora do EventHandler. No início, tomamos no método Form_Load. Abaixo você pode ver o código-fonte inteiro do método. Em cada linha eu adicionei código de comentários, para que seu funcionamento deve ser compreensível. (Se mesmo assim surgirem dúvidas, deixe um comentário sob o artigo me.)

Private void Form1_Load (object sender, EventArgs e) {//Initialisierung do RestClients com a URL base da API var rClient = novo RestClient (“http://api.football-data.org”); //Erstellung de uma solicitação para o recurso/URI com a temporada & ligas rRequest var = novo RestRequest (“alfa/soccerseasons”, Method.GET); Adicionar o “X-Auth-token ‘ cabeçalho para ganhar a rRequest.AddHeader de acesso completo API (” X-Auth-Token “, apiKey); A API de consulta assíncrona com simultânea desserializar do JSON resposta rClient.ExecuteAsync<>> (rRequest, resposta => {//Iterieren über alle Saesons resposta.) . ListView-Eintrags listViewSeasons.BeginInvoke (delegado (ação) {listViewSeasons.Items.Add(lvi);}); }); Ativação de listViewSeasons.BeginInvoke o ListView (delegado (ação) {listViewSeasons.Enabled = true;}); });}

No método Form_Load, então será o primeiro ListView com uma lista de todos disponíveis através das temporadas de API/ligas, preenchido.

Gerar c# classes de objetos JSON

Qualquer um que leu cuidadosamente o código fonte acima, determinará que uma lista usada pelo tipo de temporada a consulta do resto. No entanto, essa classe não é parte do framework, mas uma figura das estações da ano a estrutura de dados API. Ele é especificado no comando por RestSharp sei em que formato são dados desserializados de JSON.

Quem as torneiras para fora como eu, avessos ao esvaziem classes à mão de acordo com predefinidos de estrutura de dados, pode usar, por exemplo, a ferramenta livre de json2csharp, que gera as classes translation from VPE for Csharp apropriado de código JSON existente.

Desde os benefícios da API, que incluía parcialmente mesmos objetos JSON de nome, tem o conteúdo de vários e você ainda pode, portanto, uma pequena mão deve criar múltiplas funções neste artigo, uma vez copiei as classes abaixo.

/ * * A seguir estão as classes, o para o * desserialização de respostas JSON são necessários * * / público classe auto {href sequência pública {obter; conjunto ;}} equipe de classe pública {href sequência pública {obter; conjunto ;}} dispositivos elétricos de classe pública {href sequência pública {obter; conjunto ;}} classe pública LeagueTable {href sequência pública {obter; conjunto ;}} ligações de classe pública {público auto auto {get; set;} equipes equipes pública {; Prepare;} luminárias luminárias pública {; Prepare;} pública LeagueTable leagueTable {obter; conjunto ;}} classe pública SeasonsList {lista pública de temporadas {; Prepare ;}} temporada de classe pública {ligações públicas _links {; Prepare;} legenda sequência pública {get; set;} liga sequência pública {get; set;} ano sequência pública {get; set;} public int numberOfTeams {; Prepare;} public int numberOfGames {; Prepare;} lastUpdated sequência pública {obter; definir ;}} ligação de classe pública {público auto {; Prepare;} string sequência pública soccerseason {obter; conjunto ;}} jogador de classe pública {href sequência pública {obter; conjunto ;}} classe pública LinksTeam {público auto auto {get; set;} luminárias luminárias pública {; Prepare;} público jogador jogador {obter; conjunto ;}} equipe de classe pública {pública LinksTeam _links {; Prepare;} public string nome {get; set;} código sequência pública {get; set;} sequência pública shortName {get; set;} sequência pública squadMarketValue {get; set;} sequência pública crestUrl {obter; conjunto ;}} classe pública TeamList {lista pública _links {; Prepare;} public int contagem {get; set;} públicos listam as equipes {; Prepare ;}} classe pública TeamLink {href sequência pública {obter; conjunto ;}} classe pública Self2 {href sequência pública {obter; conjunto ;}} classe pública Soccerseason {href sequência pública {obter; conjunto ;}} classe pública HomeTeam {href sequência pública {obter; conjunto ;}} classe pública AwayTeam {href sequência pública {obter; conjunto ;}} classe pública Links2 {Self2 pública auto {; Prepare;} pública Soccerseason soccerseason {get; set;} pública HomeTeam homeTeam {get; set;} pública AwayTeam awayTeam {obter; conjunto ;}} resultado de classe pública {public int goalsHomeTeam {get; set;} public int goalsAwayTeam {obter; conjunto ;}} dispositivo elétrico de classe pública {pública Links2 _links {; Prepare;} data sequência pública {get; set;} public string estado {get; set;} int público jornada {get; set;} sequência pública homeTeamName {get; set;} sequência pública awayTeamName {get; set;} resultado resultado público {obter; definir ;}} classe pública FixtureList {pública TeamLink _links {; Prepare;} public int contagem {get; set;} pública listar dispositivos elétricos {; Prepare ;}}

Adiciona essas classes no final do bloco de namespace (mas fora da classe de formulário) em seu formulário.um arquivo. cs.

Mostrar as equipes de uma temporada

Na próxima etapa, tomamos no manipulador de evento DoubleClick do ListView primeiro. Isto gera, quando um clique duplo é feito na lista (idealmente em um item de lista). Quando o evento é acionado, todos correspondentes às equipes na segunda temporada ListView deve ser carregado. O código para isso se parece com isto:

privada void listViewSeasons_DoubleClick (object sender, EventArgs e) {/ / Certifique-se que o duplo clique em uma entrada feita foi se (listViewSeasons.SelectedItems.Count > 0) {//Auslesen as equipes URI a partir do dia da entrada clicada var teamUrl =} listViewSeasons.SelectedItems [0]. Tag.ToString(). Substituir (“http://API.football-data.org/”,””); Criação dos clientes, os pedidos e o cabeçalho de autenticação como no carga evento var rClient = novo RestClient (“http://api.football-data.org”); var rRequest = RestRequest novo (teamUrl, Method.GET); rRequest.AddHeader (“X-Auth-Token”, apiKey); Consulta assíncrona das equipes da temporada selecionados incl. desserialização rClient.ExecuteAsync(rRequest, resposta => {resposta = var equipes. Dados; Esvaziamento da equipe ListView listViewTeams.BeginInvoke (delegado (ação) {listViewTeams.Items.Clear();}); Iterar sobre todos os times/equipes a entrada na listViewTeams.BeginInvoke de lista da tripulação (delegado (ação) {listViewTeams.Items.Add(lvi);}); }); Habilitar a tripulação ListView listViewTeams.BeginInvoke (delegado (ação) {listViewTeams.Enabled = true;}); }); }}

Estatísticas de uma equipa de futebol

Agora, então temos uma visão geral de todas as estações existentes e pode mostrar-nas equipes para cada temporada/liga. Na próxima etapa, enchemos o manipulador de evento DoubleClick da vida listViewTeams. Este ListView exibe as equipes disponíveis. Transforma o usuário em um clique duplo em uma equipe, para exibir informações sobre a equipe no RichTextBox. O código, incluindo comentários explicativos abaixo:

privada void listViewTeams_DoubleClick (object sender, EventArgs e) {/ / Certifique-se que o duplo clique em uma entrada feita foi se (listViewTeams.SelectedItems.Count > 0) {//Auslesen do objeto de equipe da equipe var = listViewTeams.SelectedItems (equipe) [0].} Dia; “Saída de informações de tripulação” nome”,”Atalho”e”Valor de mercado”com base nas informações de //der de richTextBoxInformation.Text de objeto a equipe =” = \r\n “+” nome: “+ team.name +”\r\n”+” código: “+ team.code +”\r\n”+” “Valor de mercado total:” + team.squadMarketValue + “\r\n” + “= \r\n” + “\r\n\r\n”;. Leia o jogo-informações-URI (luminárias) var fixtureUrl = team._links.fixtures.href.Replace (“http://api.football-data.org/”,””); Criação de cliente, pedido e var rClient definir o cabeçalho auth = novo RestClient (“http://api.football-data.org”); var rRequest = RestRequest novo (fixtureUrl, Method.GET); rRequest.AddHeader (“X-Auth-Token”, apiKey); = Para a consulta on-line síncrona da API var resposta rClient.Execute(rRequest); resposta = var dispositivos elétricos. Dados; Decrescente de dias de jogo e em seguida, iterar sobre a fixtures.fixtures.OrderByDescending dias de jogo (x => x.matchday). ToList(). }) (Jogo de origem”:”Auswärtsspiel”) +”\r\n”+” resultado: “+ (fixture.status! =”Acabou””? “) Ainda não esgotado jogo”: fixture.result.goalsHomeTeam +”: “+ luminária.{{({result.goalsAwayTeam) + “\r\n” + “dia do jogo:” + fixture.matchday + “(” + fixture.date + “) \r\n\r\n” ;});}}

Neste ponto, nosso tutorial está terminado. A função básica da API, bem como a fixação dos restantes consultas incluindo desserialização JSON deve estar claro agora. Quem gosta pode criar agora mais estatísticas e avaliações. Também sobre a visualização dos dados com visualmente atraentes gráficos pode ser continuada.

Arquivos de projeto e download

Quem obtém seu projeto ao trabalho ou não quer escrever o código, pode baixar o projeto do Visual Studio sob o link a seguir.

Conclusão

Você pode usar APIs REST sem muito esforço em c# por RestSharp. Deve haver problemas com o JSON desserialização de uma vez, ou são o desejo para desserializar JSON dinamicamente ainda te dar a dica, além de trabalhar com a biblioteca Json.NET e consultar somente o conteúdo usando o RestSharp neste ponto. Para desserializar o Json.NET-biblioteca seria responsável, que é mais flexível e mais poderoso do que a lógica implementada em RestSharp.

Seu prédio deve colocar em um aplicativo separado na SoccerDashboard ou a informação deste artigo, eu ficaria feliz em ler seus resultados nos comentários. Que características, estatísticas e avaliações gostaria de criá-la com a API exibida?

Sobre o autor: Este artigo, bem como 363 outros artigos sobre código-bude.net, escrito por Raphael. -Desde 2011 blog aqui sobre programação, meu software, escrever tutoriais e tentar o meu conhecimento, portanto ele vai bem, para compartilhar com meus leitores. Além disso, escrevo sobre temas de meus estudos sobre derwirtschaftsinformatiker.de. E-mail • Google + • Facebook • Twitter

4SHARESFacebookTwitterGoogleWhatsappRedditPocketStumbleuponPinterestXingMail