从网站获取数据

时间:2013-02-13 01:46:31

标签: windows-phone-7 html-agility-pack webrequest

因为有几天我正在尝试为我的WP7手机编写一个C#程序来从网站上获取某种数据文件。

有一个主链接(http://www.convert-control.de/plant/53752/yield/2012),它生成我的太阳能电池板在特定时间产生的产量的图表视图。这里是2012年的上面。将请求更改为... yield / 2012/4/5将为您提供4月5日的收益率。

所以发生了什么,在这个请求之后,服务器将生成一个文件,该文件被cad图表数据。

在我调用主链接后,我能够在浏览器中启动第二个http://www.convert-control.de//chartdata/53752请求并获取相关数据。这些数据用于填充图表。此图表是一个swf对象。

所以,我现在的问题是,如何在c#中为WP7程序编写我的请求,这样可以为我提供进一步使用的数据?

感谢您的帮助, 乔

1 个答案:

答案 0 :(得分:0)

乔!

获取数据很简单。您的数据大小不超过8kb,这种小体积的最佳方法是IMO使用WebClient.DownloadStringAsync方法(或者您可以选择DownloadStringTaskAsync来使用我推荐的异步CTP,BTW)。

在字符串中得到响应之后,我建议使用Json.NET将其解析为强类型对象。这是json2csharp.com从您的数据中自动生成的代码,只有一些修复(未经测试):

public class Title
{
    public string text { get; set; }
}

public class Key
{
    public string text { get; set; }
    public string colour { get; set; }
    [JsonProperty("font-size")]
    public int font_size { get; set; }
}

public class Val
{
    public string colour, tip;
    public int val;
}

public class Element
{
    public string type { get; set; }
    public int alpha { get; set; }
    public List<List<Val>> values { get; set; }
    public List<Key> keys { get; set; }
}

public class Tooltip
{
    public bool shadow { get; set; }
    public int stroke { get; set; }
    public string colour { get; set; }
    public string background { get; set; }
    public string title { get; set; }
    public string body { get; set; }
}

public class Labels
{
    public List<string> labels { get; set; }
    public int steps { get; set; }
}

public class XAxis
{
    public string colour { get; set; }
    public Labels labels { get; set; }
    [JsonProperty("grid-colour")]
    public string grid_colour { get; set; }
}

public class YAxis
{
    public int min { get; set; }
    public int max { get; set; }
    public int steps { get; set; }
    [JsonProperty("grid-colour")]
    public string grid_colour { get; set; }
    public string colour { get; set; }
}

public class XLegend
{
    public string text { get; set; }
    public string style { get; set; }
}

public class YLegend
{
    public string text { get; set; }
    public string style { get; set; }
}

public class RootObject
{
    public Title title { get; set; }
    public List<Element> elements { get; set; }
    public string bg_colour { get; set; }
    public Tooltip tooltip { get; set; }
    public int num_decimals { get; set; }
    public bool is_fixed_num_decimals_forced { get; set; }
    public bool is_decimal_separator_comma { get; set; }
    public XAxis x_axis { get; set; }
    public YAxis y_axis { get; set; }
    public XLegend x_legend { get; set; }
    public YLegend y_legend { get; set; }
}

然后,使用您从Web服务器获得的响应字符串调用JsonConvert.DeserializeObject<RootObject>( response ),然后返回包含所有响应数据的强类型C#对象。根据您的喜好处理或想象它。

AFAIK目前无法在Windows Phone上重复使用SWF控件。您必须创建自己的UI以可视化您的数据。如果你需要有关该部分的帮助,你应该谷歌和/或在这里发布另一个问题。