2013-02-13 2 views
0

С тех пор как я пару дней пытаюсь написать программу C# для своего телефона WP7, чтобы получить какой-то файл данных с веб-сайта.Получение данных с веб-сайта

Существует основная ссылка (http://www.convert-control.de/plant/53752/yield/2012), которая генерирует диаграммный снимок урожайности моих солнечных панелей, произведенных в определенное время. Здесь выше его на 2012 год. Изменение запроса на ... yield/2012/4/5 даст вам выход 5-го апреля.

Итак, что случилось, после этого запроса сервер будет генерировать файл с календарными данными.

После того как я позвонил по главной ссылке, я могу запустить второй запрос, который http://www.convert-control.de//chartdata/53752 в моем браузере, и я получаю соответствующие данные. Эти данные используются для заполнения диаграмм. Эта диаграмма представляет собой объект swf.

Итак, теперь мой вопрос: как я могу написать свой запрос в C# для программы WP7, которая дает мне данные для дальнейшего использования?

Спасибо за вашу помощь, Джо

ответ

0

Джо!

Получение данных прост. Ваши данные имеют размер менее 8 КБ, лучшим способом для такого небольшого объема является ИМО с использованием метода WebClient.DownloadStringAsync (или DownloadStringTaskAsync - вы решите использовать Async 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; } 
} 

Затем вы называете JsonConvert.DeserializeObject<RootObject>(response) строкой ответа вы получили от веб-сервера, и вы ret строго-типа объекта C#, содержащего все данные ответа. Обработайте или визуализируйте его, как вам нравится.

AFAIK В настоящее время нет возможности повторно использовать SWF-контроль на Windows Phone. Вы должны создать свой собственный пользовательский интерфейс для визуализации ваших данных. Если вам нужна помощь с этой частью, вы должны, вероятно, пойти в Google и/или задать другой вопрос здесь.

+0

Спасибо, thats interresting. Я никогда не использовал JSON. Я попробую и посмотрю, что произойдет. – User7545875q

+0

Aih, ... к сожалению, это не ответ на мой вопрос. Дело в том, что я НЕ могу получить эти данные вообще. В основном (в браузере) этот URL-адрес диаграммы генерируется и хранится где-то, когда я запускаю http://www.convert-control.de/plant/53752/yield/2012. THEN (в браузере), я могу ввести адрес chartdata, чтобы получить то, что мне нужно. Фильтрация данных уже выполнена. Я использую HTMLAgilityPack для этого. Возникает вопрос: как я могу заставить 1-ю ссылку получить 2-й. Thanx, Jo – User7545875q

+0

Загрузите первый документ (вам не нужен какой-либо связанный контент только HTML). Заголовок говорит, что это XHTML 1.0 Strict, поэтому, если вам повезет, вы сможете загрузить его в парсер XML. После анализа выполните запрос XPath «// object [@ id = yieldChart]/param [@ name = flashvars]/@ value», значение узла будет, например, «data-file =/en/chartdata/53752»,/en/chartdata/53752 - это данные, которые вам нужны. – Soonts

Смежные вопросы