Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] dataset .ReadXml Root element is missing.

Pagina: 1
Acties:

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 09:18
Tweakers,

voor school ben ik met een project bezig.
Dit houdt in dat wij een mediacenter gaan bouwen waarmee je ook kan downloaden
Ons plan is d.m.v. RSS series automatisch te downloaden als er een nieuwe aflevering uitkomt.
Dit is allemaal gelukt, maar we willen nu ook films kunnen downloaden

torrentz.com heeft ook een rss feed http://torrentz.eu/feed?q=[woord1]+[woord2] (bv. batman 2 = http://torrentz.eu/feed?q=batman+2)

Dit gaat allemaal prima, alleen op het moment dat ik met het programma dat perfect series kan downloaden, de RSS van torrentz.com inlees krijg ik een error: Root element is missing

Rss series
Rss films

Ik heb me hier al een dag scheel op lopen zoeken maar ik kom er niet uit.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 public static class RssReader
    {
        public static List<Item> _rssFeed;
        public static string urlInRss = "";
        public static List<Item> Read(string url)
        {
            var webResponse = WebRequest.Create(url).GetResponse();
            if (webResponse == null)
                return null;
            var ds = new DataSet();
            System.IO.Stream ss = webResponse.GetResponseStream();
            ds.ReadXml(ss);
            var _Items = (from row in ds.Tables["item"].AsEnumerable()
                        select new Item
                        {
                            Title = row.Field<string>("title"),
                            LinkToTorrent = row.Field<string>("link"),
                            guid = row.Field<string>("guid"),
                            Description = row.Field<string>("description"),
                            urlToRssFeed = url,
                        }).ToList();
            _rssFeed = _Items;
            return _Items;
        }
    }


Het gaat dus fout bij ds.ReadXml(ss);

b.v.d.

  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 11:24
Bekijk je ss stream eens als text? Ik vermoed dat je iets anders dan XML van de webresponse.GetResponseStream terug krijgt (wellicht een foutmelding o.i.d.)

  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 09:18
Dit zit er in de ss (webresponse.GetResponseStream)
Afbeeldingslocatie: https://dl.dropboxusercontent.com/u/70874670/movieDownloader_ss.png

maar nogmaals dezelfde code (alleen de inner nodes aangepast) kan ik wel fijn de RSS Feed van http://showrss.karmorra.info/feeds/505.rss inlezen

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Marco1994 schreef op vrijdag 01 november 2013 @ 10:17:
Dit zit er in de ss (webresponse.GetResponseStream)
[afbeelding]

maar nogmaals dezelfde code (alleen de inner nodes aangepast) kan ik wel fijn de RSS Feed van http://showrss.karmorra.info/feeds/505.rss inlezen
Wat Sikkek bedoelt is dat je eens i.p.v. ds.ReadXml(ss); iets doet als var foo = ss.ReadAllText(); o.i.d. (weet 't even niet uit m'n hoofd; iets van ReadAll(), ReadToEnd() o.i.d.) en dan foo inspecteert.

