Probleme mit "^" (carret) in URL - Realtime Ticker sample

15/05/2009 - 06:07 von Mikeerh | Report spam
Ich habe ein Ticker (Realtime-börsenkurse von Yahoo) sample in C# - das
làuft im Prinzip auch.
ABER - sobald ich die Indices von Yahoo haben will -die alle mit dem Carret
(^) beginnen - wird der String BEVOR er aufs Netz geht (hab ich mit
wireshark gesehen) schon in einen String mit %-Zeichen gewandelt
und wird somit von Yahoo mit N/A beantwortet..

Wie kann ich dem Framework das abgewöhnen??
Sample:
?using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace YahooTicker
{
class Program
{


private static void Main(string[] args)
{
string ticker = "^DJI";
Uri siteUri = new Uri("http://quote.yahoo.com/d/quotes.csv?s=" +
ticker + "&f=sl1d1t1c1ohgvj1pp2owern&e=.csv");

WebClient web = new WebClient();
string data = web.DownloadString(siteUri);

Quote q = Quote.Parse(data);

Console.WriteLine(string.Format("{0} {1} Last:{2} Change:{3}
Bid:{4} Offer: {5}", q.Ticker, q.Name, q.Last, q.Change, q.Bid, q.Offer));
Console.ReadLine();
}
}

public class Quote
{
public double Last { get; set; }
public string Ticker { get; set; }
public double Change { get; set; }
public string Name { get; set; }
public double Bid { get; set; }
public double Offer { get; set; }

public static Quote Parse(string data)
{
string[] fields = data.Replace("\"", "").Split(',');
Quote q = new Quote
{
Ticker = fields[0].ToUpper(),
Last = Convert.ToDouble(fields[1]),
Change = Convert.ToDouble(fields[4]),
Bid = Convert.ToDouble(fields[5]),
Offer = Convert.ToDouble(fields[6]),
Name = fields[7].ToUpper()
};

return q;
}
}
}
 

Lesen sie die antworten

#1 Udo Nesshoever
15/05/2009 - 10:27 | Warnen spam
Mikeerh wrote,

Ich habe ein Ticker (Realtime-börsenkurse von Yahoo) sample in C# - das
làuft im Prinzip auch.
ABER - sobald ich die Indices von Yahoo haben will -die alle mit dem Carret
(^) beginnen - wird der String BEVOR er aufs Netz geht (hab ich mit
wireshark gesehen) schon in einen String mit %-Zeichen gewandelt



Du brauchst kein wireshark. Debug durch den Code. Nach dem Erzeugen der
Uri schaust du in die Query Eigenschaft und siehst das escaped Caret.

und wird somit von Yahoo mit N/A beantwortet..

Wie kann ich dem Framework das abgewöhnen??



Der Lesbarkeit halber hab ichs ein bisschen aufgesplittet:

Sample:


private static void Main(string[] args)
{
string ticker = "^DJI";
string uri = "http://quote.yahoo.com/d/quotes.csv";
string query = string.Format(
"?s={0}&f=sl1d1t1c1ohgvj1pp2owern&e=.csv", ticker);

// hier wird leider eine 'deprecated' Methode verwendet, die aber
// den gewuenschten Erfolg bringt:
// der zweite Parameter gibt an, dass die URI bereits vom
// User escaped wurde.
// Ich hab auf die Schnelle leider keine andere Methode
// gefunden, der Uri mitzuteilen, dass die Adresse bereits
// escaped wurde.
Uri siteUri = new Uri(uri + query, true);
[...]

Cheers,
Udo

Ähnliche fragen