8

I want to get all variables from https://api.coinmarketcap.com/v1/ticker/ in my c# console application. How can I do this?

I started with getting the whole page as a stream. What to do now?

private static void start_get()
{
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create
        (string.Format("https://api.coinmarketcap.com/v1/ticker/"));

    WebReq.Method = "GET";

    HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

    Console.WriteLine(WebResp.StatusCode);
    Console.WriteLine(WebResp.Server);

    Stream Answer = WebResp.GetResponseStream();
    StreamReader _Answer = new StreamReader(Answer);
    Console.WriteLine(_Answer.ReadToEnd());
}
3

2 Answers 2

16

First you need a custom class to use for deserialization:

public class Item
{
    public string id { get; set; }
    public string name { get; set; }
    public string symbol { get; set; }
    public string rank { get; set; }
    public string price_usd { get; set; }
    [JsonProperty(PropertyName = "24h_volume_usd")]   //since in c# variable names cannot begin with a number, you will need to use an alternate name to deserialize
    public string volume_usd_24h { get; set; }
    public string market_cap_usd { get; set; }
    public string available_supply { get; set; }
    public string total_supply { get; set; }
    public string percent_change_1h { get; set; }
    public string percent_change_24h { get; set; }
    public string percent_change_7d { get; set; }
    public string last_updated { get; set; }
}

Next, you can use Newtonsoft Json, a free JSON serialization and deserialization framework in the following way to get your items (include the following using statements):

using System.Net;
using System.IO;
using Newtonsoft.Json;

private static void start_get()
{
    HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(string.Format("https://api.coinmarketcap.com/v1/ticker/"));

    WebReq.Method = "GET";

    HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

    Console.WriteLine(WebResp.StatusCode);
    Console.WriteLine(WebResp.Server);

    string jsonString;
    using (Stream stream = WebResp.GetResponseStream())   //modified from your code since the using statement disposes the stream automatically when done
    {
       StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8);
       jsonString = reader.ReadToEnd();
    }

    List<Item> items = JsonConvert.DeserializeObject<List<Item>>(jsonString);

    Console.WriteLine(items.Count);     //returns 921, the number of items on that page
}

Finally, the list of elements is stored in items.

Sign up to request clarification or add additional context in comments.

Comments

3

A simplified version of Keyur PATEL's work.

static void GetCoinValues()
{
    string json = new WebClient().DownloadString("https://api.coinmarketcap.com/v1/ticker/");

    List<Item> items = JsonConvert.DeserializeObject<List<Item>>(json);

    foreach (var item in items)
    {
        Console.WriteLine("ID: " + item.id.ToUpper());
        Console.WriteLine("Name: " + item.name.ToUpper());
        Console.WriteLine("Symbol: " + item.symbol.ToUpper());
        Console.WriteLine("Rank: " + item.rank.ToUpper());
        Console.WriteLine("Price (USD): " + item.price_usd.ToUpper());
        Console.WriteLine("\n");
    }
}

4 Comments

How would you get the data for a specific symbol using your method? I added IF (item.symbol = mySymbol) { set some variables} in the loop but it doesnt return anything.
Nevermind I got it figured out...had a problem with case matching so I had to uppercase my string. However the json request seems to limit the list. Not giving the full list of currencies. Anyway to solve around this?
can i persuade you to shar eyour github repo of this?
Note that WebClient implements IDisposable and should have Using or is otherwise disposed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.