[ Voor 7% gewijzigd door RobIII op 01-11-2013 10:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 09:18
RobIII schreef op vrijdag 01 november 2013 @ 10:29:
[...]

Wat Sikkek bedoelt is dat je eens i.p.v. ds.ReadXml(ss); iets doet als var foo = ss.ReadAllText(); o.i.d. (weet 't even niet uit m'n hoofd; iets van ReadAll(), ReadToEnd() o.i.d.) en dan foo inspecteert.
Ik heb dit stukje code geprobeerd :
code:
1
2
3
            byte[] bytes = new byte[ss.Length];
            int numBytesToRead = (int) ss.Length;
            var test = ss.Read(bytes, numBytesToRead, 10);


.Read() is de enige functie die lijkt op wat jij beschrijft.
Echter krijg ik al bij bytes een error, en dat klopt want ss.lenght 'does not support seek operations.'
dus test = 0;

De RSS die eruit klapt heeft dit : xmlns:atom="http://www.w3.org/2005/Atom" in Rss staan en de andere niet, ik weet dat dit iets te maken heeft met een format. Zou dit roet ik het eten kunnen gooien?

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 22-11 15:31

Haan

dotnetter

Ik weet niet of je voor je opdracht per se op een bepaalde manier moet werken, maar anders zou ik niet zelf het wiel opnieuw uit gaan vinden, en gaan werken met de Syndication classes uit het .NET framework

Als ik jouw voorbeeld herschrijf naar een mooie async oplossing, zou je zoiets krijgen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static async Task<IEnumerable<Item>> GetBlogFeed(string feedUrl, int feedCount)
{
    try
    {
        HttpResponseMessage response;
        using (var client = new HttpClient())
        {
            response = await client.GetAsync(feedUrl);
        }

        var reader = XmlReader.Create(new StringReader(await response.Content.ReadAsStringAsync()));
        var feed = SyndicationFeed.Load<SyndicationFeed>(reader);

        if (feed != null)
        {
           var feeds = feed.Items.Select(
                item => new  Item
                        {
                            Title = item .Title,
                            LinkToTorrent = "" // todo,
                            guid = item .Id,
                            Description = item .Summary,
                            urlToRssFeed = item .Links.FirstOrDefault().Uri.ToString(),
                        }).Take(feedCount);
            return feeds;
        }
    }
    catch
    {
        // handle exceptions
        return Enumerable.Empty<Item>();
    }

    return Enumerable.Empty<Item>();
}

[ Voor 67% gewijzigd door Haan op 01-11-2013 13:57 ]

Kater? Eerst water, de rest komt later


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Marco1994 schreef op vrijdag 01 november 2013 @ 11:01:
De RSS die eruit klapt heeft dit : xmlns:atom="http://www.w3.org/2005/Atom" in Rss staan en de andere niet, ik weet dat dit iets te maken heeft met een format. Zou dit roet ik het eten kunnen gooien?
Maak nou gewoon eens een fatsoenlijke testcase zodat je je niet blind staart op meuk die niet relevant is...


Dit werkt:
C#:
1
2
3
4
5
6
using (var webResponse = WebRequest.Create("http://showrss.karmorra.info/feeds/505.rss").GetResponse())
using (var sr = new webResponse.GetResponseStream())
{
    var ds = new DataSet();
    ds.ReadXml(sr);
}


Verander je de URL naar http://torrentz.eu/feed?q=%5Bwoord1%5D+%5Bwoord2 dan doet 't boem. Even aanpassen dat we de response kunnen zien m.b.v. een StreamReadertje et voila:

Afbeeldingslocatie: http://tweakers.net/ext/f/jVn3F70olDbMJvb1pYcSK0p3/full.png

result is dus op wat whitespace na doodleuk leeg. Idem voor http://torrentz.eu/feed?q=batman+2. Conclusie: waarschijnlijk moet je even een useragent meesturen o.i.d. (bekijk je browser's request headers en bouw die één-voor-één in bovenstaande test en kijk met welke header(s) het opgelost is.

En finally: dit is wat je dus zou verwachten:

Afbeeldingslocatie: http://tweakers.net/ext/f/NAbrIFyD6Muev6eXdin1EfWm/full.png

[ Voor 20% gewijzigd door RobIII op 01-11-2013 15:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 09:18
ik heb me vandaag verdiept in Headers en ik ben het een en ander wijzer geworden.
d.m.v. dit stukje code, is mijn ReadToEnd niet meer leeg.

Ik krijg netjes dezelfde data terug als mij die andere RSS.
Echter als ik dit weer ga uitlezen in een dataset krijg ik weer de melding: Root element is missing. 8)7


code:
1
2
3
4
5
WebClient client = new WebClient();
            client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36");
            Stream data = client.OpenRead("http://torrentz.eu/feed?q=batman+2");
            StreamReader sr =  new StreamReader(data);
            var test = sr.ReadToEnd();

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Best guess: BOM

[ Voor 64% gewijzigd door RobIII op 04-11-2013 11:54 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1